HTTP报文首部

2017-03-30  本文已影响360人  吕子威

HTTP的首部字段都包括什么?

HTTP请求报文: method / url / HTTP版本号 / header / body
也就是请求行、 请求头 、 请求体

HTTP响应报文: http 版本号 / 状态码 / headers / body
响应行/ 响应头部/响应体

request headers

response headers

一共有4种首部字段,下面会一一介绍

实际的HTTP通信中,不限于RFC2616中定义的47种字段,还包括Cookie、Set-Cookie等

一 通用首部字段介绍

http1.1默认都是持久链接,例如 Connection: keep-alive
如果服务端想明确的断开链接,可以设置  Connection: close
 它的取值很单一,就是表示客户端要求,所有的中间服务器不要返给我缓存的资源
Pragma: no-cache

理想情况下,所有的中间服务器都是基于HTTP1.1协议的话,我们只用
Cache-Control: no-cache 

可是实际开发中,一般我们发送请求会2个首部字段都写上

Pragma: no-cache
Cahche-Control: no-cache

 Transfer-Encoding: chunked
Warning: [警告码] [警告主机: 端口号] [ 警告内容] [日期]

二 请求首部字段

例如: 
文本文件  text/html , text/plain , text/css
图片文件  image/jpeg    image/gif
应用程序使用的二进制文件:   application/octet-stream , application/zip

可以使用q= 可以指定优先级,默认q=1 
 Expect: 100-continue
等待状态码100响应的客户端在发生请求时,就需要指定这个字段
例如:
If-Match
If-Modified-Since
If-None-Match
If-Range
If--Unmodifield-Since

三 响应首部字段

Accept-Ranges: none    // 不能处理
Accept-Ranges:bytes    // 可以处理
每次资源被缓存时,都会被分配一个唯一的标识。
当资源发生变化时,这个ETag也会对应的发生改变。

ETag值也分强弱,强ETag值只要发生一点变化就会改变,弱ETag只在发生较大变化才改变

当代理服务器接受到带有Vary字段的请求时,如果使用的Accept-Language字段相同,那么就直接从缓存中返回响应,如果不一致,就先从原服务器获取资源后,才能作为响应返回

四 实体首部字段

在请求报文和响应报文中,都包含着实体相关信息的首部字段

Allow: GET,HEAD
用于通知客户端,能支持请求的所有HTTP方法
Content-Encoding: gzip
告知浏览器,我已经对实体的主体部分进行了gzip压缩,之后的解压就麻烦你了

类似请求首部字段Accept

五 为Cookie服务的首部字段

共2个字段,一个在请求头,一个在响应头

1.expires 属性 指定浏览器可发送Cookie的有效期

如果不设置就默认浏览器关闭,Cookie就过期。

2.path属性 指定
3. domain属性
4.secure属性,用于限制web页面只有在HTTPS安全链接时,才可以发送Cookie
5.HttpOnly属性,可以时JS无法操作Cookie,所以可以用来防止跨站脚本攻击(XSS)

六 其他首部字段

HTTP的首部字段是可以自行扩展的,所以在Web服务器和浏览器的应用上,会出现各种非标准的首部字段。以下是比较常见的自己扩展的首部字段

用于控制网站内,在其他网站的Frame标签内的显示问题。其主要目的是为了防止点击劫持攻击
有2个字段值

X-Frame-Options: DENY           拒绝
X-Frame-Options:SAMEORIGIN         仅同源域名下的页面匹配时许可


X-XSS-Protection: 0       关闭XSS过滤设置
X-XSS-Protection: 1       开启XSS的过滤设置
设置为0同意被追踪,1拒绝被追踪
由于DNT的功能具备有效性,所以Web服务器需要对DNT做好对应的支持
上一篇 下一篇

猜你喜欢

热点阅读