http了解一些,但总是没怎么去注意。这次就把http的头弄的大概清楚了一些。
下面是打开百度首页时的一个请求,截图了一下。
上面这张图是chrome里截出来的,是经过整理的http头,把各种信息都清楚的列了出来。
一个请求响应有两个头。
Request Headers 是指浏览器发出的请求头。
Response Header 是指服务器发回的响应头。
最上面三行是chrome自己提出来的,前两行属于Request Headers,最后一行属于Response Header。
逐条解释下:
Request URL:http://8.su.bdimg.com/icon/7183.png
请求的url,当前请求的是一张图片资源。
主机的位置是8.su.bdimg.com,ping一下可以得到ip地址140.207.195.19,是上海市联通
Request Method:GET
请求的方法,当前是GET。
这个字段是大小写敏感的,包括OPTIONS、GET、HEAD、POST、PUT、DELETE、 TRACE。
方法GET和HEAD应该被所有的通用WEB服务器支持,其他所有方法的实现是可选的。
webservice标准REST,一个请求就是请求一个资源,而用HTTP协议中自带的方法定义请求资源的状态(GET、POST、PUT、DELETE)。
Status Code:200 OK
http状态码,表明这个请求响应的状态,是服务器返回来的,也就是8.su.bdimg.com返回的。
一个数字定义响应的类别,后两个数字没有分类的作用。第一个数字可能取5个不同的值:
1xx:信息响应类,表示接收到请求并且继续处理
2xx:处理成功响应类,表示动作被成功接收、理解和接受
3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理
4xx:客户端错误,客户请求包含语法错误或者是不能正确执行
5xx:服务端错误,服务器不能正确执行一个正确的请求
Accept:image/webp,/;q=0.8
告诉服务器自己接受什么介质类型(mineType),/ 表示任何类型,type/* 表示该类型下的所有子类型,type/sub-type。
image/webp是指一种webp的图片格式,是google弄出来的。这种mineType不是官方定义的。
在质量相同的情况下,WebP格式图像的体积要比JPEG格式图像小40%。美中不足的是,WebP格式图像的编码时间“比JPEG格式图像长8倍”。
q是权重,/的权重是0.8,而image/webp的权重是默认值1.(q为0时,不接受这种类型)
这个句子的意思是我这个浏览器优先接受webp格式的图片,但是如果没有这种图片,那给我随便什么东西。
Accept-Encoding:gzip,deflate,sdch
浏览器可以解码的编码方法(压缩方法)
gzip是 GNU zip 的缩写,它是一个 GNU 自由软件的文件压缩程序,也经常用来表示 gzip 这种文件格式。
deflate是同时使用了 LZ77 算法与哈夫曼编码(Huffman Coding)的一个无损数据压缩算法。
sdch是Chrome自己定义的压缩方法。
这些编码方法,都是为了减少传输的数据,需要服务器的支持。
假设8.su.bdimg.com服务器是nginx,可以开启gzip压缩功能,那么当我们的Chrome发送这个请求时,服务器会先将png用gzip算法压缩,再发到Chrome。然后Chrome解压缩,显示出来。
Accept-Language:zh-CN,zh;q=0.8
浏览器支持的语言,中文简体和中文。优先支持中文。(上面解释过了q是权重的意思,zh-CN权重是1,zh权重是0.8)。
Host:8.su.bdimg.com
主机是8.su.bdimg.com,这个可以从request url里面看出来。
Proxy-Connection:keep-alive
客户端与服务器连接的类型。keep-alive和close两种,可以理解为长连接和短连接。其实是对应tcp的长连接和短连接。
HTTP是一个无状态的面向连接的协议。是在tcp上的应用层协议。
在HTTP/1.0中默认是close,短连接。就是每次请求完毕都立即关闭连接。
从 HTTP/1.1起,默认使用keep-alive,长连接。就是每次请求完毕仍然保持一段时间连接。
Referer:http://www.baidu.com/
发送这个请求的页面地址。我们这个请求是在百度首页发出的请求一张图片。故这个参数是百度的网址。
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36
最复杂的一个字段。user-Agent每个浏览器都不同,但都类似。
Mozilla/5.0基本上所有的浏览器都以Mozilla开头,表明兼容Mozilla的网站,历史问题,因为以前Mozilla是老大。
Windows NT 6.1 win7的内核,表明我的电脑是win7系统
WOW64 64位机器,表明我的电脑是64位
AppleWebKit/537.36 chrome内核类型与版本,是现在最流行的内核之一,开源。
KHTML, like Gecko KHTML排版引擎,AppleWebKit用的排版引擎WebCore的鼻祖是KHTML。Gecko排版引擎,Firefox的排版引擎。不知为什么这里要写like,有关系吗?难道KHTML是模仿Gecko?呵呵。
Chrome/31.0.1650.63 当前Chrome的版本
Safari/537.36 不知道什么意思,但是Safari是苹果浏览器,而AppleWebKit也是苹果开发用于Safari,因此可能是AppleWebKit需要一部分Safari的功能。
Accept-Ranges:bytes
这个字段说明服务器是否支持Range(是否支持断点续传功能),如果支持,则返回Accept-Ranges: bytes,如果不支持,则返回Accept-Ranges: none。
Cache-Control:max-age=15552000
cache-control是用于控制网页的缓存,跟Expires同个意思。
max-age单位是秒,就是从现在开始到15552000之间都是有用的,这张图片都是被缓存下来的。
Cache-Control是HTTP1.1才有的,不适用与HTTP1.0,而Expires既适用于HTTP1.0,也适用于HTTP1.1。
Ctrl+F5时缓存无效,都会重新获取。
有以下几种取值:
max-age:(只接受 Age 值小于 max-age 值,并且没有过期的对象)
max-stale:(可以接受过去的对象,但是过期时间必须小于 max-stale 值)
min-fresh:(接受其新鲜生命期大于其当前 Age 跟 min-fresh 值之和的缓存对象)
响应:public(可以用 Cached 内容回应任何用户)
private(只能用缓存内容回应先前请求该内容的那个用户)
no-cache(可以缓存,但是只有在跟WEB服务器验证了其有效后,才能返回给客户端)
Connection:keep-alive
同Proxy-Connection:keep-alive。服务器和浏览器都需要支持keep-alive才可以。
Content-Length:322
服务器告诉浏览器自己响应的对象的长度。不包含http头的大小。这里就是指图片的大小,7183.png就是322B大小。
Content-Type:image/png
服务器返回的数据的mineType,是符合Accept要求的。一张png图片,是官方定义的资源类型。
Date:Tue, 18 Mar 2014 07:06:26 GMT
信息发送的时间,GMT格林威治时间。
ETag:”371935355”
资源的一个标识,每次资源被修改,这个值会改变,可以用于表明资源是否被修改。
Expires:Sat, 06 Sep 2014 15:19:12 GMT
过期时间,这张图片在这个时间之前会被缓存着。
Last-Modified:Tue, 14 Jan 2014 07:16:10 GMT
在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是请求的资源,同时将Last-Modified属性标记此文件在服务期端最后被修改的时间。
客户端第二次请求此URL时,根据 HTTP 协议的规定,浏览器会向服务器传送 If-Modified-Since 报头,询问该时间之后文件是否有被修改过:
Tue, 14 Jan 2014 07:16:10 GMT
如果服务器端的资源没有变化,则自动返回 HTTP 304 (Not Changed.)状态码,内容为空,这样就节省了传输数据量。当服务器端代码发生改变或者重启服务器时,则重新发出资源,返回和第一次请求时类似。从而保证不向客户端重复发出资源,也保证当服务器有变化时,客户端能够得到最新的资源。
Server:JSP2/1.0.24
服务器的类型,是JSP2