HTTP 协议将传输的信息分隔为两部分: HTTP 信息头, HTTP 信息体. 通过 HTTP 头信息, 使客户端请求服务器资源或服务器响应客户端请求时, 可以传递额外的信息. HTTP 头信息格式为名称: 值, 名称不区分大小写, 如:
Content-Type: text/html
. 通过 HTTP 消息头, 可以使服务器或客户端了解对方所使用的协议版本, 内容类型, 编码方式等.
HTTP 消息头分类
一些有用的请求头
一些有用的响应头
1. HTTP 消息头分类
在 HTTP 消息头中, 有些是客户端特有的, 有些是服务端所特有的, 也有些是消息头是通用的. 按 HTTP 消息头出现的上下文环境, 有以下分类:
1.1 通用头
HTTP 消息头中, 有些既适用于客户端的请求头, 也适用于服务端的响应头, 与 HTTP 消息体内最终传输的数据是无关的, 只适用于要发送的消息. 这些消息头由于 HTTP 协议版本的不同可能会有所区别, 在 HTTP/1.1 中, 这些消息头有: Cache-Control:,Connection:,Date:, Pragma:,Trailer:,Transfer-Encoding:,Upgrade:, Via:,Warning:.
1.2 请求头
HTTP 请求头为所请求的资源或请求本身, 提供了更为精确的描述信息. 其中有些缓存相关头描述了缓存信息, 这些头会改变 GET 请求时获取资源的方式, 如: If-Modified-Since. 有些消息头描述了用户偏好, 如: Accept-Language 和 Accept-Charset 表示客户端所使用语言及编码方式, User-Agent 表示客户端的代理方式.
新增加的请求头不能在旧的 HTTP 版本中使用, 但是, 如果服务器和客户端都能对相关头进行处理, 就可以在请求中使用. 在这种情况下, 客户端不应该假定服务器有对相关头的处理能力. 未知的请求头被处理为实体头.
1.3 响应头
HTTP 响应头为响应消息提供了更多信息. 如, 关于资源位置的描述 Location:, 关于务器本身的描述使用 Server:
新增加的响应头不能在旧的 HTTP 版本中使用, 但是, 如果服务器和客户端都能对相关头进行处理, 就可以在响应中使用. 在这种情况下, 服务器不应该假定客户端有对相关头的处理能力. 未知的响应头被处理为实体头.
1.4 实体头
HTTP 实体头提供了关于消息体的描述. 如, 消息体的长度 Content-Length:, 消息体的 MIME 类型 Content-Type:. 新的实体头可以旧 HTTP 版本中使用.
HTTP 消息头也可以按缓存与百缓存的处理方式分分类:
1.5 端到端 (End-To-End) 头
End-To-End 头信息必须发送到消息的最终接收人, 即: 接收请求消息的服务器或接收响应消息的客户端. 这些头信息意味着中间代理必须重发未修改的内容, 也必须存储缓存.
End-To-End 头在一个路由器连接的两种物理网络中使用, 即: OSI 的应用层和运输层.
1.6 逐跳 (Hop-By-Hop) 头
Hop-By-Hop 头被单一的传输层连接使用, Hop-By-Hop 头标识传输内容不得通过代理或缓存转发. 这些头信息有: Connection:,Keep-Alive:,Proxy-Authenticate:,
Proxy-Authorization:
, TE:,Trailers:,Transfer-Encoding:,Upgrade:. 注意, 只有 Hop-By-Hop 头可能会设置使用 Connection: 通用头.
2. 一些有用的请求头
众多的 HTTP 请求头中, 有几个是特别有用且应当正确设置的. 如果你要创建 HTTP 请求, 如, 创建 XMLHttpRequest 或一个延时写入并通过 XPCOM 发送自定义的 HTTP 请求时, 这时确保正确写入请求头就非常重要, 进行这些操作时, 用户使用浏览器一般自动写入请求头.
2.1 控制所访问资源的语言
大多数用户所使用的浏览器客户端, 如: Firefox, 都允许用户设置所偏好的语言, 设置后浏览器会在发送请求时添加一个 Accept-Language: 头信息. 而服务器, 在收到 HTTP 请求时, 也可以根据这个头信息返回对应语言的资源.
2.2 有条件 GET 请求
缓存是提高网站访问速度的重要方式, 当使用 XMLHttpRequest 进行部分页面数据的刷新时, 使用
If-Modified-Since:
头信息会告诉服务器, 访问更新过的内容, 可以有效的提高访问效率.
3. 一些有用的响应头
正确的配置网站服务器, 是保证网站性能和安全的关键. 在众多的 HTTP 响应头中, 有几个响应头是比较重要性且应当配置在服务器中.
3.1 框架 (frame) 控制
几个跨站脚本 (XSS) 攻击, 就是利用第三方框架 (frame 或 iframe). 现代浏览器已经支持 CSPframe-ancestors 指令, 在服务器端将其设置为 "none", 可以有效访止浏览器在框架内显示该资源, 使用它的关键资源(如: 表单数据或关键信息) 可以有效减少 XSS 攻击风险. 注意, 这个响应头并不是缓解 XSS 风险的唯一途径, 也可通过一些内容安全策略实现.
3.2 数据压缩
最大限度地减少传输的数据量, 可以有效加速了网页的显示. 虽然可以通 Gulp 等工具, 将静态文件数据压缩. 但如果要压缩传输数据, 那么必须在 web 服务器级别进行相关配置. 设置后, 客户端会发送一个 Accept-Encoding: 头, 告诉服务器所接受的编码方式; 而服务器也会响应一个 Content-Encoding: 头, 告诉客户端所使用的压缩方式.
注: Nginx 服务器可以通过配置 Gzip 实现数据压缩.
3.3 缓存控制
HTTP 缓存是提高网站访问速度另一种有效方式, 它可防止同一未修改资源被多次访问. 正确的配置服务器的响应头, 可以使用户代理 (浏览中器) 充分缓存数据.
配置缓存时, 需要设置以下项:
任何静态资源都应该提供了一个 Expires: 响应头. 这样, 资源可以用户代理达到它自身限制前(如: 达到缓存大小限制), 充分的缓存数据.
任何动态资源都应该提供了一个 Cache-control: 响应头. 理论上讲, 所有安全的 HTTP 方法 (GET,HEAD) 甚至幂等方法(DELETE,PUT), 都可以配置缓存, 但在实际使用中会有一些问题.
3.4 设置 MIME 类型
MIME 类型响应头 Content-type 会告诉客户端传输文档的类型, 扩展名在文档的网络传中已经失去意义. 正确配置服务器此项设置, 对文件传输非常重要, 用户代理客户端经常通过 MIME 类型判断文档的打开方式或获取资源后的默认动作.
来源: https://itbilu.com/other/relate/E1T0q4EIe.html