HTTP 的 header 协议

2022-12-04  本文已影响0人  后厂村村长

header 协议格式

1、请求头:报文主要包含四个部分:

注:在HTTP/1.1协议中,所有的请求头,除Host外,都是可选的。
HTTP消息头支持自定义, 自定义的专用消息头一般会添加X-前缀。
请求行和标题必须以 CRLF(回车换行符) 作为结尾。空行内必须只有 CRLF 而无其他空格。

根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT方法。

2、响应头:报文也是四个部分:

状态行格式如下:
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:服务器端错误--服务器未能实现合法的请求。

30x-跳转示例:

header("HTTP/1.1 301 Moved Permanently");
header('Location:新的url地址');
上一篇下一篇

猜你喜欢

热点阅读