HTTP首部
前面有几篇博文介绍了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首部的更多相关文章
- 前端学HTTP之报文首部
前面的话 首部和方法配合工作,共同决定了客户端和服务器能做什么事情.在请求和响应报文中都可以用首部来提供信息,有些首部是某种报文专用的,有些首部则更通用一些.本文将详细介绍HTTP报文中的首部 结构 ...
- TCP服务和首部知识点小结
服务 应用程序会被TCP分割成数据段,而UDP不分割. TCP有超时重传和确认 如果检验和出错将丢弃 IP数据包可能会失序或者重复,所以TCP会处理 滑动窗口来进行流量控制 对字节流的内容不做任何解释 ...
- TCP首部解析
TCP首部: TCP数据被封装在一个IP数据报中,如下: TCP首部数据格式: 16位源都口号,16为目的端口号用于寻找发送端和接收端的应用进程,加上IP首部的源端IP及终端IP,唯一的确认一个TCP ...
- IP数据报首部解析
IP数据报首部的格式,普通20字节. 4位版本号:当前4--IPv4. 4首部长度:首部长度 8位服务类型TOS: 3bits(优先权)+ 4bits(类型--最小延迟+最大吞吐量+最高可靠性+最小费 ...
- http协议进阶(三)补充:报文首部
之前写的关于报文首部的传送门: 报文首部:http://www.cnblogs.com/imyalost/p/5708445.html 通用首部字段:http://www.cnblogs.com/im ...
- TCP协议学习笔记(一)首部以及TCP的三次握手连接四次挥手断开
TCP协议是一种面向连接的.可靠的流协议. 流即不间断的数据结构.这样能够保证接收到数据顺序与发送相同.但是犹如数据间没有间隔,因此在TCP通信中,发送端应用可以在自己所要发送的消息中设置一个标示长度 ...
- 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)-----TCP报文段的首部格式
TCP报文段的首部格式 概述 TCP报文段首部的前20个字节是固定的,因此TCP首部的最小长度是20字节. 源端口和目标端口 各占2个字节,分别写入源端口号和目的端口号. 序列号 占4个字节,表示本报 ...
- IP首部校验和计算
根据RFC1071文档的计算方法,编写代码实现IP首部校验和的计算 计算步骤: 1.首先将IP首部中校验和字段置0 2.将IP首部每16bit进行相加,如果有进位产生,则将进位加到最低位. 3.将计算 ...
随机推荐
- eclipse配置javah命令
1.找到javah命令所在的目录 我的为 /usr/bin/javah 2.打开eclipse 如图点击第二项 3.配置 如图 ${project_loc}/src -classpat ...
- 使用Word2013发布博客
步骤一.新建博客文章 打开Word软件,新建->博客文章(第一次在模板下面可能找不到,可以在搜索栏中搜索"博客",下次在首页就能直接找到). 步骤二.编辑博客文章 1.输入文 ...
- 使用jQuery Uploadify在ASP.NET 上传附件
Uploadify是JQuery的一个上传插件,实现的效果非常不错,带进度显示.Uploadify官方网址:http://www.uploadify.com/,在MVC中使用的方法可以参考 jQuer ...
- Alljoyn之管中窥豹
Alljoyn之管中窥豹 一.历史: Alljoyn是高通2011年推出的近距离P2P通讯技术,它为分布式应用程序在不同设备中提供了运行环境,特别是移动性.安全性和动态配置,支持Microsoft W ...
- 安装 mysql-5.7.5-m15-winx64
win7 64位下如何安装配置mysql-5.7.5-m15-winx64 距离上次安装MySQL已经过去好久了.步骤这些,有可能会忘记.简单记录一下吧.(参考了一些网络上的博客.) 1.mysql- ...
- windows命令——taskmgr 1
taskmgr.exe用于任务管理器.它显示系统中正在运行的进程. 该程序使用Ctrl+Alt+Del(一般是弹出Windows安全再点击“任务管理器”)或者Ctrl+Shift+Esc 有时候需要, ...
- 用css画出三角形
看到有面试题里会有问到如何用css画出三角形 众所周知好多图形都可以拆分成三角形,所以说会了画三角形就可以画出很多有意思的形状 画出三角形的原理是调整border(边框)的四个方向的宽度,线条样式以及 ...
- Java 线程 — ThreadPoolExecutor
线程池 线程池处理流程 核心线程池:创建新线程执行任务,需要获取全局锁 队列:将新来的任务加入队列 线程池:大于corePoolSize,并且队列已满,小于maxPoolSize,创建新的worker ...
- Over:窗口函数(滑动聚合)
Over 窗口函数在Select 子句中,对查询的结果集进行“滑动-聚合”运算:如果使用count,那么基于滑动窗口的聚合语义同 base+1 累加:如果使用sum,那么基于滑动窗口的聚合语义等同于数 ...
- LINQ系列:LINQ to SQL Select查询
1. 查询全部字段 using (NorthwindContext context = new NorthwindContext()) { var expr = context.Products; f ...