无规矩不成方圆,互联网之间的信息交替也是如此,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图解》
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。