这些天业务需要,用python爬取了一些移动应用分析网站的数据,包括App Annie和 Sensor Tower等,当然在爬取过程中,对HTTP协议也有了更深一步的理解,下面重新总结了以下HTTP协议相关请求头相应头的常用内容及释义。
HTTP
超文本传输协议,基于TCP
请求行
例如GET /index HTTP/1.1
- GET 获取“请求资源路径”对应的资源
- POST 向“请求资源路径”提交数据,请求服务器进行处理
- HEAD 获取“请求资源路径”的消息头
- PUT 想服务器提交数据,存储到“请求资源路径”的位置
- DELETE 请求服务器删除“请求资源路径”的资源
- TRACE 请求服务器会送收到的请求信息,主要用于测试或诊断
- CONNECT 保留将来使用
- OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求
请求头
有Accept,Accept-Charset,Accept-Encoding,Accept-Language,
Host(客户端浏览器想要访问的主机服务器),
If-Modified-Since(客户端浏览器对资源最后缓存时间),
Referer(客户端浏览器是从哪个页面来的),
User-Agent(客户端的系统信息,包括使用的操作系统,浏览器版本号等),
Cookie(客户端需要带给服务器的数据),
Cache-Control(客户端浏览器的缓存控制),
Connection(请求完成后,客户端希望是保持连接还是关闭连接)
HTTP响应消息
响应状态行
HTTP1.1 200 OK
响应码:
- 1xx:成功接收请求,要求客户端继续提交下一次请求才能完成整个过程,例如ajax
- 2xx:成功接收请求,并已完成整个过程
- 3xx:为完成请求,客户端需要进一步处理
- 4xx:客户端的请求有错误
- 5xx:服务端出现错误
常见响应码:
- 200, 正常
- 301,永久移动,被请求的文档已经移动到别处,此文档的新URL地址为相应头Location值,浏览器以后对该文档的访问会自动使用新地址
- 302,找到,和301类似,但是Location返回的是一个临时的,非永久的URL地址
- 304,未修改,浏览器在请求时会通过一些请求头描述该文档的缓存情况,当服务器判断文档没有修改时,就通过304告诉浏览器继续使用缓存,否则浏览器讲使用200状态吗返回修改后的新文档。
- 401,未经授权,例如spring security非法访问时候,当浏览器视图访问一个受密码保护的页面时候,且在请求头中没有Authorization传递用户信息,就会返回401状态码要求浏览器发送带有Authorization头的信息。
- 403,禁止,服务器理解客户端的请求,但是拒绝处理,通常为服务器上文件或目录权限设置导致
- 404,找不到
- 500,服务器内部错误,例如controller里面抛出异常
- 502,无效网关,服务器作为网关或者代理访问上有浏览器,但是上游服务器返回了非法响应,也就是服务器只是作为代理
- 504,网关超时,服务器作为网关或者代理访问上游服务器,但是未能在规定事件内获取上游服务器的响应,例如上游服务器挂了。
响应头
- Server 服务器的类型和版本信息
- Date 服务器的响应信息
- Expires 控制缓存的过期时间
- Location 控制浏览器显示哪个页面(重定向到新的URL)
- Accept-Ranges 服务器是否支持分段请求,以及请求范围
- Cache-Control 服务器控制浏览器如何进行缓存
- Content-Disposition 服务器控制浏览器以下载方式打开文件
- Content-Encoding 编码
- Content-Length 实体内容长度
- Content-Language 实体内容的语言和国家名
- Content-Type 实体内容的类型和编码类型
- Last-Modified 请求文档的最后一次修改时间
- Transfer-Encoding 文件传输编码
- Set-Cookie 发送Cookie相关信息
- Connection 是否需要持久连接
当然需要记住就是,HTTP是无状态的协议,所谓登录状态实际上是通过session控制,而session在客户端则基本是以cookie方式存储。