你要知道的HTTP--HTTP报文

用于HTTP协议交互的信息被称为HTTP报文。请求端的报文叫作请求报文,响应端的报文叫作响应报文。HTTP报文是由多行(用CR + LF做换行符)数据构成的字符串文本。html

[CR + LF]: CR(Carriage return),回车符, 16进制0x0d。LF(Line Feed),换行符0x0a.算法

请求报文及响应报文结构


HTTP报文首部


  1. 请求行:请求方法 + 请求URI + HTTP版本
  2. 状态行: HTTP版本 + 状态码(200) + 缘由短语(OK)
  3. 首部字段: 分为 请求首部字段、响应首部字段、通用首部字段,实体首部字段,还有其余没被记录在RFC的Cookie等。
    • 通用首部字段
      • Cache-Control: 控制缓存的行为
      • Connection: 决定当前的事务完成后,是否会关闭网络链接。
        • 若是该值是“keep-alive”,网络链接就是持久的,不会关闭,使得对同一个服务器的请求能够继续在该链接上完成。HTTP/1.1默认为持久链接
        • 若是该值为"close",代表客户端或服务器想要关闭该网络链接,这是HTTP/1.0请求的默认值
      • Date: 建立报文的日期时间
      • Pragma: 它用来向后兼容只支持 HTTP/1.0 协议的缓存服务器,那时候 HTTP/1.1 协议中的 Cache-Control 尚未出来。设置值为“no-cache”时,与 Cache-Control: no-cache 效果一致。强制要求缓存服务器在返回缓存的版本以前将请求提交到源头服务器进行验证。建议只在须要兼容 HTTP/1.0 客户端的场合下应用 Pragma 首部。
      • Transfer-Encoding: 传输报文主体时所采用的编码方式
      • Via: 代理如武器信息
      • Warning: 报文当前状态可能存在的问题。在响应中能够出现多个 Warning 首部。
    • 请求首部字段
      • Accept: 用户代理可处理的媒体类型。例如:text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8, 其中;q= (q因子权重)
      • Accept-Charset: 优先的字符集
      • Accept-Encoding: 优先的编码
      • Accept-Language: 优先的语言(天然语言)
      • Authorization: Web认证信息
      • Expect: 期待服务器的特定行为,例如:100-continue。目前没有已知的浏览器使用这个消息头
      • From: 用户的电子邮件地址。好比用户过量的不合法的请求等。站点联系人会联系到你。
      • Host: 请求资源所在的服务器
      • If-Match: 比较实体标记(ETag)
      • If-None-Match: 比较实体标记(与If-Match相反)
      • If-Modified-Since: 比较资源的更新时间
      • If-Unmodified-Since: 比较资源的更新时间(与If-Modified-Since相反)
      • If-Range: 资源未更新时发送实体Byte的范围请求
      • Range: 实体的字节范围请求
      • Referer: 请求头包含了当前请求页面的来源页面的地址,即表示当前页面是经过此来源页面里的连接进入的。服务端通常使用 Referer 请求头识别访问来源,可能会以此进行统计分析、日志记录以及缓存优化等。
      • TE: 传输编码的优先级
      • User-Agent: HTTP客户端程序的信息
    • 响应首部字段
      • Etag: 实体标签(Entity Tag)的缩写。ETag通常不以明文形式相应给客户端。在资源的各个生命周期中,它都具备不一样的值,用于标识出资源的状态。当资源发生变动时,若是其头信息中一个或者多个发生变化,或者消息实体发生变化,那么ETag也随之发生变化。生成规则由服务端确认。ETag之间的比较使用的是强比较算法,即只有在每个字节都相同的状况下,才能够认为两个文件是相同的。在 ETag 前面添加 W/ 前缀表示能够采用相对宽松的算法。 值表明优先顺序,用相对质量价值表示,又称做权重。
      • Trailer: 报文末端的首部一览
      • Age: 消息头里包含消息对象在缓存代理中存贮的时长,以秒为单位。
      • Server: HTTP服务器的安装信息。例如:TornadoServer/5.1.1
      • Location: 令客户端重定向至指定URI
      • Vary: 代理服务器缓存的管理信息
      • WWW-Authenticate: HTTP访问认证
      • Accept-Ranges: 是否接受字节范围的要求
      • Proxy-Authenticate: 代理服务器对客户端的认证信息
      • Retry-After: 对再次发起请求时机的要求
    • 实体首部字段
      • Allow: 用于枚举资源所支持的 HTTP 方法的集合。当服务器接收到不支持的HTTP方法时,会以状态码405 Method Not Allowed做为相应返回。以此同时,还会把全部支持的HTTP方法写入首部字段Allow后返回。
      • Content-Encoding: 是一个实体消息首部,用于对特定媒体类型的数据进行压缩。当这个首部出现的时候,它的值表示消息主体进行了何种方式的内容编码转换。这个消息首部用来告知客户端应该怎样解码才能获取在 Content-Type 中标示的媒体类型内容。例如Content-Encoding: gzip
      • Content-Language: 实体主体使用的天然语言
      • Content-Length: 实体主体部分的大小(单位是字节)。对实体主体进行编码传输时,不能再使用这个首部字段。因为实体主题大小的计算略微复杂,因此再也不展开。
      • Content-Location: 要返回的数据的地址选项。最主要的用途是用来指定要访问的资源通过内容协商后的结果的URL。
      • Content-Type: 实体主体内对象媒体类型
      • Last_Modified: 是一个响应首部,其中包含源头服务器认定的资源作出修改的日期及时间。 它一般被用做一个验证器来判断接收到的或者存储的资源是否彼此一致。因为精确度比 ETag 要低,因此这是一个备用机制。包含有 If-Modified-Since 或 If-Unmodified-Since 首部的条件请求会使用这个字段。
      • Expires: 响应头包含日期/时间, 即在此时候以后,响应过时。无效的日期,好比 0, 表明着过去的日期,即该资源已通过期

具体的一些重要的报文字段介绍见下一篇文章。


上一篇:HTTP诞生背景及版本变化浏览器

相关文章
相关标签/搜索