Http 协议
超文本传输协议。是基于 Tcp 协议之上的一套在浏览器和服务器之间通信的时候相互之间需要遵循的规则
B/S 系统结构之间通信
- 浏览器向服务器发送数据,叫做请求 (request)
- 服务器向浏览器发送数据,叫做响应 (response)
也就说 Http 协议包括
- 请求协议
- 浏览器向 Web 服务器发送数据的时候,这个发送的数据要遵循的一套标准,这套标准中规定了数据的具体格式
- 响应协议
- Web 服务器向浏览器发送数据的时候,这个发送的数据要遵循的一套标准,这套标准中规定了数据的具体格式
请求协议
包含4个部分
- 请求行
- 请求方式
- get
- post
- delete
- put
- head
- options
- trace
- URI
- HTTP协议的版本号
- 请求头
- 请求的主机
- 请求的端口
- 浏览器信息
- 平台信息
- cookie 信息
- ...
- 空白行
- 分割请求头和请求体
- 请求体
- 请求的具体内容
HTTP 协议的具体报文
Accept: application/json, text/javascript, */*; q=0.01
Accept-Encoding: gzip, deflate, br
Accept-Language: en,zh-CN;q=0.9,zh;q=0.8
Connection: keep-alive
Cookie: BIDUPSID=598E5A2D6247C9A5E83FA993B04B5245; PSTM=1628247003; BAIDUID=598E5A2D6247C9A543A937AFF3775B67:FG=1; __yjs_duid=1_95ce853d7ec26faf0065b828e48082bb1628247010984; H_WISE_SIDS=110085_127969_131862_176399_177371_177895_178384_178631_179350_179451_179620_180276_181483_181536_181588_182237_182530_182847_183035_183330_183750_184010_184198_184319_184440_184560_184736_184794_184894_184894_185029_185242_185517_185752_185880_186317_186411_186595_186716_186843_187022_187042_187052_187085_187194_187214_187292_187356_187432_187495_187651_187670_187680_187726_187926_187928_187962_188130_188182_188353_188427_188614_188723_188733_188744_188830_188843_188871_188900_188934_188994_189269_189297_189325_189390_8000086_8000129_8000135_8000150_8000154_8000164_8000165_8000171_8000178_8000176_8000186_8000189; BD_UPN=12314753; sug=3; sugstore=0; ORIGIN=2; bdime=0; H_PS_PSSID=36068_36177_36056_36005_36088_36166_34584_36142_36120_36192_35978_36268_36125_36257_26350_35869_36092_36061; av1_switch_v3=0; ariaDefaultTheme=undefined; RT="z=1&dm=baidu.com&si=djxnxuiwl4a&ss=l1svelie&sl=3&tt=2cy&bcn=https%3A%2F%2Ffclog.baidu.com%2Flog%2Fweirwood%3Ftype%3Dperf&ld=2zwm&ul=458q&hd=459b"; delPer=0; BD_CK_SAM=1; PSINO=6; baikeVisitId=2cc43b31-1d8e-4850-aef3-5c49fd4ec81c; H_PS_645EC=3a34D%2FFqQec8ys0PIqmqlXqQ2Z04saWXafc3r7zlDtKK65GjMln%2F3i2hrxU; BA_HECTOR=a12184a12184a421uk1h554n70r
Host: www.baidu.com
Referer: https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E5%93%94%E5%93%A9%E5%93%94%E5%93%A9&fenlei=256&rsv_pq=ce88548800081b2f&rsv_t=391eNQGEN9cf6XkwXj4QbHhD34IzVZ2bPptc4%2FEZazgzgpoq2PSrVvmMNi8&rqlang=cn&rsv_enter=1&rsv_dl=ib&rsv_sug3=11&rsv_sug1=9&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=2136&rsv_sug4=3450
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="99", "Google Chrome";v="99"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-origin
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36
响应协议
包含4个部分
- 状态行
- 第一部分:协议的版本号 (HTTP/1.1)
- 第二部分:状态码(HTTP协议中规定的响应状态号)
- 200:请求成功,正常结束
- 404:表示访问的资源不存在,要么是路径写错了,要么是路径写对了,但是服务器中没有对应的资源
- 405:前端发送的请求方式跟后端的处理方式不同,(后端处理该请求使用的 post 的方式,但是前端却使用 get 访问)
- 500:表示服务器端的错误异常,一般认为是服务器端的错误导致的
- 响应头
- 响应的内容类型
- 响应的内容长度
- 响应的时间
- ...
- 空白行
- 用来分割响应头和响应体
- 响应体
- 具体的响应内容
HTTP/1.1 200 // 状态行
Content-Type: text/html;charset=UTF-8 // 从这里到空白行之前的都是响应头
Conetent-Length: 160
Date: Mon, 08 Nov 2022 13:19:32 GMT
Keep-Alive: timeout=20
Connection: keep-active
// 空白行
<!doctype html> // 之后的内容都是响应体
<html>
<head>
<title>title</title>
</head>
<body>
Hello
</body>
</html>
get 请求和 post 请求有什么不同的地方
- get
- get请求会将数据携带到 URL 当中,在 URL 的最后加一个 ? 后面带上数据
- get请求只能发送普通的字符串,而且发送的字符串长度限制的因为浏览器不同而不同,没有明确的规范
- 适合用来获取数据
- post
- post 请求的数据会将数据带到请求体当中,不会显露在 URL 当中
- post 请求可已发送任何的数据,包括字符,流媒体等信息:视频,声音,图片,post 请求可以发送大量的数据,理论上没有限制
- 适合向服务器端发送数据