带你一步步解析 HTTP( 九 )


以 5xx 为开头的响应标头都表示服务器本身发生错误
状态码含义500该状态码表明服务器端在执行请求时发生了错误 。503该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求 。
Access-Control-Allow-Origin
一个返回的 HTTP 标头可能会具有 Access-Control-Allow-Origin,Access-Control-Allow-Origin 指定一个来源,它告诉浏览器允许该来源进行资源访问 。否则-对于没有凭据的请求 *通配符,告诉浏览器允许任何源访问资源 。例如,要允许源 https://mozilla.org 的代码访问资源,可以指定:
【带你一步步解析 HTTP】Access-Control-Allow-Origin: https://mozilla.orgVary: Origin如果服务器指定单个来源而不是 *通配符的话,则服务器还应在 Vary 响应标头中包含 Origin,以向客户端指示 服务器响应将根据原始请求标头的值而有所不同 。
Keep-Alive
上面我们提到,HTTP 报文标头会分为四种,这其实是按着上下文来分类的
还有一种分类是根据代理进行分类,根据代理会分为端到端头 和 逐跳标头
而 Keep-Alive 表示的是 Connection 非持续连接的存活时间,如下
Connection: Keep-AliveKeep-Alive: timeout=5, max=997Keep-Alive 有两个参数,它们是以逗号分隔的参数列表,每个参数由一个标识符和一个由等号 = 分隔的值组成 。
timeout:指示空闲连接必须保持打开状态的最短时间(以秒为单位) 。
max:指示在关闭连接之前可以在此连接上发送的最大请求数 。
上述 HTTP 代码的意思就是限制最大的超时时间是 5s 和 最大的连接请求是 997 个 。
Server
服务器标头包含有关原始服务器用来处理请求的软件的信息 。
应该避免使用过于冗长和详细的 Server 值,因为它们可能会泄露内部实施细节,这可能会使攻击者容易地发现并利用已知的安全漏洞 。例如下面这种写法
Server: Apache/2.4.1 (Unix)Set-Cookie
Cookie 又是另外一个领域的内容了,我们后面文章会说道 Cookie,这里需要记住 Cookie、Set-Cookie 和 Content-Disposition 等在其他 RFC 中定义的首部字段,它们不是属于 HTTP 1.1 的首部字段,但是使用率仍然很高 。
Transfer-Encoding
首部字段 Transfer-Encoding 规定了传输报文主体时采用的编码方式 。
Transfer-Encoding: chunkedHTTP /1.1 的传输编码方式仅对分块传输编码有效 。
X-Frame-Options
HTTP 首部字段是可以自行扩展的 。所以在 Web 服务器和浏览器的应用上,会出现各种非标准的首部字段 。
首部字段 X-Frame-Options 属于 HTTP 响应首部,用于控制网站内容在其他 Web 网站的 Frame 标签内的显示问题 。其主要目的是为了防止点击劫持(clickjacking)攻击 。
下面是一个响应头的汇总,基于 HTTP 1.1

带你一步步解析 HTTP

文章插图
 
非 HTTP/1.1 首部字段在 HTTP 协议通信交互中使用到的首部字段,不限于 RFC2616 中定义的 47 种首部字段 。还有 Cookie、Set-Cookie 和 Content-Disposition 等在其他 RFC 中定义的首部字段,它们的使用频率也很高 。这些非正式的首部字段统一归纳在 RFC4229 HTTP Header Field Registrations 中 。
End-to-end 首部和 Hop-by-hop 首部HTTP 首部字段将定义成缓存代理和非缓存代理的行为,分成 2 种类型 。
一种是 End-to-end 首部 和 Hop-by-hop 首部
End-to-end(端到端) 首部这些标头必须发送给消息的最终接收者 : 请求的服务器,或响应的客户端 。中间代理必须重新传输未经修改的标头,并且缓存必须存储这些信息
Hop-by-hop(逐跳) 首部分在此类别中的首部只对单次转发有效,会因通过缓存或代理而不再转发 。
下面列举了 HTTP/1.1 中的逐跳首部字段 。除这 8 个首部字段之外,其他所有字段都属于端到端首部 。
Connection、Keep-Alive、Proxy-Authenticate、Proxy-Authorization、Trailer、TE、Transfer-Encoding、Upgrade
HTTP 的优点和缺点HTTP 的优点简单灵活易扩展HTTP 最重要也是最突出的优点是 简单、灵活、易于扩展 。
HTTP 的协议比较简单,它的主要组成就是 header + body,头部信息也是简单的文本格式,而且 HTTP 的请求报文根据英文也能猜出来个大概的意思,降低学习门槛,能够让更多的人研究和开发 HTTP 应用 。
所以,在简单的基础上,HTTP 协议又多了灵活 和 易扩展 的优点 。
HTTP 协议里的请求方法、URI、状态码、原因短语、头字段等每一个核心组成要素都没有被制定死,允许开发者任意定制、扩充或解释,给予了浏览器和服务器最大程度的信任和自由 。


推荐阅读