前面有几篇博文介绍了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. 如何使用Goolge Timeline工具

    网上中文的资料版本比较老,找到一个新版本的英文介绍,翻一下,原文:https://developers.google.com/web/tools/chrome-devtools/profile/eva ...

  2. 编写一个基本的连接池来实现连接的复用&一些工程细节上的优化

    package it.cast.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQL ...

  3. Servant:基于Web的IIS管理工具

    Servant for IIS是个管理IIS的简单.自动化的Web管理工具.安装Servant的过程很简单,只要双击批处理文件Install Servant Service.bat,然后按照屏幕上的说 ...

  4. PostgreSQL配置优化

    硬件和系统配置 操作系统 Ubuntu13.04 系统位数 64 CPU Intel(R) Core(TM)2 Duo CPU 内存 4G 硬盘 Seagate ST2000DM001-1CH164 ...

  5. 递归算法经典实例小结(C#实现)

     一 .递归算法简介 在数学与计算机科学中,递归是指在函数的定义中使用函数自身的方法. 递归算法是一种直接或者间接地调用自身算法的过程.在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往 ...

  6. .NET中STAThread和MTAThread

    本文讨论在.NET中使用进程内COM组件时的公寓模型,以一个示例直观演示STAThread和MTAThread的作用和区别. 1. COM中的公寓 1.1 基本规则 公寓是COM组件的运行环境,日常生 ...

  7. AngularJs项目文件以及文件夹结构

    app/ ----- Libs/ // references for all libs ---------- angular.js ---------- angular-route.js ----- ...

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

    第四步.WPF后台逻辑代码编写 在后台用Entity Framework 6.1的Code First方式获取数据库中的数据.同时,在“刷新”按钮的方法中进行数据绑定.操作步骤如下: 1)  在“刷新 ...

  9. HTTP学习二:Web应用中的HTTP

    1 HTTP连接 1.1 TCP连接对性能的影响 TCP三次握手如下图: 如上图,建立一次TCP连接要经过三个步骤.HTTP是建立在TCP之上的,因此TCP连接的性能直接影响HTTP的性能. TCP影 ...

  10. Windows下安装python2和python3双版本

    现在大家常用的桌面操作系统有:Windows.Mac OS.ubuntu,其中Mac OS 和 ubuntu上都会自带python.这里我们只介绍下Windows(我用的Win10)环境下的pytho ...