前面有几篇博文介绍了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. Zend Studio XDebug调试配置

    最近在配置zend studio时找了些资料,发现了这个,说的比较详细 搭建Zend Studio 10.5 和XDebug 环境,试图进行 Drupal的调试, 经历了一些困难,但是最终解决了问题, ...

  2. qt5.5 qtcreator中文乱码

    MSVC2010默认保存GBK编码.如果不转换成utf-8编码,对GBK编码的文件,中文可以直接用QStringLiteral()宏,如:QMessageBox msgBox;msgBox.setTe ...

  3. 转:隐马尔可夫模型(HMM)攻略

    隐马尔可夫模型 (Hidden Markov Model,HMM) 最初由 L. E. Baum 和其它一些学者发表在一系列的统计学论文中,随后在语言识别,自然语言处理以及生物信息等领域体现了很大的价 ...

  4. Mac读取Andriod屏幕截图

    int main(int argc, const char * argv[]) { // insert code here... string str3 = "/Users/Ethan/Do ...

  5. ios使用CocoaHTTPServer实现文件共享

    CocoaHTTPServer下载地址:https://github.com/robbiehanson/CocoaHTTPServer 实现效果:在电脑端输入192.168.0.100:8080,出现 ...

  6. 非常全面的SQL Server巡检脚本来自sqlskills团队的Glenn Berry 大牛

    非常全面的SQL Server巡检脚本来自sqlskills团队的Glenn Berry 大牛 Glenn Berry 大牛会对这个脚本持续更新 -- SQL Server 2012 Diagnost ...

  7. 安装zookeeper

    从zookeeper官方网站下载安装包:zookeeper-3.4.9.tar.gz 解压安装 tar xvf zookeeper-3.4.9.tar.gz -C /usr/java cd /usr/ ...

  8. Meteor+AngularJS:超快速Web开发

        为了更好地描述Meteor和AngularJS为什么值得一谈,我先从个人角度来回顾一下这三年来WEB开发的变化:     三年前,我已经开始尝试前后端分离,后端使用php的轻量业务逻辑框架.但 ...

  9. SQLSERVER语句 in和exists哪个效率高本人测试证明

    SQLSERVR语句 in和exists哪个效率高本人测试证明 最近很多人讨论in和exists哪个效率高,今天就自己测试一下 我使用的是客户的数据库GPOSDB(已经有数据) 环境:SQLSERVE ...

  10. 模拟jsonp的实现

    function prescript(s) { if (s.cache === undefined) { s.cache = false; } if (s.crossDomain) { s.type ...