HTTP协议
HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
协议报文解析
HTTP报文大致可分为报文首部和报文主体两部分,两者由一个空行划分。通常,不一定要有报文主体(GET方法就没有报文主体)。
请求行:包含用于请求的方法,请求的URI和HTTP版本。
状态行:包含表明响应结果的状态码,状态短语和HTTP版本。
首部字段:包含表示请求和响应的各种条件和属性的各类首部。
报文主体:应被发送的数据。
实验验证
-
输入URL: http://gaia.cs.umass.edu/ethereal-labs/HTTP-ethereal-file3.html ,使用WireShark抓包。
-
输入过滤表达式
tcp && ip.addr==128.119.245.12 -
观察抓到的数据包
重点关注下面这一部分
352号包
这个包就是客户端发送给服务端HTTPGET请求,由请求行、各种首部字段和空行组成,在GET请求中,没有请求的报文主体部分。
384号包
在TCP协议中,发送双方每发出一个包都要有响应,此包就是服务端对刚刚发送的HTTP的GET包的响应。
386、387、389、390号包
首先,介绍一下WireShark中TCP segment of a ressembled PDU的概念,在TCP协议中,会将一个较大的数据包分成很多个小包发出去,在WireShark中,TCP segment of a ressembled PDU就是被TCP协议所分成的一个个小的数据包。
其实,这四个包都是TCP分成的小包,WireShark在最后一个http包中将所有的包都进行了重新拼包。
查看386号数据包
点击TCP segment data,查看此segment的数据内容,发现其中的数据就是http报文,只不过是服务器返回的http长报文的一部分。
查看390号数据包
- 打开4 Reassembled TCP Segments,可以看到所有被TCP所分成的四个小数据包,正是386,387,389,390号包。
- 查看HTTP数据包的内容
此数据包是服务端返回的HTTP报文,由状态行、首部字段、报文主体和空行组成。通过Line-based text data可以查看具体的报文主体部分的数据。
HTTP方法
GET:获取资源
GET方法用于从服务器端获取数据,包括静态资源(HTML、CSS、JS、Image等等)。
POST:传输实体的主体
POST方法用于向服务器提交数据,比如增删改数据,提交一个表单新建一个用户、或修改一个用户等。
GET主要目的,获取资源;POST主要目的,发送数据对指定资源做处理。
PUT:传输文件
向服务端增加某个资源文件。
DELETE:删除文件
删除指定的资源文件。
在RESTful风格的接口中,PUT、DELETE、GET、POST分别对应对资源的增删查改。
状态码
分类
| 分类 | 描述 |
|---|---|
| 1XX | 信息,服务器收到请求,需要请求者继续执行操作 |
| 2XX | 成功,操作被成功接收并处理 |
| 3XX | 重定向,需要进一步的操作以完成请求(除304) |
| 4XX | 客户端错误,请求包含语法错误或无法完成请求 |
| 5XX | 服务器错误,服务器在处理请求的过程中发生了错误 |
2XX成功
200 OK
表示从客户端发来的请求在服务端被正常处理了,请求资源成功。
3XX重定向
301 Moved Permanently
永久重定向。表示请求的资源已经被永久地转移到了某个新的URI。
例如http协议重定向至https协议。
302 Found
临时重定向。表示请求的资源是临时被分配到一个新的URI中。
304 Not Modified
表示服务器端资源未发生改变,可以直接使用服务器缓存。
4XX
403 Forbidden
资源访问被拒绝。一般没有响应的权限的话会返回该状态码。
404 Not Found
服务器上无法找到请求的资源。
5XX
500 Internal Server Error
服务端出BUG。
403 Forbidden
资源访问被拒绝。一般没有响应的权限的话会返回该状态码。
404 Not Found
服务器上无法找到请求的资源。
5XX
500 Internal Server Error
服务端出BUG。