图解HTTP笔记

栏目: 后端 · 前端 · 发布时间: 5年前

内容简介:Web使用HTTP(HyperText Transfer Protocol 超文本传输协议)作为规范,完成从客户端到服务端等一系列运作流程。协议是指规则的约定网络基础TCP/IP协议族。通常使用的网络(包括互联网)是在TCP/IP协议族的基础上运作的,而HTTP属于它内部的一个子集计算机与网络设备要互相通信,双方就必须基于相同的方法。比如如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎么样结束通信等规则都需要事先确定,所有的一切都需要一种规则,而我们就把这种规则成为协议

Web使用HTTP(HyperText Transfer Protocol 超文本传输协议)作为规范,完成从客户端到服务端等一系列运作流程。协议是指规则的约定

网络基础TCP/IP协议族。通常使用的网络(包括互联网)是在TCP/IP协议族的基础上运作的,而HTTP属于它内部的一个子集

计算机与网络设备要互相通信,双方就必须基于相同的方法。比如如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎么样结束通信等规则都需要事先确定,所有的一切都需要一种规则,而我们就把这种规则成为协议

TCP/IP协议族里面重要的一点就是分层。TCP/IP协议族按层次分别分为:

  • 应用层 (决定了向用户提供应用服务时通信的活动,如FTP、DNS。HTTP也处于该层)
  • 传输层 (提供处于网络连接中的两台计算机之间的数据传输,TCP、UDP)
  • 网络层 (处理在网络上流动的数据包,数据包是网络传输的最小数据单位。该层规定了通过怎样的路径到达对方计算机并把数据包传送给对方)
  • 数据链路层 (处理连接网络的硬件部分,包括操作系统、硬件的设备驱动、NIC、光纤等)

利用TCP/IP协议族进行网络通信时,会通过分层顺序与对方进行通信。 发送端从应用层往下走,接收端则从链路层往上走

发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息。在接收端在层与层传输数据时,每经过一层 时会把对应的首部消去

与HTTP关系密切的协议:

  • 负责传输的IP协议: IP网际协议位于网络层,作用是把各种数据包传送给对方并确保正确传送

  • 确保可靠性的TCP协议: TCP位于传输层,提供可靠的字节流服务(为了方便传输,将大块数据分割成以报文段为单位的数据包进行管理)。可靠是指能将数据准确可靠地传给对方。采用三次握手策略(使用SYN和ACK标志)

    发送端首先发送一个带SYN标志的数据包给对方。接收端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息。最后发送端回传一个带ACK标志的数据包代表握手结束

  • 负责域名解析的DNS服务: DNS位于运用层,提供域名到IP地址之间的解析服务

他们之间的协作关系:

图解HTTP笔记

二、简单的HTTP协议

客户端:请求访问文本或图像等资源的一端

服务器端:提供资源响应的一端

2.1 HTTP协议规定,请求从客户端发出,最后服务器端响应该请求并返回

HTTP不对请求和响应之间的通信状态进行保存/持久化处理,是一种不保存状态,即无状态协议:为了更快地处理大量事务,确保协议的可伸缩性(后面引入Cookie做状态管理),减少内存资源损耗

2.2 HTTP方法:

  • GET:获取资源(1.0/1.1)
  • POST:传输实体主体(1.0/1.1)
  • PUT:传输文件(自身不带验证机制,存在安全性问题,一般不会使用)(1.0/1.1)
  • HEAD:获取相应首部,作验证URI使用(1.0/1.1)
  • DELETE:删除文件(自身不带验证机制,存在安全性问题,一般不会使用)(1.0/1.1)
  • OPTIONS:询问支持的方法(1.1)
  • CONNECT:要求用隧道协议连接代理(1.1)
  • TRACE: 追踪路径(1.1)

2.3 持久连接

在HTTP协议的初始版本中,每进行一次HTTP通信就要断开一次TCP连接,会造成无畏的TCP连接和断开,增加通信量的开销(客户端与服务器端进行一次请求会经过建立TCP连接、HTTP请求与相应、断开TCP连接三个阶段)

为了解决上述问题,HTTP/1.1和一部分的HTTP/1.0想出了持久连接(HTTP keep-alive):只要任意一端没有明确提出断开连接,则保持TCP连接状态(客户端与服务器端进行一次请求会经过建立TCP连接、第一个HTTP请求与相应、第二个HTTP请求与相应、第N个HTTP请求与相应、断开TCP连接三个阶段)

好处:减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载

在HTTP/1.1中,所有的连接默认都是持久连接。而HTTP/1.0内未标准化,需要通过非标准手段实现,需要两边支持

2.4 管线化

持久连接使得多数请求以管线化方式发送成为可能,在之前发送请求后需要等待并接收响应,才能发送下一个请求(如2.3中所提)。管线化技术出现后,不用等待响应亦可直接发送下一个请求,即同时并行发送多个请求(客户端与服务器端进行一次请求会经过建立TCP连接、第一个HTTP请求、第二个HTTP请求、第N个HTTP请求、第一个HTTP响应、第二个HTTP响应、第N个HTTP响应、断开TCP连接三个阶段)

三、HTTP报文内的HTTP信息

HTTP报文大致可分为 报文首部报文主体 ,由空行(CR+LF)划分。不一定要有报文主体

请求报文:请求行+请求首部字段+通用首部字段+实体首部字段+其他

响应报文:状态行+响应首部字段+通用首部字段+实体首部字段+其他

四、返回结果的HTTP状态码

4.1 状态码的类别

  • 1xx:信息性状态码 接收的请求正在处理
  • 2xx:成功状态码 请求正常处理完毕
  • 3xx:重定向状态码 需要进行附加操作以完成请求
  • 4xx:客户端错误状态码 服务器无法处理请求
  • 4xx:服务器错误状态吗 服务器处理请求出错

4.2 常见状态码

记录的HTTP状态码有很多,在平时中常用的有以下:

  • 200 OK (表示从客户端发来的请求在服务器端被正常处理了)
  • 204 No Content (表示服务器接收的请求已成功处理,但返回的响应报文中不含实体的主体部分)
  • 206 Partial Content (表示客户端进行了范围请求,服务器成功执行)
  • 301 Moved Permanently (永久性重定向,表示请求的资源已被分配了新的URI,以后应使用新的)
  • 302 Found (临时性重定向,表示请求的资源已被分配了新的URI,希望用户使用新的)
  • 304 Not Modified (表示客户端发送附带条件的请求时,服务器端允许访问资源,但因未满足条件。协商缓存标志)
  • 400 Bad Request (表示请求报文中存在语法错误)
  • 401 Unauthorized (表示发送的请求需要有通过HTTP认证)
  • 403 Forbidden (表示请求资源的访问被服务器拒绝)
  • 404 Not Found (表示在服务器上无法找到请求的资源)
  • 500 Internal Server Error (表示服务器端在执行请求时发生错误)
  • 503 Service Unavailable (表示服务器暂时处于超负荷或正在进行停机中,无法处理请求)

五、HTTP首部

5.1 首部类型

HTTP首部字段起到传递额外重要信息的作用,会根据实际用途分为四种类型:

  • 通用首部字段(请求报文和响应报文两方都会使用的首部)
  • 请求首部字段
  • 响应首部字段
  • 实体首部字段(针对请求报文和响应报文的实体部分使用的首部)

5.2 首部定义

HTTP/1.1规范定义了如下47种首部字段:

5.2.1 通用首部字段

  1. Cache-Control 控制缓存的行为
  2. Connection 逐跳首部、连接的管理
  3. Date 创建报文的日期时间
  4. Pragma 报文指令
  5. Trailer 报文末端的首部一览
  6. Transfer-Encoding 制定报文主体的传输编码方式
  7. Upgrade 省级文其他协议
  8. Via 代理服务器的相关信息
  9. Warning 错误通知

5.2.2 请求首部字段

  1. Accept 用户代理可处理的媒体类型
  2. Accept-Charset 优先的字符集
  3. Accept-Encoding 优先的内容编码
  4. Accept-Language 优先的语言
  5. Authorization web认证信息
  6. Expect 期待服务器的特定行为
  7. From 用户的电子邮箱地址
  8. Host 请求资源所在服务器
  9. if-Match 比较实体标记
  10. if-Modified-Since 比较资源更新时间
  11. if-None-Match 比较实体标记
  12. If-Range 资源未更新时发送实体Byte的范围请求
  13. If-Unmodified-Since 比较资源的更新时间
  14. Max-Forwards 最大传输逐跳数
  15. Proxy-Authorization 代理服务器要求客户端的认证信息
  16. Range 实体的字节范围请求
  17. Referer 对请求中URI的原始获取方
  18. TE 传输编码的优先级
  19. User-Agent HTTP客户端程序的信息

5.2.3 响应首部字段

  1. Accept-Ranges 是否接受字节范围请求
  2. Age 推算资源创建经过时间
  3. ETag 资源的匹配信息
  4. Location 令客户端重定向至指定URI
  5. Proxy-Authenticate 代理服务器对客户端的认证信息
  6. Retry-After 对在此发起请求的时机要求
  7. Server HTTP服务器的安装信息
  8. Vary 代理服务器缓存的管理信息
  9. WWW-Authenticate 服务器对客户端的认证信息

5.2.4 实体首部字段

  1. Allow 资源科支持的HTTP方法
  2. Content-Encoding 实体主体适用的编码方式
  3. Content-Language 实体主体的自然语言
  4. Content-Length 实体主体的大小
  5. Content-Location 代替对应资源的URI
  6. Content-MD5 实体主体的报文摘要
  7. Content-Range 实体主体的位置范围
  8. Content-Type 实体主体的媒体类型
  9. Expires 实体主体过期的日期时间
  10. Last-Modified 资源的最后修改日期时间

作为了解就好,一般也记不住这么多配置字段。在需要用到的时候再对应查阅就好

5.3 非HTTP/1.1首部字段

在HTTP协议通信交互中使用到的首部字段,不限于RFC2616中定义的47种首部字段,还有Cookie、Set-Cookie和Content-Disposition等在其他RFC中定义的首部字段,它们的使用频率也很高

5.4 部分首部字段的使用

5.4.1 Cache-Control (通用首部字段)

操作缓存的工作机制的重要字段,按请求和响应分类为: 缓存请求指令:

  • no-cache 强制想源服务器再次验证
  • no-store 不缓存请求或响应的任何内容
  • max-age 响应的最大Age
  • max-stale 接受已过期的响应
  • min-flesh 期望在指定时间内的响应仍有效
  • no-transform 代理不可更改媒体类型
  • only-if-cached 从缓存获取资源
  • cache-extension 新指令标记

缓存响应指令:

  • public 可向任意方提供相应的缓存
  • private 仅向特定用户返回响应
  • no-cache 缓存钱必须先确认其有效性
  • no-store 不缓存请求或响应的任何内容
  • no-transform 代理不可更改媒体类型
  • must-revalidate 可缓存但必须再向源服务器进行确认
  • proxy-revalidate 要求中间缓存服务器对缓存的响应有效性再进行确认
  • max-age 响应的最大Age
  • s-maxage 公共缓存服务器响应的最大Age值
  • cache-extension 新指令标记

相关配置内容较多,缓存配置使用,具体再查

5.4.2 Connection (通用首部字段)

字段具备如下两个作用:

  • 控制不再转发给代理的首部字段
  • 管理持久连接

Connection: 不再转发的首部字段名 Connection: Close/Keep-Alive

HTTP/1.1 默认连接都是持久连接,当服务器端想明确断开连接时,会指定Connection的值为Close。在HTTP/1.1之前的HTTP版本的默认连接都是非持久连接,如果需要连续,需要指定Connection的值为Keep-Alive

5.4.3 Pragma (通用首部字段)

Pragma是HTTP/1.1之前版本的遗留字段,仅作为与HTTP/1.0的向后兼容而定义,作用和Cache-Control一样

5.4.4 Accept (请求首部字段)

Accept: text/html,application/xhtml+xml,application/xml,image/jpeg,image/png,video/mpeg,application/zip

5.4.5 Accept-Encoding (请求首部字段)

告知服务器用户代理支持的内容编码以及内容编码的优先级顺序 Accept-Encoding: gzip,deflate

5.4.6 If-Match (请求首部字段)

形如If-xxx这样的请求首部字段,都可以称为条件请求。服务器接收到附带条件的请求后,只有判断指定条件为真时,才会执行 只有当If-Match的字段值和ETag值匹配一致时,服务器才会接受请求

5.4.7 If-Modified-Since (请求首部字段)

操作缓存的工作机制的重要字段,它会告知服务器若If-Modified-Since字段值早于资源的更新时间,则处理请求,返回更新后的资源+Last-Modified。若在指定时间之后,如果请求的资源没有更新过,则返回304Not Modified的响应

5.4.8 Range (请求首部字段)

请求获取指定范围的资源数据 Range: bytes=5001-10000

5.4.9 Accept-Ranges (响应首部字段)

告知客户端服务器是否能处理范围请求 Accept-Ranges:bytes/none

5.4.10 Etag (响应首部字段)

告诉客户端实体标识。它是一种可将资源以字符串形式做唯一性标识的方式,当资源更新时,ETag也会更新

5.4.11 Content-Encoding (实体首部字段)

告知客户端服务器对实体的主体部分选用的内容编码方法 Content-Encoding:gzip/compress/deflate/identity

5.4.12 Expires (实体首部字段)

告知接收方资源的失效日期。缓存服务器在接收到含有Expires的响应后,会以缓存来应答请求,在指定的时间之前,响应的副本会一直被保存。当超过指定的时间后,缓存服务器在请求发送过来时,会转向源服务器请求资源


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Numerical Recipes 3rd Edition

Numerical Recipes 3rd Edition

William H. Press、Saul A. Teukolsky、William T. Vetterling、Brian P. Flannery / Cambridge University Press / 2007-9-6 / GBP 64.99

Do you want easy access to the latest methods in scientific computing? This greatly expanded third edition of Numerical Recipes has it, with wider coverage than ever before, many new, expanded and upd......一起来看看 《Numerical Recipes 3rd Edition》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

MD5 加密
MD5 加密

MD5 加密工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具