2

无规矩不成方圆,互联网之间的信息交替也是如此,http协议和TCP/IP等协议族内的其他众多协议就是用于客户端和服务器之间的通信的规则。
图片描述

上图可以看到,http协议在网络信息交换的过程中,主要在客户端承担,生成目标服务器的请求报文,在服务器端负责对web服务器请求的内容的处理,并生成目标客户端的响应报文。

那请求报文和响应报文包括什么内容呢?

图片描述
可以看到请求报文和响应报文都主要分成,报文首部和报文主体。使用首部字段是为了给浏览器和服务器提供报文主体大小、所使用 的语言、认证信息等内容。 其内容在客户端和服务器处理时起至关重要作用的信息。

对于请求报文来说:

  • 请求行:包含用于请求的方法,请求 URI 和 HTTP 版本。
  • 请求首部字段常用的:

    首部字段名 说明
    Accept 用户代理可处理的媒体类型
    Accept-Charset 优先的字符集
    Accept-Encoding 优先的内容编码
    Accept-Language 优先的语言(自然语言)
    Authorization Web 认证信息
    Expect 期待服务器的特定行为
    From 用户的电子邮箱地址
    Host 请求资源所在服务器
    If-Match 比较实体标记(ETag)
    If-Modified-Since 比较资源的更新时间
    If-None-Match 比较实体标记(与 If-Match 相反)
    If-Range 资源未更新时发送实体 Byte 的范围请求
    If-Unmodified-Since 比较资源的更新时间(与 If-Modified-Since 相反)
    Max-Forwards 最大传输逐跳数
    Proxy-Authorization 代理服务器要求客户端的认证信息
    Range 实体的字节范围请求
    Referer 对请求中 URI 的原始获取方
    TE 传输编码的优先级
    User-Agent HTTP 客户端程序的信息
  • 通用首部字段 (等同响应报文)

    首部字段名 说明
    Cache-Control 控制缓存的行为
    Connection 逐跳首部、连接的管理
    Date 创建报文的日期时间
    Pragma 报文指令
    Trailer 报文末端的首部一览
    Transfer-Encoding 指定报文主体的传输编码方式
    Upgrade 升级为其他协议
    Via 代理服务器的相关信息
    Warning 错误通知
  • 实体首部字段 (等同响应报文)

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

对于响应报文来说:

  • 状态行: 包含表明响应结果的状态码,原因短语和 HTTP 版本。
  • 响应首部字段常用的:

    首部字段名 说明
    Accept-Ranges 是否接受字节范围请求
    Age 推算资源创建经过时间
    ETag 资源的匹配信息
    Location 令客户端重定向至指定URI
    Proxy-Authenticate 代理服务器对客户端的认证信息
    Retry-After 对再次发起请求的时机要求
    Server Http服务器的安装信息
    Vary 代理服务器缓存的管理信息
    WWW-Authenticate 服务器对客户端的认证信息
为了保存服务器端的sessionId等信息,http启用了cookie的相关首部字段
首部字段名 说明 首部类型
Set-Cookie 开始状态管理所使用的 Cookie 信息 (服务端向客户端传递的cookie值) 响应首部字段
Cookie 服务器接收到的 Cookie 信息 请求首部字段

除了上面提到的首部字段,我们还可能在浏览器中看到很多以X-的不规范的首部,比如:X-Frame-Options , X-XSS-Protection 等。这些规范已经被废弃,但是对于已经在使用的规范,不应该要求其变更。

除了以上正常情况下的http响应首部,很多时候,我们还会看到provisional headers are shown这样的首部。出现这种情况有以下集中可能:

  • 服务器出错等导致请求超时
  • 请求被安装的浏览器插件拦截
  • 跨域请求被拦截
  • 类似from disk cache和from memory cache这样的缓存

本文图片均来自《http图解》


朱珍珍
75 声望7 粉丝

毕业于重庆邮电大学,暂就职在北京杏树林科技有限公司,JS开发