目录
HTTP
HTTP是什么
HTTP(Hyper Text Transfer Protocol)是超文本传输协议。它设计的初衷就是为了传输HTML(超文本标记语言)页面。
Http有哪些特点
- 支持客户端/服务器模式
- 简单快速
- 灵活
- 无链接
- 无状态
一次HTTP请求过程
在Chrome浏览器输入URL后的过程如下:
- 浏览器判断当前输入是否是URL,如果不是URL就执行搜索
- 如果是URL,浏览器首先看是否有域名解析数据缓存,如果没有浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;
- 解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;
- 浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;
- 服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;
- 释放 TCP连接;
- 浏览器渲染HTML页面
Http报文格式
http请求由三部分组成,分别是请求行,请求头和请求体,一般我们会将请求行和请求头统称为Request Headers。下面我们以百度搜索为例看一下具体内容
请求行
请求行包含了请求方法(POST),URL地址(/mcp/pc/pcsearch)以及协议名称和版本号( HTTP/1.1)
POST /mcp/pc/pcsearch HTTP/1.1
请求头
常见的请求头有:
- Accept: 客户端可接受的MIME类型
- Accept-Encoding:客户端能够解码的数据编码格式
- Accept-Charset:客户端能够接受的字符集
- Accept-Language:客户端希望的语言类型
- Content-Length:请求正文长度
- Content-Type:请求正文的MIME类型
- Cookie:
- Host:域名
- Referer:请求来源
- User-Agent:请求客户端信息
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
Content-Length: 56
Content-Type: application/json
Cookie: ; H_PS_PSSID=36427_36544_36503_36454_31254_34813_36166_36073_36520_26350_36468
Host: ug.baidu.com
Origin: https://www.baidu.com
Referer: https://www.baidu.com/s?wd=test&rsv_spt=1&rsv_iqid=0xa180517b00067a4f&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=0&rsv_dl=tb&rsv_sug3=9&rsv_sug1=10&rsv_sug7=100&rsv_btype=i&prefixsug=test&rsp=3&inputT=4022&rsv_sug4=5183
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="102", "Google Chrome";v="102"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "macOS"
请求体
{"invoke_info":{"pos_1":[{}],"pos_2":[{}],"pos_3":[{}]}}
请求方法
请求方法 | 说明 |
GET | 请求参数在拼在连接上,用来获取服务器上的某一资源 |
HEAD | HEAD和GET类似,区别是HEAD响应不包含呈现数据仅响应HTTP头部信息 |
POST | 向服务器提交数据 |
PUT | POST和PUT相似,PUT指定资源存储位置 |
DELETE | 删除某一个资源 |
TRACE | 用于诊断 |
OPTIONS | 用户获取当前URL支持的方法 |
Http版本演进
http1.0
1996年发布Http1.0, 无链接(服务器处理完TCP请求后立即断开链接),无状态(服务器不跟踪每个客户端也不记录过去的请求)
http1.1
http1.1是1997年推出的第二个正式版本,也是目前被广泛使用的版本。Http1.1版本相对于http1.0最大变化就是引入长链接避免建立和释放链接的开销
http2.0
http2.0是2015年发布的第三个版本,引入了二进制数据帧和流概念,其中帧对数据进行顺序标识;因为有了序列,服务器可以并行传输数据。