协议格式
1、请求头:报文主要包含四个部分:
- 请求行(例如
GET /images/logo.gif HTTP/1.1
,表示从/images目录下请求logo.gif) - 请求头(例如
Host: abc.xxx.com;Connection: keep-alive
) - 空行
- 消息数据实体(正文)
注:在HTTP/1.1协议中,所有的请求头,除Host外,都是可选的。
HTTP消息头支持自定义, 自定义的专用消息头一般会添加X-
前缀。
请求行和标题必须以<CR><LF>作为结尾。空行内必须只有<CR><LF>而无其他空格。
根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD
方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT
方法。
2、响应头:报文也是四个部分:
- 状态行(例如
HTTP/1.1 200 OK
,表示从/images目录下请求logo.gif) - 响应头(例如
Date: Thu, 09 Sep…;Content-Type: application/json; charset=utf-8
) - 空行
- 响应正文
状态行格式如下:
HTTP-Version Status-Code Reason-Phrase CRLF
HTTP-Version表示服务器HTTP协议的版本;
Status-Code表示服务器发回的响应状态代码;
Reason-Phrase表示状态代码的文本描述。
示例
请求(Request)示例:
POST /get/your/answer HTTP/1.1
Host: abc.xxx.com
Connection: keep-alive
Content-Length: 123
Accept: application/json, text/plain, */*
Origin: xxxxx(一个有效域名)
User-Agent: Mozilla/5.0 (Linux; Android 5.1.1;……) Chrome/39.0.0.0 Mobile
Content-Type: application/x-www-form-urlencoded
Referer: xxxxx(一个有效的URL)
Accept-Language: zh-CN,en-US;q=0.8
Cookie: cookid=whoami_hahaha
X-Requested-With: (自定义消息头,一般会添加 X- 前缀)
msg=haha&version=1.1.10&type=1234(注意,POST请求的数据在这里)
另,GET请求header头,数据参数不会出现在消息实体中,而是在请求行
中,示例:
GET /your/intf?type=1&show=2 HTTP/1.1(注意,GET请求的数据在这里)
Host: xxx
Connection: keep-alive
……
应答(Response)示例:
HTTP/1.1 200 OK
Date: Thu, 09 Sep 2021 01:11:16 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Server: Apache
tracecode: 12345678
Connection: close
{"result":{"errcode":0,"message":"你瞅啥","data":["abc"]}}
或者
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
……
HTTP版本升级带来的变化
1、在HTTP 0.9和1.0中,TCP连接在每一次请求/回应对之后关闭。
在HTTP 1.1中,引入了保持连线(keep-alive
)的机制,一个连接可以重复在多个请求/回应使用。持续连线的方式可以大大减少等待时间,因为在发出第一个请求后,双方不需要重新运行TCP握手程序。
2、HTTP 1.1还改进了HTTP 1.0的带宽。
例如,HTTP 1.1引入了分块传输编码,以允许传递内容可以在持续连在线被流传输而不必使用到缓冲器。
HTTP管道允许客户端在收到每个回应之前发送多个请求,进一步减少用户感受到的滞后时间。协议的另一个补充是字节服务,允许客户端请求资源的某一部分,服务器仅回应某资源的指明部分。
3、在HTTP1.0,单一TCP连接内仅执行一个“客户端发送请求—服务器发送应答”周期,之后释放TCP连接。
在HTTP1.1优化支持持续活跃连接:客户端连续多次发送请求、接收应答;批量多请求时,同一TCP连接在活跃(Keep-Live)间期内复用,避免重复TCP初始握手活动,减少网络负荷和响应周期。
此外,支持应答到达前继续发送请求(通常是两个),称为“流线化”(stream)。
HTTP状态码
HTTP 状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
1xx:指示信息--表示请求已接收,继续处理。
2xx:成功--表示请求已被成功接收、理解、接受。
3xx:重定向--要完成请求必须进行更进一步的操作。
4xx:客户端错误--请求有语法错误或请求无法实现。
5xx:服务器端错误--服务器未能实现合法的请求。
常见状态代码、状态描述的说明如下:
200 OK:客户端请求成功。
400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
401 Unauthorized:请求未经授权,须和WWW-Authenticate报头域一起使用。
403 Forbidden:服务器收到请求,但是拒绝提供服务。
404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
500 Internal Server Error:服务器发生不可预期的错误。
503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。
网友评论