前面有几篇博文介绍了HTTP协议HTTP请求方法详解Javascript中Cookie的那些事儿HTTPS,今天我们来聊一聊关于HTTP首部的那些事儿

HTTP协议的请求和响应报文中肯定包含HTTP首部,首部为服务器和客户端分别处理请求和响应提供所需要的信息。而请求报文和响应报文在结构上又惊人的相似。下面以百度为例,我们来看二者之间有什么不同:

请求报文示例:

GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Cache-Control: max-age=
Upgrade-Insecure-Requests:
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2816.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: zh-CN,zh;q=0.8
Cookie: BIDUPSID=B1B714EF2E3D00D3499B04F5B4A65E24; BAIDUID=6AE2CCD65C9379FDDA3BF5EF8C6543BE:FG=1; PSTM=1461936802; BDUSS=ZPYmZBUFdZd3B4YTdFa01CbXdIUm1CNlVMZFZMcEFRMEJiR3dWZDRxamZYTnBYQVFBQUFBJCQAAAAAAAAAAAEAAACCmStVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN%7EPslffz7JXbz; H_PS_645EC=c5b77Gs2Dx4Ykavto%2Fo7JIb9zq21sqi9nUsFbwcZ%2FgO32YeRbaHyhCrPQXs8wpPFN8vl; BD_HOME=1; H_PS_PSSID=20048_1422_19036_18282_17947_21113_17001_21189_21161_20930; BD_UPN=12314353; sug=3; sugstore=0; ORIGIN=2; bdime=0

响应报文示例:

HTTP/1.1  OK
Server: bfe/1.0.8.18
Date: Thu, Sep :: GMT
Content-Type: text/html;charset=utf-
Transfer-Encoding: chunked
Connection: keep-alive
Cache-Control: private
Expires: Thu, Sep :: GMT
Content-Encoding: gzip
X-UA-Compatible: IE=Edge,chrome=
Strict-Transport-Security: max-age=
BDPAGETYPE:
BDQID: 0x8703882800005c3f
BDUSERID:
Set-Cookie: BDSVRTM=; path=/
Set-Cookie: BD_HOME=; path=/
Set-Cookie: H_PS_PSSID=20048_1422_19036_18282_17947_21113_17001_21189_21161_20930; path=/; domain=.baidu.com
Set-Cookie: __bsi=13807309971438994139_00_100_R_N_71_0303_C02F_N_I_I_0; expires=Thu, -Sep- :: GMT; domain=www.baidu.com; path=/

比较二者的区别:在响应报文的报文首部中,分别是响应首部字段、通用首部字段、实体首部字段,而在请求报文首部中,分别是请求首部字段、通用首部字段、实体首部字段。下面我们来依次介绍。

1.通用首部

  有些首部时客户端和服务端都能使用,且提供了与报文相关的最基本信息,叫做通用首部

通用信息首部
首部 描述
Connection 允许客户端和服务器指定与请求/响应连接有关的选项。
Date 提供日期和时间标志,说明报文是什么时间创建的。
MIME-Version 给出了发送短使用的 MINE 版本。
Trailer 如果报文采用了分块传输编码(chunked transfer encoding)方式,就可以用这个首部列出位于报文拖挂(trailer)部分的首部集合。
Transfer-Encoding 告知接收端为了保证报文的可靠传输,对报文采用了什么编码方式。
Update 给出了发送端可能想要"升级"使用的新版本或协议。
Via 显示报文经过的中间节点(代理、网关)。
通用缓存首部
首部 描述
Cache-Control 用于随报文传送缓存指示。控制缓存的行为。
Pragma 另一种随报文传送指示的方式,当并不专用于缓存。

2.请求首部

  请求首部是只在请求报文中有意义的首部。

请求的信息性首部
首部 描述
Client-IP 提供了运行客户端的机器的IP地址。
From 提供了客户端用户的 Email 地址。(使用RFC 822 E-mail地址格式)
Host 给出了接受请求的服务器的主机名和端口号。
Referer 提供了包含当前请求 URI 的文档的 URL。
UA-Color 提供了与客户端显示器的现实颜色有关的信息。
UA-CPU 提供了客户端 CPU 的类型和制造商。
UA-Disp 提供了与客户端显示器能力有关的信息。
UA-OS 给出了运行在客户端机器上的操作系统名称和版本。
UA-Pixels 提供了客户端显示器的色素信息。
User-Agent 将发起请求的应用程序名告知服务器。
Accept首部

Accept首部为客户端提供了一种将其喜好和能力告知服务器的方式。Accept首部会使连接的两端都受益。

首部 描述
Accept 告诉服务器能够发送哪些媒体类型。
Accept-Charset 告诉服务器能够发送哪些字符集。
Accept-Encoding 告诉服务器能够发送哪些编码方式。
Accept-Language 告诉服务器能够发送哪些语言。
TE 告诉服务器可以使用哪些扩咱传输编码。
条件请求首部

  有时客户端希望为请求加上某些限制。比如,客户端已经有了一份文档副本,就希望只在服务器上的文档与客户端拥有的副本有区别时,才请求服务器传输文档。通过条件请求首部,客户端就可以为请求加上这种限制,要求服务器在对请求进行响应之前,确保某个条件为真。

首部 描述
Expect 允许客户端列出请求所要求的服务器行为。
If-Match 如果实体标记与文档当前的实体标记相匹配,就获取这份文档。
If-Modified-Since 除非在某个指定的日期之后资源被修改过,否则就限制这个请求。
If-None-Match 如果提供的实体标记与当前文档的实体标记不相符,就获取文档。
If-Range 允许对文档的某个范围进行条件请求。
If-Unmodified-Since 除非在某个指定日期之后资源没有被修改过,否则限制这个请求。
Range 如果服务器支持范围请求,就请求资源的指定范围。
安全请求首部
首部 描述
Authorization 包含了提供给服务器来对客户端进行自身认证的数据。
Cookie 客户端用它向服务器传送一个令牌-----它并不是真正的安全首部,但却是隐含了安全功能。
Cookie2 用来说明请求端支持的cookie版本。
代理请求首部
首部 描述
Max-Forward 在通往源端服务器的路径上,将请求转发给其他代理或网管的最大次数----与 TRACE 方法一同使用。
Proxy-Authorization 与 Authorization 首部相同,但这个首部是在于代理进行认证时使用的。
Proxy-Connection 与 Connection 首部相同,但这个首部是在于代理建立连接时使用的。

3.响应首部

响应的信息性首部
首部 描述
Age (从最初创建开始)响应持续时间。
Public 服务器为其资源支持的请求方法列表。
Retry-After 如果资源不可用的话,在此日期或时间重试。
Server 服务器应用程序软件的名称和版本。
Title 对 HTML 文档来说,就是 HTML 文档的源端给出的标题。
Warning 比原因短语更详细一些的警告报文。
协商首部
首部 描述
Accept-Ranges 对此资源来说,服务器可接受的范围类型。
Vary 服务器查看的其他首部列表,可能会使响应发生变化;也就是说,这是一个首部列表,服务器会根据这些首部的内容挑选出最适合的资源版本发送给客户端。
安全响应首部
首部 描述
Proxy-Authenticate 来自代理的对客户端的质询列表。
Set-Cookie 不是真正的安全首部,但隐含安全功能;可以在客户端设置一个令牌,以便服务器对其客户端进行标识。
Set-Cookie2 与 Set-Cookie 类似,PFC 2965 Cookie定义。
WWW-Authenticate 来自服务器对客户端的质询列表。

4.实体首部

  实体首部提供了有关实体及其内容的大量信息,请求和响应报文中都可能包含实体部分,所以这两类报文都可能出现这些首部。总之,实体首部可以告知报文的接收者它在对什么进行处理。

实体的信息性首部
首部 描述
Allow 列出可以对此事提执行的请求方法。
Location 告知客户端实际上位于何处;用于将接收端定向到资源的(可能是新的)位置(URL)上去。
内容首部

  内容首部提供了与实体内容有关的特定信息,说明了其类型,尺寸以及处理它所需要的其它有用信息。

首部 描述
Content-Base 解释主体中的相对 URL 时使用的基础 URL
Content-Encoding 对主体执行的任意编码方式。
Content-Language 理解主体时最适宜使用的自然语言。
Content-Length 主体的长度或尺寸。
Content-Locaton 资源实际所处的位置。
Content-MD5 主体的 MD5 校验和。
Content-Range 在整个资源中此实体表示的字节范围。
Content-Type 在这个主体的对象类型。
实体缓存首部

  通用的缓存首部说明了如何或者什么时候进行缓存。实体的缓存首部提供了与被缓存实体有关的信息。

首部 描述
ETag 与此实体相关的实体标记。
Expires 实体不再有效,要从原始的源端再次获取此实体的日期和时间。
Last-Modified 这个实体最后一次被修改的日期和时间。

【相关文章】

  1、HTTP协议:http://www.cnblogs.com/foodoir/p/5905946.html

  2、HTTP请求方法详解:http://www.cnblogs.com/foodoir/p/5911099.html

  3、Javascript中关于Cookie的那些事儿:http://www.cnblogs.com/foodoir/p/5914631.html

  4、HTTPS:http://www.cnblogs.com/foodoir/p/5922272.html

HTTP首部的更多相关文章

  1. 前端学HTTP之报文首部

    前面的话 首部和方法配合工作,共同决定了客户端和服务器能做什么事情.在请求和响应报文中都可以用首部来提供信息,有些首部是某种报文专用的,有些首部则更通用一些.本文将详细介绍HTTP报文中的首部 结构 ...

  2. TCP服务和首部知识点小结

    服务 应用程序会被TCP分割成数据段,而UDP不分割. TCP有超时重传和确认 如果检验和出错将丢弃 IP数据包可能会失序或者重复,所以TCP会处理 滑动窗口来进行流量控制 对字节流的内容不做任何解释 ...

  3. TCP首部解析

    TCP首部: TCP数据被封装在一个IP数据报中,如下: TCP首部数据格式: 16位源都口号,16为目的端口号用于寻找发送端和接收端的应用进程,加上IP首部的源端IP及终端IP,唯一的确认一个TCP ...

  4. IP数据报首部解析

    IP数据报首部的格式,普通20字节. 4位版本号:当前4--IPv4. 4首部长度:首部长度 8位服务类型TOS: 3bits(优先权)+ 4bits(类型--最小延迟+最大吞吐量+最高可靠性+最小费 ...

  5. http协议进阶(三)补充:报文首部

    之前写的关于报文首部的传送门: 报文首部:http://www.cnblogs.com/imyalost/p/5708445.html 通用首部字段:http://www.cnblogs.com/im ...

  6. TCP协议学习笔记(一)首部以及TCP的三次握手连接四次挥手断开

    TCP协议是一种面向连接的.可靠的流协议. 流即不间断的数据结构.这样能够保证接收到数据顺序与发送相同.但是犹如数据间没有间隔,因此在TCP通信中,发送端应用可以在自己所要发送的消息中设置一个标示长度 ...

  7. IP首部校验和的计算

    ip抓包结果:0000: 00 e0 0f 7d 1e ba 00 13 8f 54 3b 70 08 00 45 00 0010: 00 2e be 55 00 00 7a 11 51 ac de ...

  8. 计算机网络(8)-----TCP报文段的首部格式

    TCP报文段的首部格式 概述 TCP报文段首部的前20个字节是固定的,因此TCP首部的最小长度是20字节. 源端口和目标端口 各占2个字节,分别写入源端口号和目的端口号. 序列号 占4个字节,表示本报 ...

  9. IP首部校验和计算

    根据RFC1071文档的计算方法,编写代码实现IP首部校验和的计算 计算步骤: 1.首先将IP首部中校验和字段置0 2.将IP首部每16bit进行相加,如果有进位产生,则将进位加到最低位. 3.将计算 ...

随机推荐

  1. SDOI 2016 生成魔咒

    题目大意:一个字符串,刚开始为空,依次在后面添加一个字符,问每次添加完字符后本质不同的字符串有多少种 后缀自动机裸题,添加字符时,更新的结点个数即为新增加的子串 #include<bits/st ...

  2. JS请求服务器并使页面跳转(转)

    前段时间在项目中用到了前台框架EasyUI,各种组件都是差不多都是用js来渲染的,这样一些页面请求就必须用js代码来写. 但是js请求就不和html请求的玩法不怎么相同,比如我要向服务器发送一个请求然 ...

  3. xcodebuild命令行打包发布ipa

    配置好证书,然后在命令行转到项目目录 1.清除 EthantekiiMac:CTest ethan$ xcodebuild clean 2.编译 EthantekiiMac:CTest ethan$ ...

  4. Windows和Linux都有的Copy-on-write技术

    Windows和Linux都有的Copy-on-write技术 MySQL技术内幕Innodb存储引擎第2版 P375 SQL Server2008 实现与维护(MCTS教程)P199 LVM快照技术 ...

  5. ABP理论学习之设置管理

    返回总目录 本篇目录 介绍 定义设置 获取设置值 更改设置 关于缓存 介绍 每个应用程序都需要存储一些设置信息,然后在应用程序中的某个地方使用这些设置.ABP提供了健壮的基础设施来存储或检索服务端和客 ...

  6. MySQL 复制表结构

    200 ? "200px" : this.width)!important;} --> 介绍 有时候我们需要原封不动的复制一张表的表结构来生成一张新表,MYSQL提供了两种便 ...

  7. Atitit 图像处理 深刻理解梯度原理计算.v1 qc8

    Atitit 图像处理 深刻理解梯度原理计算.v1 qc8 1.1. 图像处理  梯度计算  基本梯度 内部梯度 外部梯度 方向梯度1 2. 图像梯度就是图像边缘吗?2 1.1. 图像处理  梯度计算 ...

  8. WPF入门教程系列二十三——DataGrid示例(三)

    DataGrid的选择模式 默认情况下,DataGrid 的选择模式为“全行选择”,并且可以同时选择多行(如下图所示),我们可以通过SelectionMode 和SelectionUnit 属性来修改 ...

  9. Uiautomator 2.0之Until类学习小记

    1. 状态条件-Uiobject2Condtion 1.1 一个UiObject2Condition代表UiObject2满足某个条件的特定状态,主要用于获取到组件释放处于某种状态. 1.2 简单示例 ...

  10. 元素绝对定位以后设置了高宽,a标签不能点击的原因总结

    元素绝对定位以后设置了高宽,a标签不能点击的原因: 1.元素内并无内容 2.背景是透明的,无任何背景图或者颜色 解决方法: 1.如果不是绝对定位元素的,可以用相对定位 2.给元素加透明的背景图 3.I ...