HTTP header

HTTP报文 一章中,我们介绍了HTTP协议由 行、头、体组成。而本章,介绍 “头”

如果你写了一个小爬虫,但抓出来的结果和想象的不同(例如界面样式,返回内容和人工看有差异,或者是需要登录),你可以更改你发送的HTTP请求的header部分,将合法的User-Agent、Cookie等添上,能解决大多数此类问题,因为HTTP是无状态并且不安全的协议,所以这些小手段能够生效。

下面取几个常用的头字段来做介绍。

请求首部:

请求首部就是由客户端,放在HTTP请求头中发送给服务器的部分。

User Agent(用户代理)

简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。从而为来自不同平台/浏览器的用户,提供最适合的响应内容。(例如,移动用户不应该收到PC网页的响应,就是由User Agent来做识别的)

Referer (来源)

它表示用户是从哪个网页发起的请求。通常用来做图片防盗链。
例如在图片服务器中解析请求判断Referer,如果非白名单站点发过来的请求,则返回一个防盗链的图片给请求方。

Accept(请求方接受哪些媒体类型)

客户端可以提供Accept首部,告知服务器,自己可以接受哪些类型的返回。例如图片、视频等

由于HTTP的无状态性质,所以需要在每次请求时都要带上“我是谁”的信息发给服务器。而Cookie就做了这个事,同时,Cookie也可以让服务器存储部分信息给客户端,就像是:“你来我这里,走的时候带个会员卡,下次直接带上卡过来”

同时,Cookie中能保存用户的身份标识,在下次访问时,服务端可以根据身份标识,提供个性化的内容。


响应首部:

响应首部,就是由服务器,放在HTTP响应头中发送给客户端的部分。

Set-Cookie(为客户端设置Cookie)

这里和请求首部的 Cookie 相对应,正因为服务端在这里向客户端发送了Set-Cookie 指令,所以客户端才知道要把哪些内容作为Cookie存储起来,下次请求时再带上。

Location(重定向使用)

Location一般配合3xx状态码(详见:HTTP状态码) 用于重定向,使得客户端能正确地去找到请求实体。

Content-Length(内容长度)

服务端告知客户端,本次响应内容的长度,如果返回的长度大于告知的长度,则超出的那部分会被丢弃。如果返回的长度小于告知的长度,则客户端会一直等待(因为客户端认为服务端的响应还没有发送完毕)。所以,一个准确的Conetnt-Length是十分必要的。

同时,在做文件下载服务时,返回Content-Length能帮客户端正确的理解本次文件的大小(例如我们平时用浏览器下载文件时,可以提前显示出文件的大小)