HTTP协议基本格式
HTTP即HyperText Transfer Protocol(超文本传输协议),HTTP基于TCP/IP协议传输数据。
目录
- Chrome抓包
- Fiddler代理抓包
- HTTP协议格式
- HTTP请求
- 首行
- URL
- 方法
- Get方法
- Post方法
- Get与Post的区别
- 请求报头中的属性
- Cookie和Session
- Cookie与Session的区别
- HTTP响应
- HTTP状态码
- HTTP响应报头和正文
- HTTP响应报头
- HTTP响应正文
Chrome抓包
注:Chrome浏览器或Chrome内核浏览器可用(如Edge, Firefox)
- 在目标网页打开开发者工具:
- 点击网络(Network):
此时就可以看到目标网页的所有请求。 - 查看请求和响应:
Fiddler代理抓包
浏览器自带抓包工具功能有限,实际开发过程中往往会选择一些代理工具进行抓包。
常见的抓包工具主要有:Charles、Wireshark、Tcpdump、Fiddler等。对于初学者来说,使用简单且免费的Fiddler(Fiddler只适用于Windows系统)即可。
接下来Fiddler就可以进行抓包了。
例如抓取哔哩哔哩的HTML页面请求:
首先打开bilibili网站,要抓的包就是:
这么多包如何确定我们要找的是哪一个?
- 首先看URL,也就是目标域名。
- 不同类型的包颜色不同,这里抓的是HTML页面的包,因此找蓝色的。
- 看body大小,请求的HTML页面,body大小一般很大。
找到目标后双击即可看到详情:
HTTP协议格式
HTTP是一种请求——响应式协议,由客户端(即浏览器)发起请求,服务器返回响应。可以通过抓包来分析HTTP协议的请求和响应细节以及特点。
抓包工具可以使用Chrome开发者工具或者Fiddler。
HTTP请求
对于Get请求,一般没有body,但是Post请求一般有body,在空行后的部分都是body内容。
例如一个Post请求:
Get请求中虽然可以放body,但一般不建议,某些服务器或代理会忽略或删除get方法中的body,某些客户端不支持get请求添加body等。因此要携带body最好是使用post请求。
首行
首行包括方法、URL以及版本号。
URL
URL(Uniform Resource Locator),即统一资源定位符,俗称“网址”。互联网上的每一个文件都有唯一的一个URL。
一个URL通常包含:协议、主机、端口、路径、查询参数、锚点。
方法
HTTP协议常用方法有:
Get方法
GET 是最常用的 HTTP 方法,用来获取服务器的某个资源。抓取的包大多数都是Get请求。
以百度首页为例:
特点:
- URL中的查询参数可以为空,也可以不为空
- Header中的若干属性以键值对的形式存在
- Get请求中的body一般为空
Post方法
特点:
- URL中的查询参数一般为空
- Header中的若干属性以键值对的形式存在
- body 部分一般不为空
- body 内的数据格式通过 header 中的 Content-Type 指定
- body 的长度由header 中的 Content-Length 指定
Get与Post的区别
get与post没有本质区别,get和post一般可以互换,但二者有些不同:
- get一般用于获取,post一般用于提交
- get方法通过查询参数获取数据,body一般为空
- post方法通过body提交数据,查询参数一般为空
- get一般是幂等的,post一般不是幂等的(每次相同请求返回同一个响应就视为幂等)
- get可以缓存(因为幂等性),post不可以缓存
请求报头中的属性
- Host:表示服务器主机的地址和端口
明明URL中已经包含了服务器的地址和端口,为什么还要在设置一个Host呢?
其实一个服务器是可以托管多个网站的,这些网站共享同一个IP地址和端口号,但是他们有不同的域名,这时Host的作用就体现出来了。Host属性往往使用域名作为字段,这样便于服务器识别。
例如网站A:www.A.com和网站B:www.B.com由同一个服务器托管,那么他们的URL中的ip地址和端口号就相同。无论是A网站还是B网站发起请求,通过DNS协议进行域名解析后会得到同一个ip地址和端口号,此时就需要Host属性来识别是A网站的请求还是B网站的请求。
-
User-Agent:表示浏览器或操作系统的一些信息,包括类型、版本、语言等。
User-Agent的作用是让服务器能够识别客户端的类型和能力,从而返回合适的响应。
例如4399小游戏,需要Flash插件才能正常运行,但是目前浏览器禁止自带Flash功能,因此打开一个小游戏后会显示:
同时User-Agent也用来表示客户端是手机端还是网页端,这也解释了为什么同一个网站,用手机打开和用电脑打开时,页面布局什么的不尽相同。 -
Content-Length:表示body的数据长度
-
Content-Type:表示body中的数据格式
Content-Type有多种类型,一般分为如下几类:-
text/plain,表示纯文本类型。它会把表单中的数据直接放到请求体中。这种格式适合于传输简单的文本数据。
-
以application开头的,表示应用类型。如:application/json表示JSON数据格式,application/x-www-form-urlencoded表示表单数据格式。
-
以mutipart开头的,表示多部分类型。如:multipart/form-data表示表单数据格式。
application/x-www-form-urlencoded是默认的表单数据格式,适用于大多数场景,但是不能上传文件和二进制数据。
multipart/form-data是一种多部分数据格式,它把表单中的数据分为多个部分,每个部分用特定的符号分隔开,每个部分都可以有自己的Content-Type和编码方式。可以上传文件和二进制数据。
multipaty/form-data会占用更多的资源和带宽,因此只有上传文件或二进制数据时,才使用multipart/form-data,其他情况都使用application/x-www-form-urlencoded。
-
-
Referer:表示页面是从哪一个页面跳转过来的。
例如从百度跳转到B站,抓到的包就是:
这里的refer即表示了B站是从百度跳转过来的。
当我们在搜索引擎上搜索时,总会出现广告,这些都是广告商投递的,广告商通过搜索提高曝光度:
广告商通过用户点击链接来确认成交量。但是广告商不会只在一个搜索引擎上投递广告,因此refer就可以帮助确定来源。
Cookie和Session
HTTP协议是无状态协议。无状态指的是HTTP服务器没有记忆功能,每次客户端向服务器发送请求,服务器都无法确定这个请求和之前的请求是否有关,例如上某宝网购,虽然一开始登录成功,当我选定某个商品后,准备进行后续操作时,服务器并不能确定这个请求是否关联到之前的请求。之所以这样设计是为了简化服务器的处理逻辑,节省网络传输的成本,但是这样并不便于用户操作,因此引入Cookie和Session来弥补这部分的缺陷。
- Cookie
Cookie是一种在客户端存储用户信息的机制,客户端发送请求后,服务器除了返回响应外,还会返回一个Cookie给客户端,Cookie中存储了当前客户端的状态信息,例如登录状态等。当客户端下次发送请求时,会一并把Cookie发过去,服务器就可以根据Cookie来确定客户端的状态。 - Session
Cookie中往往会包含一些敏感信息,这些信息在传输过程中是透明的,并不安全,容易被盗用篡改。Session是一种更为安全的方法。
Session是一种在服务器存储用户信息的机制,客户端发送请求后,服务器除了返回响应外,同时会生成Cookie信息和一个Session ID,服务器把这个Session ID一并返回客户端,后续客户端发起请求时,会一并把Session ID发过来,服务器通过这个Session ID就可以找到对应的Cookie信息,从而确定客户端的状态。
Cookie与Session的区别
- 存储位置不同:Cookie存储在客户端,Session存储在服务器。
- 安全性不同:Cookie不安全,Session相对安全。
- 性能不同:Cookie占用客户端资源,影响浏览体验;Session占用服务器资源,影响性能。
- 有效期不同:Cookie可以设置有效期,过期自动删除;Session没有设置过期时间时,浏览器关闭即删除。
HTTP响应
HTTP状态码
- 常见状态码有:
状态码 | 含义 |
---|---|
200 | OK(正常) |
404 | Not Found(没有找到资源) |
403 | Forbidden(访问被拒绝) |
405 | Method Not Allowed(方法不支持) |
500 | Internal Server Error(服务器内部错误) |
502 | Bad Gateway(错误网关) |
504 | Gateway Timeout(响应超时) |
302 | Move temporarily(临时重定向) |
301 | Moved Permanently(永久重定向) |
- 状态码小结:
HTTP响应报头和正文
HTTP响应报头
响应报头的常见属性有:
- text/html,这种格式把响应数据转化为HTML格式文档,这种格式适用于返回网页数据,但是需要额外设置编码格式。
例如:Content-Type=text/html; charset=utf8 - text/xml,把响应数据转换为xml格式文档,这种格式适用于返回结构化数据,同样需要设置编码格式或者在xml文档中声明编码格式。
- 以image开头的,表示图像类型,将响应数据转化为图片显示。
除此之外还有很多响应属性例如:text/css、text/javascript等。
HTTP响应正文
响应正文的具体格式取决于Content-Type属性。
相关文章:

HTTP协议基本格式
HTTP即HyperText Transfer Protocol(超文本传输协议),HTTP基于TCP/IP协议传输数据。 目录 Chrome抓包Fiddler代理抓包HTTP协议格式HTTP请求首行URL方法Get方法Post方法Get与Post的区别 请求报头中的属性Cookie和SessionCookie与Session的区别…...
在 ubuntu 22.04 上配置界面服务器 xrdp
文章目录 图形界面解决方案VNCXRDP XRDP 实例安装和配置使用 XRDP 使用原理谁更快 : X11转发 > XRDP > VNC 图形界面解决方案 1. VNC 2. XRDP 3. X11 ssh : // https://blog.csdn.net/u011011827/article/details/131065690VNC 外部开放端口 用的 是 5901-5910 桌面用…...

53、基于51单片机蓄电池充电器过充过放保护LCD液晶屏显示系统设计(程序+原理图+PCB源文件+参考论文+参考PPT+元器件清单等)
方案选择 单片机的选择 方案一:AT89C52是美国ATMEL公司生产的低电压,高性能CMOS型8位单片机,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元&…...

【C/C++】详解 函数重载和应用
创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!! 主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步! 🔥c系列专栏:C/C零基础到精通 🔥 给大…...

WPF开发txt阅读器4:字体控件绑定
文章目录 控件折叠字体尺寸绑定选择字体字体的中文名称 txt阅读器系列: 需求分析和文件读写目录提取类💎列表控件与目录 控件折叠 作为一个txt阅读器,至少能够设置文字字体、尺寸,段落行间距等,还得有护眼模式等一系…...
CoreDX DDS应用开发指南(8)开发订阅应用程序
11 应用数据类型Application Data Types 11.1 概述 每个DDS主题都包含一个且仅包含一个数据类型,这是在主题上进行通信时使用的用户定义的数据类型。在大多数情况下,应用程序开发人员以数据定义语言(DDL)格式定义这些DDS数据类型。编译器用于将这些DDL类型定义转换为适当的…...

基于Python的接口自动化-读写配置文件
目录 引言 configparser模块功能介绍 引言 在编写接口自动化测试脚本时,有时我们需要在代码中定义变量并给变量固定的赋值。为了统一管理和操作这些固定的变量,咱们一般会将这些固定的变量以一定规则配置到指定的配置文件中,后续需要用到这…...

useEffect的基础知识和底层机制
useEffect 是 React 中一个重要的 Hook,用来处理组件的副作用操作。它的基础知识包括两个方面:执行时机和参数。 执行时机: useEff ect 的执行时机包括两种情况: 组件挂载时,即第一次渲染之后。组件更新时ÿ…...

chatgpt赋能python:Python中如何加空格
Python中如何加空格 Python是一门广泛应用于科学计算、数据分析、人工智能、Web开发等领域的高级编程语言。在Python编程过程中,经常需要使用到空格,以实现程序的格式化和美观,同时也有助于提高代码的可读性和可维护性。本文主要介绍Python中…...

软件测试之路已不再是坦途
去年下半年才跳了槽,过程非常顺利,没有经历大家所说的工作荒的境地,所以一直没有直观地感受到软件测试就业形势到底有多严峻。 近来看到一些机构频频发出某某测试员在糟糕的就业形势下逆袭拿下XXW的某厂offer,然后推荐测试进阶课…...

扫雷——C语言实现
扫雷 文章目录 扫雷实现代码什么是扫雷基本功能实现显示选择菜单定义几个二维数组?确定数组大小初始化数组布置地雷打印展示数组排查地雷记录指定区域周围地雷的个数判断排雷成功排查地雷实现代码 基本功能的实现代码和效果展示 拓展功能简化游戏界面改变字体颜色实…...

CSS基础学习--6 CSS Text(文本)
一、文本颜色 color:red; 颜色属性被用来设置文字的颜色。 颜色是通过CSS最经常的指定: 十六进制值 - 如: #FF0000一个RGB值 - 如: RGB(255,0,0)颜色的名称 - 如: red body {color:red;} h1 {color:#00ff00;} h2 {color:rgb(255,0,0);} 二、文本的…...

高精度电压源的应用场合有哪些
高精度电压源是一种能够提供恒定、稳定电压输出的设备,被广泛应用于各种领域。高精度电压源是现代电力、通信、控制等领域中重要的测试仪器之一,其主要功能是提供稳定可靠的直流或交流电源,并具有高精度和高分辨率的特点。在实际应用中&#…...
Android约束布局
一、嵌套布局效率可能很低。 在 Android 开发中,我们常常需要使用嵌套布局来实现某些较复杂的界面效果。但是嵌套层级太深会带来一些问题,主要包括: 视图层级过深,导致内存占用过高和性能下降。Android 需要为每个 View 对象分配内存,嵌套层级过深会创建很多 View 对象,占用较…...

selenium基础语法
文章目录 selenium基础语法1.定位页面元素2.元素的操作1) 模拟键盘输入(send_keys)2) 点击操作(click)3) 清除去对象输入的文本内容(clear)4) 获取文本(gettext) 3. 等待4. 信息打印5. 窗口6. 导航7. 弹窗8. 鼠标和弹窗9.选择框10.文件上传11.屏幕截图 selenium基础语法 1.定位…...

运行后端SpringBoot项目
目录 一、注册微信开发者账号 1. 注册开发者账号 2. 获取appid和密钥 二、开通腾讯云TRTC服务 1. TRTC业务介绍 2. 为什么不使用阿里云的实时音视频服务,偏要选用腾讯云TRTC服务? 3. 开通TRTC服务 4. 领取TRTC的AppID和密钥 三、导入 emos-api …...
#如何对待工作中的失误?# 如何对待工作与生活中的失误——一些不成熟的忠告
关于如何对待工作与生活中的失误的忠告 1.在面对失误而带来的指责和沮丧时,应该如何做?1.1 正确认识失误1.2 处理失误后情绪与问题的途径1.2.1 接受现实,不要否认错误1.2.2 不要过度臆想1.2.3 安排调整情绪的时间1.2.4 向他人寻求帮助 2.发生…...

Shell脚本文本三剑客之awk编辑器
目录 一、awk简介 二、awk工作原理 三、awk命令格式 四、awk命令的使用 1.print操作按行输出文本 2.print操作按字段截取输出文本 3.使用BEGIN和END指定操作 4.使用管道符号,双引号调用shell命令 5.使用操作getline 6.使用操作OFS 7.配合数组使用 一、…...
Focal Loss介绍
目录 前言一. Focal Loss二. 总结 前言 在目标检测算法中,我们会经常遇到Focal Loss这个东西,今天我们就来简单的分下下这个损失。 一. Focal Loss 在深度学习训练的时候,在遇到目标类别不平衡时,如果直接计算损失函数࿰…...

【数据结构与算法】04 哈希表 / 散列表 (哈希函数、哈希冲突、链地址法、开放地址法、SHA256)
一种很好用,很高效,又一学就会的数据结构,你确定不看看? 一、哈希表 Hash Table1.1 核心概念1.2 哈希函数 Hash Function1.3 哈希冲突 Hash Collision1.4 哈希冲突解决1.41 方法概述1.42 链地址法 Separate Chaining1.43 开放寻址…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
node.js的初步学习
那什么是node.js呢? 和JavaScript又是什么关系呢? node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说, 需要在node.js的环境上进行当JavaScript作为前端开发语言来说,需要在浏览器的环境上进行 Node.js 可…...

Linux 内存管理调试分析:ftrace、perf、crash 的系统化使用
Linux 内存管理调试分析:ftrace、perf、crash 的系统化使用 Linux 内核内存管理是构成整个内核性能和系统稳定性的基础,但这一子系统结构复杂,常常有设置失败、性能展示不良、OOM 杀进程等问题。要分析这些问题,需要一套工具化、…...
Vue 实例的数据对象详解
Vue 实例的数据对象详解 在 Vue 中,数据对象是响应式系统的核心,也是组件状态的载体。理解数据对象的原理和使用方式是成为 Vue 专家的关键一步。我将从多个维度深入剖析 Vue 实例的数据对象。 一、数据对象的定义方式 1. Options API 中的定义 在 Options API 中,使用 …...

以太网PHY布局布线指南
1. 简介 对于以太网布局布线遵循以下准则很重要,因为这将有助于减少信号发射,最大程度地减少噪声,确保器件作用,最大程度地减少泄漏并提高信号质量。 2. PHY设计准则 2.1 DRC错误检查 首先检查DRC规则是否设置正确,然…...
数据库优化实战指南:提升性能的黄金法则
在现代软件系统中,数据库性能直接影响应用的响应速度和用户体验。面对数据量激增、访问压力增大,数据库性能瓶颈经常成为项目痛点。如何科学有效地优化数据库,提升查询效率和系统稳定性,是每位开发与运维人员必备的技能。 本文结…...