http协议是基于tcp的应用层协议。现在web应用大多是基于http协议。
- http组成
http协议是基于c/s模式。http请求和响应都由三部分组成;
- http请求:请求行,消息报头,请求正文。
请求行格式:Method Request-URI HTTP-Version CRLF
请求方法一般有:
POST: 在uri标识的资源后附加数据
GET: 请求获取uri标识的数据
请求报头:
请求报头允许客户端向服务器端传递请求的附加信息以及客户端自身的信息,如:
Host:
Connection: keep-alive
tt-request-time: 1505056811251
X-SS-Cookie:
User-Agent: News 6.3.3 rv:6.3.3.1 (iPhone; iOS 10.0; zh_CN) Cronet
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 272
即Cookie,Host等信息
请求正文:
Get没有请求正文,Post请求正文就是要附加的信息(如发帖的内容)
- http响应:状态行,消息报头,响应正文
状态行: HTTP-Version Status-Code Reason-Phrase CRLF
状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
常见状态代码、状态描述、说明:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
502 错误的网关
504 网关超时
- 验证
可以通过Charles抓包进行验证
- 通过python的Requests(http库)进行http编写
res = requests.post(url, headers=headers, verify=False,data=dict(project_id=project_id,object_id=object_id, object_data=object_data)