HTTP协议,特点,组成,运行流程。浏览器抓包查看百度官网,get传参字段解析

1. HTTP的特点

  • 无状态协议:HTTP自身不对请求和响应之间的通信状态进行保存。这意味着如果后续处理需要前一个请求的信息,那么这个信息必须重新发送,服务器不会记住之前的交互。
  • 无连接:默认情况下,HTTP请求一次交互后,会关闭TCP连接,这样可以更有效地使用服务器资源。虽然HTTP/1.1支持持久连接(也称为HTTP Keep-Alive),但本质上HTTP仍然是无连接的。
  • 可扩展性:HTTP允许传输任何类型的数据对象,只要发送方和接收方知道如何处理这些数据。由于其扩展性,随着时间的推移,HTTP已经支持了诸如安全性、压缩等多种功能。

2. HTTP的基本组成

请求(Request)

  • 方法:HTTP支持多种请求方法,最常见的包括GET(请求读取URL),POST(向URL提交数据),PUT(替换指定的URL的所有当前表示的数据),DELETE(删除指定资源)等。
  • URL:统一资源定位符,指向你想要访问的资源。
  • HTTP版本:表明客户端使用的HTTP协议版本,如HTTP/1.1。
  • 头部字段:包含请求的元数据,如用户代理、接受的内容类型、认证信息等。
  • 主体:不是所有请求都有主体,通常POST和PUT请求包含主体,用于发送数据到服务器。

响应(Response)

  • 状态码:服务器用来告知客户端请求是否成功,以及不成功的原因。常见的状态码有200(成功),404(未找到资源),500(服务器错误)等。
  • HTTP版本:表明服务器使用的HTTP协议版本。
  • 头部字段:包含响应的元数据,如内容类型、内容长度、服务器信息等。
  • 主体:通常包含服务器返回的实际数据。

3.运作流程

  1. 建立连接:客户端(例如,浏览器)通过TCP/IP协议建立到服务器的连接。
  2. 发送HTTP请求:客户端向服务器发送一个HTTP请求,包括方法、URL、协议版本、头部字段和可能的主体内容。
  3. 服务器处理请求:服务器接收到请求后,解析请求内容,并进行相应处理。
  4. 发送HTTP响应:服务器处理完成后,向客户端返回一个HTTP响应,包含状态码、协议版本、响应头部、和响应主体。
  5. 关闭连接:在HTTP/1.0中,每个响应完成后服务器都会关闭连接。在HTTP/1.1中,若使用Keep-Alive,则连接可以保持开放,用于后续请求。

HTTP请求组成部分

  1. 请求行(Request Line)

    • HTTP方法:如GET、POST、PUT、DELETE等。
    • 资源路径:请求的资源URL路径,通常以斜杠(/)开始。
    • HTTP版本:使用的HTTP协议的版本,如HTTP/1.1。
  2. 请求头部(Request Headers)

    • Host:指定请求的服务器域名和端口号。
    • User-Agent:发出请求的浏览器或客户端的标识。
    • Accept:客户端能够处理的媒体类型。
    • Accept-Encoding:客户端能够处理的压缩格式。
    • Accept-Language:客户端偏好的语言。
    • Content-Type:请求体的媒体类型(如果请求体存在)。
    • Content-Length:请求体的长度(如果请求体存在)。
    • Connection:连接管理选项,如keep-alive
    • Cache-Control:缓存指令。
    • Authorization:认证信息,如用户名和密码。
  3. 空行(Empty Line)

    • 请求头部和请求体之间的分隔符。
  4. 请求体(Request Body)

    • 可选部分,取决于HTTP方法和请求的上下文。
    • 可以包含表单数据、JSON数据、文件等。

HTTP响应组成部分

  1. 状态行(Status Line)

    • HTTP版本:响应所使用的HTTP协议版本。
    • 状态码:表示请求处理结果的数字码,如200表示成功,404表示未找到。
    • 状态消息:状态码的简短描述。
  2. 响应头部(Response Headers)

    • Date:响应生成的时间。
    • Server:服务器软件的名称和版本。
    • Content-Type:响应体的媒体类型。
    • Content-Length:响应体的长度。
    • Content-Encoding:响应体使用的压缩格式。
    • Cache-Control:缓存指令。
    • Connection:连接管理选项。
    • Set-Cookie:设置客户端的cookie。
    • Expires:响应的过期时间。
  3. 空行(Empty Line)

    • 响应头部和响应体之间的分隔符。
  4. 响应体(Response Body)

    • 服务器返回的数据,可以是HTML文档、图片、JSON数据等。

浏览器抓包查看www.baidu.com数据包GET传参实例

请求标头实例及字段分析  

GET / HTTP/1.1
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
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cache-Control: max-age=0
Connection: keep-alive
Cookie: BIDUPSID=DCC9CCADE41308E1E61424855D9E491F; PSTM=1706873358; BAIDUID=F7122460F9246D921ED07AA88A1CE274:FG=1; BAIDUID_BFESS=F7122460F9246D921ED07AA88A1CE274:FG=1; BDUSS=AzaXNQek5BUmtEenF6bkgwa0g0dkhOOHZMdTFuVjJxM2E4cHV3Q25uS2xJd0JtSVFBQUFBJCQAAAAAAQAAAAEAAAD3RpYrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKWW2GWllthlaH; BDUSS_BFESS=AzaXNQek5BUmtEenF6bkgwa0g0dkhOOHZMdTFuVjJxM2E4cHV3Q25uS2xJd0JtSVFBQUFBJCQAAAAAAQAAAAEAAAD3RpYrAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKWW2GWllthlaH; BAIDU_WISE_UID=wapp_1713272051896_373; ZFY=VY3D86T8ILt1R2IN3SGhqKJNtXFwfBBoLK0y6briYlc:C; sugstore=0; COOKIE_SESSION=564275_0_1_4_0_1_1_0_1_1_0_0_0_0_0_0_0_0_1713626500%7C4%230_0_1713626500%7C1; RT="z=1&dm=baidu.com&si=95af8b75-167b-4964-89f6-a86f32e06035&ss=lvpz4djb&sl=7&tt=5xt&bcn=https%3A%2F%2Ffclog.baidu.com%2Flog%2Fweirwood%3Ftype%3Dperf&ld=12f3&ul=1lrcc&hd=1lrdt"; H_PS_PSSID=40299_40080_60175; BD_UPN=12314753; BA_HECTOR=a52l0h20a5al2h848l852k2165anfd1j3g9191s; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598
Host: www.baidu.com
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/124.0.0.0 Safari/537.36 Edg/124.0.0.0
sec-ch-ua: "Chromium";v="124", "Microsoft Edge";v="124", "Not-A.Brand";v="99"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
  1. GET / HTTP/1.1

    • 这是HTTP请求的开始行,包括方法(GET),请求URI(/),和HTTP版本(HTTP/1.1)。
    • GET:用于请求从指定资源获取数据。
    • /:表示根目录,即请求的是网站的主页。
    • HTTP/1.1:使用的HTTP协议版本,影响连接管理、缓存等行为。
  2. 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
    • 说明客户端愿意接受哪些类型的响应数据。权重通过q参数表示,越高代表优先级越高。
  3. Accept-Encoding

    • 示例值:gzip, deflate, br, zstd
    • 告诉服务器客户端支持哪些内容编码,服务器可以据此选择一个合适的压缩算法减少传输的数据量。
  4. Accept-Language

    • 示例值:zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
    • 指定客户端优先接受的语言,有助于服务器返回最合适的本地化内容。
  5. Cache-Control

    • 示例值:max-age=0
    • 控制缓存的行为,max-age=0通常用于强制服务器返回最新的响应,而不使用缓存。
  6. Connection

    • 示例值:keep-alive
    • 控制当前的网络连接。keep-alive表示希望保持连接打开,以便继续通过同一连接发送或接收后续的请求和响应。
  7. Cookie

    • 示例值:包含多个键值对,用于存储用户会话信息或识别用户身份。
    • 注意:Cookies可以包含敏感信息,必须注意安全设置,如SecureHttpOnly标志。
  8. Host

    • 示例值:www.baidu.com
    • 指定请求的服务器。在互联网上,同一个物理服务器可能托管多个域名,Host头部帮助服务器区分具体的域名服务。
  9. Sec-Fetch-Dest, Sec-Fetch-Mode, Sec-Fetch-Site, Sec-Fetch-User

    • 这些是一组新引入的头部,用于描述请求的模式和上下文,帮助服务器做出更安全的响应决策。
  10. Upgrade-Insecure-Requests

    • 示例值:1
    • 告诉服务器客户端支持更安全的HTTPS协议,希望请求能通过HTTPS进行。
  11. User-Agent

    • 示例值:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0
    • 包含了客户端浏览器的标识信息,包括设备类型、操作系统、浏览器版本等。
  12. sec-ch-ua, sec-ch-ua-mobile, sec-ch-ua-platform

    • 这些头部提供了更详细的浏览器和平台信息,例如使用的浏览器是基于Chromium还是其他,以及是否为移动设备等。

响应标头实例及字段分析

HTTP/1.1 200 OK
Connection: keep-alive
Content-Encoding: gzip
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: Mon, 06 May 2024 00:28:28 GMT
Isprivate: 1
Server: BWS/1.1
Set-Cookie: H_PS_PSSID=40299_40080_60175; path=/; expires=Tue, 06-May-25 00:28:28 GMT; domain=.baidu.com
Traceid: 1714955308347687015418416753043011705355
X-Ua-Compatible: IE=Edge,chrome=1
X-Xss-Protection: 1;mode=block
Transfer-Encoding: chunked

1.状态行 (Status Line)

  • HTTP/1.1 200 OK
  • 表示使用HTTP/1.1协议,状态码200意味着请求成功处理。

2. 响应头部字段 (Response Headers)

通用和连接管理

  • Connection: keep-alive
    • 指示连接应保持活动状态,允许在同一连接上发送多个请求和响应,有助于减少延迟。

内容编码和类型

  • Content-Encoding: gzip
    • 表示服务器使用gzip压缩响应体,用于减少数据传输量。
  • Content-Type: text/html; charset=utf-8
    • 指定响应内容类型为HTML,字符集为UTF-8,确保客户端正确解析HTML文档。

安全和政策

  • Content-Security-Policy
    • 设置内容安全策略,限制资源(如框架)可以加载自哪些源。此设置有助于防止跨站脚本攻击(XSS)。
    • 例:frame-ancestors 'self' https://chat.baidu.com ...
    • 这规定了哪些域可以嵌入当前页面,防止点击劫持。
  • X-Ua-Compatible: IE=Edge,chrome=1
    • 为兼容性提供指令,指示IE使用最新的Edge渲染引擎。
  • X-Xss-Protection: 1; mode=block
    • 启用浏览器内置的反XSS过滤器,若检测到跨站脚本攻击则阻止页面加载。

会话和追踪

  • Set-Cookie
    • 设置一个或多个Cookie,用于客户端和服务器之间的状态管理。
    • 例:H_PS_PSSID=...; expires=Tue, 06-May-25 00:28:28 GMT; domain=.baidu.com
    • 此Cookie有一个过期时间和适用域名,用于跟踪会话状态或用户偏好。
  • Traceid
    • 提供请求的追踪ID,用于服务器日志记录和问题诊断。
    • 例:1714955308347687015418416753043011705355

其他

  • Date
    • 标记响应生成的日期和时间。
    • 例:Mon, 06 May 2024 00:28:28 GMT
  • Server: BWS/1.1
    • 指示响应是由哪个Web服务器软件生成的,这里是Baidu Web Server版本1.1。
  • Transfer-Encoding: chunked
    • 指示响应数据采用分块传输编码方式,用于动态生成的内容或未知大小的数据流。

自定义或不常见

  • Isprivate: 1
    • 可能是一个自定义字段,用于某些内部处理或指示响应的特定属性,例如表示响应内容是私有的。

 

 

 

 

 

 

  • 34
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值