图解HTTP笔记

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

内容简介: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的响应后,会以缓存来应答请求,在指定的时间之前,响应的副本会一直被保存。当超过指定的时间后,缓存服务器在请求发送过来时,会转向源服务器请求资源


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

查看所有标签

猜你喜欢:

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

网络流

网络流

拉文德拉K.阿胡亚 托马斯L.马南提 詹姆斯B.沃林 / 机械工业出版社 / 2005-5 / 108.0

本书全面介绍了经典的和现代的网络流技术,包括综合的理论、算法与应用。主要内容包括:路径、树与周期,算法设计与分析,最大流与最小流算法,分派与匹配,最小生成树,拉格朗日松弛与网络优化等。书中包含大量练习题,拓展了本书的内容,便于教学。一起来看看 《网络流》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

html转js在线工具
html转js在线工具

html转js在线工具