HTTP

1. 特点

1. 支持客户/服务器模式

客户服务器模式工作的方式是由客户端向服务器发出请求,服务器端响应请求,并进行相应服务

2. 简单快速

  1. 客户端向服务器请求服务时,只需要传送请求方法和路径
  2. 请求方法常用的有GET、HEAD、POST. 每种方法规定了客户端与服务器联系的类型不同
  3. 由于HTTP协议简单, HTTP服务器的程序规模小, 因而通信速度很快

3. 灵活

  1. HTTP允许传说任意类型的数据对象
  2. 正在传输的类型由Content-Type(Content-Type是HTTP包中用来表示内容类型的标识) 加以标记.

4. 无连接

  1. 无连接的含义是限制每次连接只处理一个请求

  2. 服务器处理完客户的请求, 并收到客户的应答后,即断开连接

  3. 采用这种方式可以节省传输时间.

  4. 后续有keep-alive保持连接,保持的是TCP连接.

5. 无状态

  1. HTTP协议是无状态协议
  2. 无状态是指协议对于事务处理没有记忆功能.缺少状态意味着如果后续处理需要前面的信息, 则它必须重传,这样可能导致每次连接传送的数据量增大.
  3. 另一方面,在服务器不需要前面的信息时他的应答就比较快.

2. URI与URL

URI: Uniform Resource Identifier 一个紧凑的字符串用来表示抽象或者物理资源;

A URI 可以进一步被分为定位符、名字或者两者都是;

术语“Uniform Resource Locator” (URL) 是URI的子集,除了确定一个资源,还提供一种定位该资源的主要访问机制(如其网络“位置”);

URI = URN + URL

URI可以分为URL,URN或者同时具备locators和names特性的一个东西

URN作用就好像一个人的名字,URL就像一个人的地址;

换句话说:URN确定了东西的身份, URL提供了找到它的方式;

3. 报文

1. HTTP的报文头分类

HTTP的报文头大体可以分为4类:通用报文头、请求报文头、响应报文头和实体报文头

2. HTTP的报文头字段

在HTTP/1.1 里一共规范了47中报文头字段

1.通用报文头

首部字段名 说明
Cache-Control 控制缓存的行为
Connection 逐跳首部、连接的管理,keep-alive保持连接,Close,短连接
Date 创建报文的日期时间
Pragma 报文指令
Trailer 报文末端的首部一览
Transfer-Encoding 指定报文主题的传输编码方式
Upgrade 升级为其它协议
Via 代理服务器的相关xinxi
Warning 错误通知

2. 请求报文头

首部字段名 说明
Accept 用户代理可处理的媒体类型,不支持的时候返406错误. 目前基本上都是*/*,代表服务器支持所有
Accept-Charset 优先的字符集
Accept-Encoding 优先的内容编码, 通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip/deflate)
Accept-Language 优先的语言,申明自己接收的语言,Accept-Language:zh-cn,zh;q=0.7,en-us,en;q=0.3(q是权重值, 优先返回中文资源)
Authorization Web的认证信息
Expect 期待服务器的特定行为
From 用户的电子邮箱地址
Host 请求资源所在服务器
If-Match 比较实体标记(ETag)
If-Modified-Since 比较资源的更新时间
if-None-Match 比较实体标记
If-Range 资源未更新时发送实体Byte的范围请求
If-Unmodified-Since 比较资源的更新时间
Max-Forwards 最大传输逐跳数
Proxy-Authorization 代理服务器要求客户端的认证信息
Range 实体的字节范围请求
Referer 对请求中URI的原始获取方
TE 传输编码的优先级
User-Agent HTTP客户端程序的信息

3. 响应报文头

首部字段名 说明
Accept-Ranges 是否接受字节范围请求
Age 推算资源创建经过时间
ETag 资源的匹配信息
Location 令客户端重定向至指定URI
Proxy-Authenticate 代理服务器对客户端的认证信息
Retry-After 对再次发起请求的时机要求
Server HTTP服务器的安装信息
Vary 代理服务器缓存的管理信息
WWW-Authenticate 服务器对客户端的认证信息

4. 实体报文头

首部字段名 说明
Allow 资源可支持的HTTP方法
Content-Encoding 实体主体适用的编码方式
Content-Language 实体主体的自然语言
Content-Length 实体主体的大小(单位:字节)
Content-Location 替代对应资源的URI
Content-MD5 实体主体的报文摘要
Content-Range 实体主体的位置范围
Content-Type 实体主体的媒体类型
Expires 实体主体过期的日期时间
Last-Modified 资源的最后修改日期时间

4. 请求方法

Http/1.1 常用方法

GET

POST

PUT

HEAD

DELETE

OPTIONS

TRACE

CONNECT

1. GET

  1. GET方法用来请求访问已经被URI识别的资源

  2. 指定的资源经过服务器端解析后返回响应内容

  3. GET方法也可以用来提交表单和其它数据(数据量小,没有安全性)

    http://localhost/login.php?userName=aa&&password=1234

    从上面的URL请求中,很容易就可以辨认出表单提交的内容

2. POST

  1. POST方法与GET功能类似, 一般用来传输实体的主体
  2. POST方法的主要目的不是获取响应主体的内容
  3. 表单数据放在实体中,没有大小限制,安全系高.

3. PUT

  1. 从客户端向服务器传送的数据取代指定的资源的内容

  2. PUT方法与POST方法使用上相同, 最大的不同是:PUT是幂等的,而POST是不幂等的

    创建资源使用POST, 更新资源使用PUT

  3. 因此我们更多时候将PUT方法用作传输资源

  4. http1.1的PUT方法没有安全验证,所以服务器通常使用POST请求来替代PUT请求

4. HEAD/DELETE

  1. HEAD

    类似GET请求,只不过返回的响应中没有具体的内容, 用于获取报头,可以用来检测链接是否能访问, 最近是否有更新

  2. DELETE

    请求服务器删除指定的资源.

    http1.1的DELETE方法没有安全验证机制, 可以被攻击

5. OPTIONS

  1. 用来查询针对请求的URI指定的资源支持的方法

    得到的响应

    HTTP/1.1 200

    Set-Cookie: JSESSIONID=Fasdkfjdasjfldajsklfdsalfldasfdsafkldas;path=/;HttpOnly

    Allow: GET, HEAD, POST, PUT, DELETE, OPTIONS

    Content-Length: 0

    Date: Wed, 07 Aug 2021 11:05:44 GMT

6.TRACE/CONNECT

  1. TRACE

    1. 回显服务器收到的请求, 主要用于测试或者诊断
  2. CONNECT
    1. 开启一个客户端与所请求资源之间的双向沟通的通道,他可以用来创建隧道
    2. 通常用proxy代理服务器之间.

5.状态码

用以表示网页服务器超文本传输协议响应状态的3位数字代码

1. 状态码分类

分类 含义
1XX 表示消息.这一类型的状态码,代表请求已被接收, 需要继续处理.这类响应是临时响应,值包含状态行和某些可选的响应头信息,并以空行结束
2XX 表示成功。这一类型的状态码代表请求成功被服务器接收、理解、并接受。
3XX 表示重定向。这类状态码代表需要客户端采取进一步的操作才能完成请求。通常这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的Location域中指明。
4XX 表示请求错误。这类的状态码代表了客户端看起来可能发生了错误,妨碍了服务器的处理。除非响应的是一个HEAD请求,否则服务器就应该返回一个解释当前状况的实体,以及这是临时的还是永久性的状况。这些错误码适用于任何请求方法。浏览器应当向用户显示任何包含在此类错误响应中的实体内容。
5XX 表示服务器错误。这类错误码代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以前的软硬件资源无法完成对请求的处理。除非这是一个HEAD请求,否则服务器应当包含一个解释当前错误状态以及这个状态是临时的还是永久的解释信息实体。浏览器应当向用户展示任何在当前响应中被包含的实体。

2. 常用状态码

状态码 英文名称 描述
200 OK 请求已成功,请求所希望的响应头或数据体将随响应返回
202 Accepted 已接受,已经接受请求,但未处理完成
206 Partial Content 部分内容,服务器成功处理了部分GET请求。断点续传的基石
301 Moved Permanently 永久移动,请求的资源已被永久的移动到新URI,返回信息会包括新的URl,,浏览器会自动重定向到新URI。今后任何新的请求都应使用新的URI代替
302 Found 临时移动,与301类似,但资源只是临时被移动。客户端应继续使用原有URI
400 Bad Request 客户端请求的语法错误,服务器无法理解
401 Unauthorized 请求要求用户的身份认证
403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求
404 Not Found 服务器无法根据客户端的请求找到资源
500 Internal Server Error 服务器内部错误,无法完成请求
502 Bad GateWay 充当网关或代理的服务器,从远端的服务接收到一个无效的请求

6.状态管理 Cookie与Session

Cookie和Session都称为状态跟踪技术

1. Cookie

  1. Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就像服务器浏览器颁发一个Cookie。

  2. 客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。

  3. SessionId就存在Cookie中。

2. Session

Session是另一种记录客户状态的机制,保存在服务器上。客户端浏览器访问服务器的时候, 服务器把客户端信息以某种形式记录在服务器上

客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。

Session ID保存

  1. 保存在Cookie中
  2. URL重写,作为查询参数: http://localhost/query?sessionId=afalfjdsafja
  3. 隐藏表单

Session有效期

  1. Session 超时失效, 越来越多的Session触发Session清理操作
  2. 程序调用HttpSession.inivalidate();
  3. 服务器进程被停止

3. Cookie和Session的区别

  1. 存放位置不同:Cookie存放在客户端,Session存放在服务器
  2. 安全性(隐私策略)不同:Cookie存储在客户端浏览器中, 对用户可见.Session存在服务器中,用户不可见
  3. 有效期:Cookie可以在浏览器存很久, Session会经常被清理
  4. 对服务器的压力不同:Cookie对服务器没有什么压力, Session存在服务器,占用服务器内存

7. 认证方式

Basic:明文密码

Digest:提供了防止密码被窃听的机制,但是还是不能伪装

SSL客户端认证:SSL客户端认证借由HTTPS的客户端证书完成认证的方式.凭借客户端证书认证,服务器可确认访问是否来自自己登录的客户端。

基于表单的认证:由Web程序各自实现基于表单的认证方式,通过Cookie和Session的方式来保持用户的状态

8. HTTP的长连接与短连接

  1. HTTP协议是基于请求、响应模式的,因此只要服务端给了响应,本次HTTP请求就结束了

  2. HTTP的长连接和短连接本质上是TCP长连接和短连接

  3. HTTP 1.0 默认使用短连接

  4. HTTP 1.1 默认使用长连接

9. 断点续传

断点续传和多线程下载都是需要使用range头

1. Range

Range 用于请求头中,指定第一个字节的位置和最后一个字节的位置,一般格式为:

Range:(unit=first byte position)-[last byte position]

如:

Range: bytes=0-499 从第0个到第499个位置byte

Range: bytes=500-999 从第500个到第999个位置的byte

Range: bytes=- 500 最后500个byte

Range: bytes=500- 从第500个位置之后的byte

Range: bytes=500-600,600-999

2. Content-Range

用于响应头中,在发出带Range的请求后,服务器会在Content-Range头部返回当前接收的范围和文件总大小.一般格式为:

Content-Range: bytes (unit first byte position) - [last byte position]/[entity length]

在响应完成后,返回的响应头内容不同:

HTTP/1.1 200 Ok (不使用断点续传方式)

HTTP/1.1 206 Partial Content (使用断点续传方式)

3. 断点续传过程

  1. 客户端下载1024k的文件, 已经下载了其中512k

  2. 网络中断,客户端请求续传,因此需要在http头中声明本次需要续传的片段: Range:bytes=512000- 这个头通知服务器端从文件的512k位置开始传输文件

  3. 服务器收到断点续传请求,从文件的512k位置开始传输,并且在HTTP头中增加:

    Content-Range:bytes 512000-/1024000

    并且此时服务器返回的HTTP状态码应该是206,而不是200

4. 多线程下载

  1. 所谓多线程下载,就是客户端主动使用Range头,将文件切个为多个部分,交由不同的线程去请求.

最新文章

  1. ADS1.2安装教程
  2. servlet 和 struts2 同时使用 以及 使用struts2标签库时报错
  3. macOS Docker 上安装、启动 MySQL
  4. PaddlePaddle(6)—— 基于Hub Serving的微信小程序模型部署
  5. 朴素贝叶斯分类算法(Naive Bayesian classification)
  6. SQL语言入门学习,这一篇就够了
  7. 数据库中外连接的三种形式(左连接,右连接,全连接)
  8. php 七牛云 视频加水印
  9. dxp交流电源怎么找_ALtium designer 中画原理图的时候怎么放入220V交流电源?急!! 就是那个220V的怎么弄出来?谢了..求......
  10. java实现1 12 123 1234 12345 123456 输出
  11. tianchai 12023 水管工游戏(DFS搜索)
  12. 客户端浏览器一次http完整请求过程流程图(图文结合诠释请求过程)
  13. 如鹏网C语言也能干大事精华帖
  14. 苹果手机图片如何同步鸿蒙,教你将照片批量导入iOS设备
  15. 技术一般的程序员找工作,如今真的一年比一年难...
  16. 安装ubuntu20.04必备导航
  17. Python中用try-except-finally处理异常
  18. VB如何自动保存_VB小课堂初识VB
  19. 全志A10加载无线网卡驱动
  20. 双目立体视觉(双摄测距)

热门文章

  1. 机器学习分享——反向传播算法推导
  2. Nginx 的配置和访问控制的理论实验操作详情
  3. Hadoop MapReduce Job 相关参数设置 概念介绍与理解
  4. java中国象棋棋盘放置棋子,Qt中国象棋二——棋盘与棋子的绘制
  5. ES安装的详细步骤、ES的集群搭建以及ElasticSearch安装时可能出现的问题
  6. LVS负载均衡环境搭建
  7. php无限极分类整理
  8. 解决安装文件时2502、2503错误
  9. CSMA/CA与CSMA/CD的区别
  10. 高数 | 【概念剖析】多元函数的偏导数、方向导数、梯度以及微分之间的关系