HTTP 协议主要由三大部分组成:
起始行(start line):描述请求或响应的基本信息;
头部字段(header):使用 key-value 形式更详细地说明报文;
消息正文(entity):实际传输的数据,它不一定是纯文本,可以是图片、视频等二进制数据。
起始行中的请求方法,常用的是GET方法和 POST 方法,如图是 HTTP1.0 和 HTTP1.1 支持的方法清单
方法 | 说明 | 支持的HTTP协议版本 |
---|---|---|
GET | 获取资源 | 1.0、1.1 |
POST | 传输实体主体 | 1.0、1.1 |
PUT | 传输文件 | 1.0、1.1 |
HEAD | 获得报文首部 | 1.0、1.1 |
DELETE | 删除文件 | 1.0、1.1 |
OPTIONS | 询问支持的方法 | 1.1 |
TRACE | 追踪路径 | 1.1 |
CONNECT | 要求用隧道协议连接代理 | 1.1 |
LINK | 建立和资源之家你的联系 | 1.0 |
UNLINE | 断开连接关系 | 1.0 |
请求头常见字段详解:
POST /api/getJoinLogList HTTP/1.1
Host: c.test.u.com
Connection: keep-alive
Content-Length: 123
Accept: application/json
Authorization: Bea
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36
Content-Type: application/json
Origin: http://c.test.u.com
Referer: http://c.test.u.com/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: cna=988cdd4ab81f4788b1fca46a63797c19; UM_distinctid=1877863fe711231-027c276031e813-26031b51-1fa400-1877863fe72caf; CLIENTUUID=73d921f5-a159-4d4b-b6fe-b26511ae7a64; CNZZDATA1277707245=1062308444-1681353490-%7C1683166110; SECKEY_ABVK=EWRBTivu25WYphsmL+cX1vsSQYadEePXnMUdUZym0n8%3D; BMAP_SECKEY=o01JS4LGELQVjBHEcwwYya-JCusBt70GseZPzvZ7_kdFgzv0cDru4oHc9--0q10w79Rmzxsxvd8J4My0Z_YhYBcTfMOg59-M9urqn36JNbgIEcmtS4dgO3hzj_Sq5mVXFsaP2VV1I_acsJrlDIaxLG6rTxPiGnCec8HSTqstp0Q5S5oxXMXcj1wCH1fQGmOx
-
Host:请求头指明了服务器的域名(对于虚拟主机来说),以及(可选的)服务器监听的TCP端口号。如果没有给定端口号,会自动使用被请求服务的默认端口(比如请求一个 HTTP 的 URL 会自动使用80作为端口)
-
Connection: keep-alive:事务完成后是否关闭连接,keep-alive 保持连接,close 是关闭连接。
-
Content-Length:请求正文内容长度
-
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36,用户代理信息,告诉服务器是谁在发请求
-
Origin:http://c.test.u.com:请求站点的服务器名称
-
Referer:当浏览器向 web 服务器发送请求的时候,一般会带上 Referer,告诉服务器该网页是从哪个页面链接过来
-
Accept: application/json, text/plain, /:浏览器能处理的类容( MIME )类型,服务器会选一种类型,通过响应头信息的 Content-Type 字段告诉浏览器,服务器选的是哪种类型
-
Content-Type: application/json:请求正文的编码格式
-
MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准, 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。
文本文件: text/html、text/plain、text/css、application/xhtml+xml、application/xml
图片文件: image/jpeg、image/gif、image/png
视频文件: video/mpeg、video/quicktime
应用程序二进制文件: application/octet-stream、application/zip
-
Accept-Encoding: gzip, deflate, br:浏览器支持的编码格式,一般是压缩算法
-
Accept-Language: zh-CN,zh;q=0.9:浏览器可以处理的语言,这里是中文
响应头常见字段详解
HTTP/1.1 200 OK
Date: Thu, 04 May 2023 08:41:14 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 357
Content-Length: 200
Connection: keep-alive
Cache-Control: private
Content-Encoding: gzip
Vary: Accept-Encoding
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: *
Access-Control-Max-Age: 1000
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: Origin, No-Cache, X-Requested-With,
X-Powered-By: ASP.NET
-
响应状态码: 200 OK,这是 HTTP 响应标头的状态码,它表示着响应成功完成。HTTP 响应标头的状态码见下:
以 2xx 为开头的都表示请求成功响应。
状态码 含义
200 成功响应
204 请求处理成功,但是没有资源可以返回
206 对资源某一部分进行响应,由Content-Range 指定范围的实体内容。
以 3xx 为开头的都表示需要进行附加操作以完成请求
状态码 含义
301 永久性重定向,该状态码表示请求的资源已经重新分配 URI,以后应该使用资源现有的 URI
302 临时性重定向。该状态码表示请求的资源已被分配了新的 URI,希望用户(本次)能使用新的 URI 访问。
303 该状态码表示由于请求对应的资源存在着另一个 URI,应使用 GET 方法定向获取请求的资源。
304 该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。
307 临时重定向。该状态码与 302 Found 有着相同的含义。
以 4xx 为开头的响应结果表明客户端是发生错误的原因所在
状态码 含义
400 该状态码表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。
401 该状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息。
403 该状态码表明对请求资源的访问被服务器拒绝了。
404 该状态码表明服务器上无法找到请求的资源。
以 5xx 为开头的响应标头都表示服务器本身发生错误
状态码 含义
500 该状态码表明服务器端在执行请求时发生了错误。
503 该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求
-
Cache-Control :响应输出到客户端后,服务端通过该报文头属告诉客户端如何控制响应内容的缓存。
常见的取值有private、public、no-cache、max-age,no-store,默认为private。
private:客户端可以缓存,缓存时间为31536000秒(365天)也就是说,在365天内再次请求这条数据,都会直接获取缓存数据库中的数据,直接使用
public:客户端和代理服务器都可缓存
max-age=xxx:缓存的内容将在 xxx 秒后失效
no-cache:需要使用对比缓存来验证缓存数据
no-store:所有内容都不会缓存
-
Access-Control-Allow-Origin: 指定一个来源,它告诉浏览器允许该来源进行资源访问。 否则-对于没有凭据的请求 *通配符,告诉浏览器允许任何源访问资源
-
Content-Type: application/json; charset=UTF-8:正文的编码格式
-
Content-Length:357 正文内容长度