一、HTTP报文详细解释
Web服务器和浏览器或客户端之间主要是通过HTTP协议进行数据交互,HTTP报文主要分为两部分:HTTP请求报文和HTTP响应报文,HTTP请求报文用于客户端向服务器请求数据的一种请求协议,而HTTP响应报文则是用户服务器响应客户端返回响应的数据,可以下载Wildpackets Omnipeek进行网络抓包分析HTTP报文,获取和学习更多有用的内容。
1、HTTP请求报文
一个HTTP请求报文包含3部分:
(1)请求行:方法,URI,协议/版本
(2)请求头信息
(3)请求正文数据
具体请求报文实例如下:
HTTP - Hyper Text Transfer Protocol
HTTP Command: POST [54-57]
URI: /cloudquery.php [58-72]
HTTP Version: HTTP/1.1<CR><LF> [74-81]
User-Agent: Post_Multipart<CR><LF> [85-109]
Host: 192.168.1.6<CR><LF> [113-132]
Accept: */*<CR><LF> [136-145]
Pragma: no-cache<CR><LF> [149-163]
X-360-Cloud-Security-Desc:Scan Suspicious File<CR><LF> [167-212]
x-360-ver: 4<CR><LF> [216-226]
Content-Length: 770<CR><LF> [230-247]
Content-Type: multipart/form-data; boundary=----------------------------bff2824ed28b<CR><LF><CR><LF> [251-333]
在该实例中,请求行的请求方法为POST,URI定义一个资源,一般为相对于服务器根目录的路径,HTTP版本为1.1。
请求头主要是包含客户端环境的相关信息和正文内容的信息,例如Host为本机地址,Content-Length为数据长度,在更规范的请求头中会有更多的说明信息。
请求正文数据为一个文件,若使用POST提交注册信息,这里会保存用户帐号密码等信息。
2、HTTP响应报文
一个HTTP响应报文同样包含3部分:
(1)响应行:协议/版本,状态码,状态描述
(2)响应头信息
(3)响应正文数据
具体响应报文实例如下:
HTTP - Hyper Text Transfer Protocol
HTTP Version: HTTP/1.1 [54-61]
HTTP Status: 200 [62-64]
HTTP Reason: OK<CR><LF> [66-67]
Server: nginx<CR><LF> [71-82]
Date: Sun, 07 Apr 2019 22:22:19 GMT<CR><LF> [86-119]
Content-Type: application/octet-stream<CR><LF> [123-159]
Transfer-Encoding: chunked<CR><LF> [163-187]
Connection: close<CR><LF> [191-206]
Cache-Control: no-cache<CR><LF> [210-231]
pragma: no-cache<CR><LF><CR><LF> [235-249]
Line 1: e9<CR><LF><LF><EOT><NUL><GS><NUL><SOH><NUL><NUL><DC1><STX> [255-256]
Binary Data:
在本例中,响应行的协议为HTTP协议1.1版本,状态码为200,表示成功响应。
响应头包含服务器环境和数据实体的的相关信息,如server为nginx,Cache-Control为no-cache。
响应正文数据Binary Data为二进制数据。
二、HTTP方法
HTTP方法的本质是用于定义对资源的操作,REST API设计规范准确使用了HTTP方法的语义化,这也是在后端开发中,设计API的基本规范。URL的本质是资源,HTTP的方法是对资源的操作,如/user,我们不需要再设计/user/add+delete+update+search,我们只需要设计/user一条URL,另外使用四个基本的HTTP方法代替资源操作:POST表示对资源的新增操作,DELETE表示删除资源,PUT表示更新资源,GET表示查询数据。
另外,我们平时常用的方法是GET和POST,那么GET方法和POST方法有什么区别呢?其实不需要过多讨论,我们只需要从报文入手就行了,GET方法提交数据时,数据封装在请求行的URI中,所以数据会被暴露,而POST方法提交数据,数据被封装在请求正文中,具体的验证你可以下载上面推荐的网络抓包工具分析。
三、HTTP响应状态码
HTTP响应状态码一共可分为5类:
100-199:消息状态码,服务器临时响应,表示已收到请求,需要继续处理。
200-299:表示响应成功。
300-399:请求需要重定向。
400-499:发送的请求有问题。
500-599:服务器内部出现错误。