【干货】具体例子讲解HTTP Header

之前一篇文章,大概介绍了HTTP Headers,接下来我们看看常见的header信息和它所代表的含义。

首先打开腾讯首页,控制台Network。

www.qq.com请求:

Genaral Headers:

  • Request URL:http://www.qq.com/
  • Request Method:GET
  • Status Code:200 OK
  • Remote Address:127.0.0.1:8888
  • Referrer Policy:unsafe-url

Request URL:请求的URL

URL(Uniform Resource Locator即统一资源定位符),互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。

基本URL包含:模式(或称协议)、服务器名称(或IP地址)、路径和文件名,如“协议://授权/路径?查询”。

Request Method:请求方法

常见的Request Method有:get、post、head

get和post的区别:本质上并无区别,只是http协议上对这两个方法有些规定。比如:1、GET使用URL传参,而POST将数据放在BODY中。2、GET的URL会有长度上的限制,则POST的数据则可以非常大。3、POST比GET安全,因为数据在地址栏上不可见。

从其他角度来看:get是Safe、Idempotent的,get更像是查询语句,不会改变服务器任何状态,所以他是Safe(安全)、Idempotent(幂等的)。Safe可理解为只读,Idempotent可理解为多次访问相等。而post不是Safe,也不是Idempotent的,post更像是insert语句,会改变服务器状态。

从缓冲角度来看:服务端程序在接收客户端表单提交的数据时,需要先将数据存储到一个内存空间,然后做解析等后续工作,这个内存空间一般称之为接收缓冲区。对于post数据因为有Content-Length标记,服务端可以按标记的长度创建一个等于或稍大于提交数据的缓冲区。对于get,因为事先不知道提交的数据有多少,需要估计缓冲区长度,如果缓冲区很大而接收数据很小会造成内存浪费,而如果缓冲区小于接收数据,就可能造成缓冲区溢出。

Status Code:状态码

(消息)1**:这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。

(成功)2**:这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。

(重定向)3**: 这类状态码代表需要客户端采取进一步的操作才能完成请求。

(请求错误)4**:这类的状态码代表了客户端看起来可能发生了错误,妨碍了服务器的处理。

(服务器错误)5、6:这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。

Remote Address:远程地址

一般是127.0.0.1:8888或者远程服务器ip地址+端口号

Referrer Policy:来源管制

这个东西怎么理解呢?我研究了好一会才明白,我们知道链接都是跳来跳去的。当从一个链接跳到另一个链接,另一个链接的referer就记录了是从哪个链接跳来的。Referrer Policy就是管理这个来源信息的机制。

no-referrer:整个 Referer 首部会被移除。访问来源信息不随着请求一起发送。

no-referrer-when-downgrade (默认值):在同等安全级别的情况下,引用页面的地址会被发送(HTTPS->HTTPS),但是在降级的情况下不会被发送 (HTTPS->HTTP)

origin:在任何情况下,仅发送文件的源作为引用地址。例如 https://example.com/page.html 会将 https://example.com/ 作为引用地址。

unsafe-url:无论是同源请求还是非同源请求,都发送完整的 URL(移除参数信息之后)作为引用地址。

ps:就着昨天,‘www.qq.com’还是‘unsafe-url’的,今天就变成了‘no-referrer-when-downgrade’,难道我发现了什么不可告人的秘密?

Request Headers:

  • Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8
  • Accept-Encoding:gzip, deflate
  • Accept-Language:zh-CN,zh;q=0.8,en;q=0.6
  • Cache-Control:max-age=0
  • Cookie:(此处省略一长串字符串)
  • Host:www.qq.com
  • Proxy-Connection:keep-alive
  • Referer:https://www.baidu.com/link?url=-nT7ePvEGh_eOxm-pYc24q7sb_3EwR1ueUCM2wTbMF_&wd=&eqid=c9103ed70002ccfe000000065975e9bf
  • Upgrade-Insecure-Requests:1
  • User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36

Accept:客户端可以处理的内容类型,这种内容类型用MIME类型来表示

text/plain:文本文件默认值。意思是 未知的文本文件 ,浏览器认为是可以直接展示的。

text/css:任何一个CSS文件想要在网页上被解释执行就必须为text/css 文件。

text/html:HTML5统一的html格式。

image/gif、image/jpeg、image/png、image/svg+xml:图片格式。

......

Accept-Encoding:客户端发给服务器,声明客户端支持的编码类型。默认是deflate,其余还有gzip、compress等。

gizp: GZIP常用于UNIX系统的文件压缩。我们在Linux中经常会用到后缀为.gz的文件,它们就是GZIP格式的。现今已经成为Internet 上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

comporess:compress是一个相当古老的 unix 档案压缩指令,压缩后的档案会加上一个 .Z 延伸档名以区别未压缩的档案,压缩后的档案可以以 uncompress 解压。由于gzip更理想,一般用gzip。

Accept-Language:声明客户端可以理解的自然语言,以及优先选择的区域方言。

Cache-Control:用于指定所有缓存机制在整个请求/响应链中必须服从的指令。

public:所有内容都将被缓存(客户端和代理服务器都可缓存)
private:内容只缓存到私有缓存中(仅客户端可以缓存,代理服务器不可缓存)
no-cache/no-store:浏览器需要重新发送请求。
max-age=xxx:缓存的内容将在 xxx 秒后失效, 这个选项只在HTTP 1.1可用。

Cookie:客户端cookie(不展开)

Host:客户端地址(不展开)

Proxy-Connection:(代理链接、不展开)

Referer:来源,能看到是从哪里链接过来的。

Upgrade-Insecure-Requests:(不展开)

User-Agent:可以看到客户端系统版本、浏览器版本

Response Headers:

  • Cache-Control:max-age=60
  • Content-Encoding:gzip
  • Content-Type:text/html; charset=GB2312
  • Date:Tue, 25 Jul 2017 02:01:24 GMT
  • Expires:Tue, 25 Jul 2017 02:02:24 GMT
  • Proxy-Connection:Keep-alive
  • Server:squid/3.5.20
  • Transfer-Encoding:chunked
  • Vary:Accept-Encoding
  • Vary:Accept-Encoding
  • Vary:Accept-Encoding
  • X-Cache:MISS from shenzhen.qq.com

Content-Type:返回格式、编码

Date:请求时间

Expires:缓存失效日期

Server:服务器代理

Transfer-Encoding:分块编码

X-Cache: 表示你的 http request 是由 proxy server 回的

你可能感兴趣的:(【干货】具体例子讲解HTTP Header)