HTTP协议

567 阅读3分钟

www.jianshu.com/p/8fe93a147…

Request

  1. 请求行 Request line
  2. 请求头 Header
  3. 空行
  4. 请求体

Request

抓包的request结构:

GET /mix/76.html?name=kelvin&password=123456 HTTP/1.1
Host: www.fishbay.cn
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6

1. 请求行

GET为请求类型,/mix/76.html?name=kelvin&password=123456为要访问的资源,HTTP/1.1是协议版本

2. 请求头部

从第二行起为请求头部,Host指出请求的目的地(主机域名);User-Agent是客户端的信息,它是检测浏览器类型的重要信息,由浏览器定义,并且在每个请求中自动发送。

3. 空行

请求头后面必须有一个空行

4. 请求体

请求的数据也叫请求体,可以添加任意的其它数据。这个例子的请求体为空。

Response

  1. 状态行 Request line
  2. 响应头 Header
  3. 空行
  4. 响应体

Response

抓包的response结构:

HTTP/1.1 200 OK
Server: nginx
Date: Mon, 20 Feb 2017 09:13:59 GMT
Content-Type: text/plain;charset=UTF-8
Vary: Accept-Encoding
Cache-Control: no-store
Pragrma: no-cache
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Cache-Control: no-cache
Content-Encoding: gzip
Transfer-Encoding: chunked
Proxy-Connection: Keep-alive

{"code":200,"notice":0,"follow":0,"forward":0,"msg":0,"comment":0,"pushMsg":null,"friend":{"snsCount":0,"count":0,"celebrityCount":0},"lastPrivateMsg":null,"event":0,"newProgramCount":0,"createDJRadioCount":0,"newTheme":true}

1. 状态行

状态行由协议版本号、状态码、状态消息组成

2. 响应头

响应头是客户端可以使用的一些信息,如:Date(生成响应的日期)、Content-Type(MIME类型及编码格式)、Connection(默认是长连接)等等

3. 空行

请求头后面必须有一个空行

4. 响应体

请求的数据也叫请求体,可以添加任意的其它数据。这个例子的请求体为空。

状态码

HTTP协议的状态码由3位数字组成,第一个数字定义了响应的类别,共有5中类别:

  1. 1xx: 指示信息--表示请求已接收,继续处理
  2. 2xx: 成功--表示请求已被成功接收、理解、接受
  3. 3xx: 重定向--要完成请求必须进行更进一步的操作
  4. 4xx: 客户端错误--请求有语法错误或请求无法实现
  5. 5xx: 服务器端错误--服务器未能实现合法的请求

常用状态码:

200 OK                        //客户端请求成功
400 Bad Request               //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized              //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 
403 Forbidden                 //服务器收到请求,但是拒绝提供服务
404 Not Found                 //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error     //服务器发生不可预期的错误
503 Server Unavailable        //服务器当前不能处理客户端的请求,一段时间后可能恢复正常