网络原理-HTTP

1. HTTP是什么

HTTP是一种基于传输层TCP并位于应用层的超文本协议

目前主要使用HTTP1.1和HTTP2.0

2. HTTP协议基本格式

2.1 使用Fiddler抓包进行分析

关于Fiddler:

是一个代理工具,就像高速路上的收费站,不管什么车,只要它从高速路上经过,那么就需要经过收费站对应到网站上,就是不管什么网站,只要有数据的上传下载,那么就会经过Fiddler,此时Fiddler就能够知道所有网站的信息

使用方法:

删除无关抓包信息(ctrl+A,delete) 打开想要抓包的网站 > 蓝色对应的即是request 查看request

在Fiddler的右半边,查看请求和响应

结果:

2.2 分析结果

请求:

GET https://www.baidu.com/ HTTP/1.1

Host: www.baidu.com

Connection: keep-alive

sec-ch-ua: "Chromium";v="122", "Not(A:Brand";v="24", "Microsoft Edge";v="122"

sec-ch-ua-mobile: ?0

sec-ch-ua-platform: "Windows"

DNT: 1

Upgrade-Insecure-Requests: 1

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0

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.7

Sec-Fetch-Site: none

Sec-Fetch-Mode: navigate

Sec-Fetch-User: ?1

Sec-Fetch-Dest: document

Accept-Encoding: gzip, deflate, br

Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6,zh-TW;q=0.5

Cookie: BIDUPSID=E1CBCCEF16E949D2FB803515D5054D7C; PSTM=1697071850; BD_UPN=12314753; sug=0; sugstore=0; BAIDUID=E1CBCCEF16E949D20FBD5E22D2DA6844:SL=0:NR=10:FG=1; ORIGIN=2; bdime=0; H_WISE_SIDS=40009_40204_39661_40207_40215_40266_40295_40290_40287_40285; H_WISE_SIDS_BFESS=40009_40204_39661_40207_40215_40266_40295_40290_40287_40285; newlogin=1; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BA_HECTOR=852l8g05858g0g8h850g0580jpjv5b1iv0e401s; ZFY=3PherofMOQjTtCmZZKg9U85hiYToS99infKIvCcpg:Bc:C; BAIDUID_BFESS=E1CBCCEF16E949D20FBD5E22D2DA6844:SL=0:NR=10:FG=1; H_PS_PSSID=40009_39661_40207_40215_40295_40290_40287_40285_40318_40079_40365_40352_40369_40374_40401_40415

首行:“方法 url HTTP版本” Header:以键值对的形式进行标识,每组属性之间使用\n进行分隔 Body:与Header部分有一个空行,其主体用来传递数据

Body可以为空不为空时,在Header部分会有Content-type属性标识Body的长度

响应:

HTTP/1.1 200 OK

Connection: keep-alive

Content-Security-Policy: frame-ancestors 'self' https://chat.baidu.com http://mirror-chat.baidu.com https://fj-chat.baidu.com https://hba-chat.baidu.com https://hbe-chat.baidu.com https://njjs-chat.baidu.com https://nj-chat.baidu.com https://hna-chat.baidu.com https://hnb-chat.baidu.com http://debug.baidu-int.com;

Content-Type: text/html; charset=utf-8

Date: Tue, 12 Mar 2024 14:57:29 GMT

Server: BWS/1.1

Set-Cookie: H_PS_PSSID=40009_39661_40207_40215_40295_40290_40287_40285_40318_40079_40365_40352_40369_40374_40401_40415; path=/; expires=Wed, 12-Mar-25 14:57:29 GMT; domain=.baidu.com

Traceid: 1710255449131260929015864326830156617079

X-Ua-Compatible: IE=Edge,chrome=1

X-Xss-Protection: 1;mode=block

Content-Length: 406157

......

首行:“版本号 状态码 状态码解释” Header:以键值对的形式进行标识,每组属性之间使用\n进行分隔 Body:与Header部分有一个空行,其主体用来传递数据

Body可以为空不为空时,在Header部分会有Content-type属性标识Body的长度

为什么都会有一个“空行”存在?

因为空行表示当前Header部分结束。

如果没有这个标识,会因为底层使用TCP而发生**“粘包”问题**

3. HTTP请求(Request)

3.1 方法

方法说明支持的版本get获取资源(可以请求缓存,无长度限制)1.0,1.1post提交表单数据,创建更新资源(不可请求缓存,无长度限制)1.0,1.1put传输文件1.0,1.1head获取报文首部1.0,1.1delete删除文件1.0,1.1options查询指定资源针对URL请求支持的方法1.1trace跟踪路径1.1connect连接改为管道方式1.1link请求和服务器建立连接1.0unline断开连接1.0

3.2 GET方法

使用Fiddler进行抓包观察:

特点

首行的第一部分显示为:“GET” URL的query string可以为空,也可以不为空

一个网址中==在问号后面的==就是query string内容

Header部分为键值对结构 body部分为空(所以Header部分没有Content-Length)

3.3 POST方法

使用Fiddler进行抓包观察:

特点

首行第一部分为POST body部分不为空

长度由Header部分的Content-Length决定

数据格式由Header部分的Content-Type决定

URL的query string⼀般为空(也可以不为空)

同GET方法的query string

3.4 GET与POST的区别?

GET请求一般是幂等的 POST请求一般不是幂等的

幂等就是多次请求得到的结果仍然相同

GET请求一般用于获取资源 POST请求一般用于提交数据 GET请求可以被缓存 POST请求不被缓存

因为POST每次获取的数据都是不一样的, 所以不便于缓存

但是GET请求每次都是重复内容, 缓存后能够加快访问速度

GET请求的body一般为空, 使用query string 进行数据传递 POST请求的query string 一般为空, 使用body进行数据传递

以上区别都不是硬性的, 都只是标准中的建议, 实际使用过程中完全可以不遵守这个约定.

可以将GET用于发送数据, POST用于获取数据GET也可是不幂等的

因为,有些网站中, 可以根据用户的历史记录进行实时个性化推荐这同样使用了GET, 但是这个返回的数据每次都是不同的

4. 请求"报头"(Header)

Host: 表示服务器主机的地址和端口 Content-Length: body长度 Content-Type: body数据格式 User-Agent (UA): 标识访问服务器的操作系统, 浏览器的属性信息

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0

(Windows NT 10.0; Win64; x64) : 是操作系统信息Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0: 是浏览器信息

Referer: 表示当前页面由哪个页面跳转过来

Referer: https://www.baidu.com/

Cookie : 用户登录网站的"令牌"

就像以前出入皇宫, 都需要进行严格的查验, 但是只要你拥有皇上钦赐的==“黄马褂”==, 那么就可以畅通无阻网站中的cookie, 就是发挥着记录你登陆网站的信息, 比如用户名和密码等, 下次再进行登录的时候就可以不用输入用户名和密码cookie会保存在用户的本地, 有些cookie是永久性的(除非手动删除), 有些cookie是有有效期的

5. 状态码(Status Code)

5.1 2xx 成功

200 OK:请求成功。201 Created:请求成功并且服务器创建了新的资源。202 Accepted:服务器已接受请求,但尚未处理。204 No Content:服务器成功处理了请求,但没有返回任何内容。

5.2 3xx 重定向

301 Moved Permanently:请求的资源已永久移动到新位置。

就像以前经常换号的那个年代, 一个已经被很多朋友知道的手机号, 不想一一通知他们换了新号, 那就办理一个==“呼叫转移”==服务, 别人还是可以照常打到以前的那个号码, 但是会直接拨通到现在这个新号

302 Found(旧称 Moved Temporarily):请求的资源现在临时从不同的URI响应请求。 304 Not Modified:自从上次请求后,请求的资源未修改过。

5.3 4xx 客户端错误

400 Bad Request:服务器不理解请求的语法。401 Unauthorized:请求要求身份验证。403 Forbidden:服务器拒绝请求。404 Not Found:服务器找不到请求的资源。429 Too Many Requests:用户在给定的时间内发送了太多的请求。

5xx 服务器错误

500 Internal Server Error:服务器遇到错误,无法完成请求。501 Not Implemented:服务器不具备完成请求的功能。502 Bad Gateway:服务器作为网关或代理,从上游服务器收到无效响应。503 Service Unavailable:服务器暂时不可用(超载或停机维护)。504 Gateway Timeout:服务器作为网关或代理,但是没有及时从上游服务器收到请求。

6. 响应正文(body)

​ 最重要的属性是Content-Type

text/html :body数据格式是HTMLtext/css :body数据格式是CSSapplication/javascript :body数据格式是JavaScriptapplication/json :body数据格式是JSON

相关文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。