1.HTTP:HyperText Transfer Protocol(超文本传输协议)
2.HTTP协议的格式,一般包括4项内容(Request和Response相似,此处以Reqeust为例):
1)Request Line
2)Request Header
3)Blank Line
4)Request Body
3. 分别介绍4项内容:以google 中输入http后,点击search后,查看network中信息为例说明。
1) Request Line(一般基础进行)
Request URL: https://www.google.com/search?q=http&rlz=1C1GCEV_enHK975HK975&oq=http&aqs=chrome..69i57j0i433i512j0i512l8.6507j0j15&sourceid=chrome&ie=UTF-8
Request Method: GET
Status Code: 200 OK
Remote Address: 10.142.4.67:8000
Referrer Policy: strict-origin-when-cross-origin
包含了URL,Method,StatusCode,Remote Address等。
2)Request Header(头部信息)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate, br
Accept-Language: en-GB,en-US;q=0.9,en;q=0.8
Connection: keep-alive
Cookie: AEC=AakniGMsBJSztCrW1DFHaO36yiND2jgK1461JsRvVHHsDOYVgy-i415RxI0; SID=JghWCfZEq1juDO38oNqmjlt6RNlD_Aix7h34R7iSHIIY_YIfGq7DGKbriF-9ZlkvsOnotQ.; __Secure-1PSID=JghWCfZEq1juDO38oNqmjlt6RNlD_Aix7h34R7iSHIIY_YIfLc8_ZexCma2e1zmEhBklpg.; __Secure-3PSID=JghWCfZEq1juDO38oNqmjlt6RNlD_Aix7h34R7iSHIIY_YIfXIRTmKkeKBgCnJcDVnXbYA.; HSID=AtpRiJXb5GNpsxVCq; SSID=Ael8470hqtZDmWkst; APISID=-93LsFMI-7n7P1Tz/AowBmHZsVYMOU6zKx; SAPISID=F6Tdv96Vrf6BQ728/AKWGVeCzYjlZ1FING; __Secure-1PAPISID=F6Tdv96Vrf6BQ728/AKWGVeCzYjlZ1FING; __Secure-3PAPISID=F6Tdv96Vrf6BQ728/AKWGVeCzYjlZ1FING; 1P_JAR=2022-04-24-01; NID=511=jwMwMgs6I6iLH8x7Ay5cZSeWycnmmZ5ihbJcW5-tdIgmt8V55yDmqZLlJ1iDioimVO_Lmgsw-px-OjPHsWixJgLq9iJ1Qp0Vz-_rs_4tigJKm4HXtssmmHronpXQzfGeh7xdodFETH0tHBnrY6Mvga-3Rdnt1-Ejh_mslEB3xMhg35-2H5xYmKq4ufOTBzn3SVRKAPKVVMVyRgrHknYN6NeN3rQnREERX_xYyDM3b_30vX1RVh7zFVcNbpTUva4; SIDCC=AJi4QfFZJeKOUDyNAYa-nwFBK87B4tGLA_XxN3Jbs4_xczGcdt0tptCCKBhpuea30yowDPwDnw; __Secure-3PSIDCC=AJi4QfGv13nqDPLL5ssML3q1kbt_hkNZ47laVfgQpsIxvoF93dWcHQTPWw2WApBBY-Vr53BVR5M
Host: www.google.com
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36
X-Client-Data: CI+2yQEIo7bJAQjEtskBCKmdygEImozLAQiWocsBCJihywEI6/LLAQie+csBCOeEzAEIpY7MAQiZj8wBCJmhzAEIz6LMAQjeoswBCIGkzAEIsqTMAQiCp8wBGKupygE=
Decoded:
message ClientVariations {
// Active client experiment variation IDs.
repeated int32 variation_id = [3300111, 3300131, 3300164, 3313321, 3327514, 3330198, 3330200, 3340651, 3341470, 3342951, 3344165, 3344281, 3346585, 3346767, 3346782, 3346945, 3346994, 3347330];
// Active client experiment variation IDs that trigger server-side behavior.
repeated int32 trigger_variation_id = [3314859];
}
包含了Connection:keep-alive(长连接),cookie(身份信息),Accept-Lanaguage,user-Agent(用户的浏览器信息)等
3.Blank Line
一般只是空格和回车。主要功能是让reqeust header和request body区分开,让浏览器/服务器知道哪开始是header,哪开始是body。
4)Request Body
请求中的数据payload。例如,请求中有用户名id=abc和密码pw=123,则id=abc&pw=123被定义在此body中。
4.请求后,常用的返回的状态码
200:表示OK(请求和返回,都成功)
404:没有找到资源(即后台没有定义该请求的url,需要前端开发向后端开发确认url是否正确)
500:内部错误(请求被后台接收到了,但后台因某种原因,后台报错了)
note:实际项目开发时,根据项目需要,有时会自定义状态码,如自定义状态码20001,表示某种异常,并返回异常原因信息等。
5. HTTP一般流程
1)建立连接
- DNS解析。需要将域名如www.baidu.com,解析为IP如10.142.5.135(提供给Socket建立连接用)
- 建立Socket连接,Socket的建立需要IP地址和端口Port
- 如果请求的URL没有指定端口号,那就用默认端口号port=80, 因为80为HTTP默认端口号
2)发送请求(Request)
主要使用Get,Post,Put等方法,由客户端浏览器,向服务器发送请求。
3)获得响应(Response)
获得响应数据,可能是文字,图片,语音,视频的数据
4)关闭连接
HTTP请求结束后要关闭连接,有助于其他用户请求,避免请求阻塞等