在进行爬虫的时候接触到了http,简单说一下对它的理解。
HTTP协议简介
HTTP(超文本传输协议)是应用层上的一种客户端/服务端模型的通信协议,它由请求和响应构成,且是无状态的。(暂不介绍HTTP2)
1…协议
协议规定了通信双方必须遵循的数据传输格式,这样通信双方按照约定的格式才能准确的通信。
2.无状态
无状态是指两次连接通信之间是没有任何关系的,每次都是一个新的连接,服务端不会记录前后的请求信息。
3.客户端/服务端模型
五层网络模型
URL构成
协议内容
1.请求(Request)
客户端发送一个HTTP请求到服务端的格式:
请求行
请求头
请求体
2.响应(Response)
服务端响应客户端格式:
状态行
响应头
响应体
3.状态码
HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。
HTTP状态码共分为5种类型:
分类 | 分类描述 |
---|---|
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
更详细的状态码可查看 HTTP状态码
但一般我们只需要知道几个常见的就行,比如 200,400,401,403,404,500,502.
请求方法:
方法 | 描述 |
---|---|
GET | GET请求会显示请求指定的资源。一般来说GET方法应该只用于数s据的读取,而不应当用于会产生副作用的非幂等的操作中。它期望的应该是而且应该是安全的和幂等的。这里的安全指的是,请求不会影响到资源的状态。 |
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 |
(其他方法详细见网上)
请求和响应常见通用头
名称 | 作用 |
---|---|
Content-Type | 请求体/响应体的类型,如:text/plain、application/json |
Accept | 说明接收的类型,可以多个值,用,(半角逗号)分开 |
Content-Length | 请求体/响应体的长度,单位字节 |
Content-Encoding | 请求体/响应体的编码格式,如gzip,deflate |
Accept-Encoding | 告知对方我方接受的Content-Encoding |
ETag | 给当前资源的标识,和Last-Modified、If-None-Match、If-Modified-Since配合,用于缓存控制 |
Cache-Control | 取值为一般为no-cache或max-age=XX,XX为个整数,表示该资源缓存有效期 |
注意:Content-Type,内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件。
详细说明一下cookies
Cookie的作用:
Cookie是用于维持服务端会话状态的,通常由服务端写入,在后续请求中,供服务端读取。
一、HTTP请求,Cookie的使用过程:
1、server通过HTTP Response中的"Set-Cookie: header"把cookie发送给client
2、client把cookie通过HTTP Request 中的“Cookie: header”发送给server
3、每次HTTP请求,Cookie都会被发送。
二、http请求发送cookies的条件:
1、本地已经缓存有cookies
2、根据请求的URL来匹配cookies的domain、path属性,如果都符合才会发送。
举个例子:访问www.baidu.com时,就不发送www.qq.com的cookies.
三、cookies查看:
大家可以使用抓包工具,这种工具就不多话,网上搜索出很多。使用这些工具中可以清晰的看到Http Request 中的Cookie, 和Http Response中的cookie
四、网站的登陆与App的自动登陆原理:
用户在连接服务器时,服务器生成一个唯一的SessionID 。而SessionID这一数据则是保存到客户端,
用Cookie保存的,用户提交页面时,会将 SessionID提交到服务器端,来存取Session数据。
Cookie cookie = new Cookie(“mycookie”+cookieNo, String.valueOf(cookieNo));
两个String串组成cookies。