HTTP 协议的定义,工作原理,Fiddler的原理和使用,请求的内容

news2025/1/10 10:42:04

文章目录

  • 一. HTTP协议是什么?
  • 1.HTTP工作原理
  • 2.HTTP协议格式
    • 2.1抓包工具的原理
    • 2.2抓包工具的使用
    • 2.3 HTTP协议的内容
      • 请求
        • 首行
        • 请求头(header)
        • 空行
        • 正文(body)

一. HTTP协议是什么?

HTTP (全称为 “超文本传输协议”) 是一种应用非常广泛的 应用层协议.

在这里插入图片描述

"超文本"是指什么?

文本=>字符串

"超"文本 => 除了能传输字符串, 还能传输其他的, 例如图片, 字体, 视频, 音频…

1.HTTP工作原理

当我们在浏览器输入一个网址, 这个网址就会被DNS解析成一个IP地址, 再进一步构造成一个HTTP请求, 发送给对应服务器, 服务器就会根据请求, 返回一个HTTP显影, 这个相应的内容, 主体往往是一个html.

在这里插入图片描述

2.HTTP协议格式

HTTP 是一个文本格式的协议. 可以通过 Chrome 开发者工具或者 Fiddler 抓包, 分析 HTTP 请求/响应的细节.

2.1抓包工具的原理

抓包工具相当于一个代理

浏览器访问 sogou.com 时, 就会把 HTTP 请求先发给 抓包工具, 抓包工具再把请求转发给 sogou 的服务器. 当 sogou 服务器返回数据时, 抓包工具拿到返回数据, 再把数据交给浏览器.

因此 抓包工具对于浏览器和 sogou 服务器之间交互的数据细节, 都是非常清楚的.

在这里插入图片描述

代理客户端的, 叫正向代理; 代理服务器的, 叫反向代理.

2.2抓包工具的使用

这里介绍的是fiddler. 下载链接 Download Fiddler Web Debugging Tool for Free by Telerik

一路next后安装成功, 打开究竟是如下界面

在这里插入图片描述

左边是当前机器上有哪些HTTP数据报在交互(不仅仅能抓浏览器, 能住到所有程序) 双击一个之后, 右边就能看到详细信息.

右上角显示的是请求的详情:

在这里插入图片描述

右下角显示的是相应的内容:

在这里插入图片描述

刚装好fiddler之后, 默认值能抓到http的数据, 抓不到https(网络上现在https是主流), 可以设置一下, 让fiddler能抓到https

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

期间会弹出几个会话框, 都点yes.

在这里插入图片描述

然后在重启fiddler.

但有些东西可能会影响fiddler的正确运行

  1. https要勾选正确, 证书安装正确.
  2. 有些代理程序可能和fiddler冲突, 确保使用fiddler的时候关闭其他代理
  3. 有些浏览器插件, 也可能和fiddler冲突

如果不是以上几种情况, 那就再重启几次fiddler.

此时就能捕捉到了HTTPS的数据报

在这里插入图片描述

当我们打开搜狗搜索, 以下就是抓取搜狗主页, 交互过程

在这里插入图片描述

双击后, 右上角这些标签页, 都是站在不同的视角来解析请求的, 最主要是用的方式是Raw

在这里插入图片描述

点击Raw后, 会出现HTTP协议的原始数据内容

在这里插入图片描述

这样就能看出, HTTP是(行)文本协议, 而IP, TCP, UDP是二进制协议.

打开下面的响应解析

在这里插入图片描述

为什么会出现乱码? HTTP不是文本协议吗?

当前HTTP相应, 经常会进行压缩, 节省带宽

点击一下按钮, 就会解压缩

在这里插入图片描述

这里就是全部的相应内容了

在这里插入图片描述

2.3 HTTP协议的内容

HTTP相应的内容通常是HTML, CSS, JS, 也可以是JSON, 图片, 字体, 视频, 音频…

浏览器显示的网页其实是从服务器下载下来的, 然后才能显示.

请求

请求的四个部分:首行, 请求头(header), 空行, 正文(body)

在这里插入图片描述

首行
GET https://www.sogou.com/ HTTP/1.1

(1)GET: method. 方法描述的是"语义", 说明这次请求要干什么

在这里插入图片描述

  • GET和POST是比较常用的方法.

  • GET请求一般没有正文(body);

  • POST最常见的场景: 登录, 上传. 一般有正文.

    • 登录的时候, 涉及到用户名密码, 属于比较敏感的信息, 直接展示在URL中会给用户造成一种"不太安全"的错觉.
    • 上传的时候, 涉及到的内容比较长, 直接放在URL中会显得很难看.
  • GET和POST最主要的区别就在于, GET是把一些自定义的数据放到query string里, body通常是空的; POST是把一些自定义的数据放到body里, query string通常是空的. 但其实本质上是没有区别的, 因为放哪都是放, 都要传输给服务器, 所以两者经常也可以相互替代

  • GET和POST没有本质区别.

  • 下列说法要注意:

    • GET和POST语义不同: 设计者最初是赋予了不同的语义, 但是设计中不一定完全遵守.

    • GET是幂等的, POST不是幂等的(相同输入后输出每次都相同, 就是幂等; 相同输入后输出不相同, 就是不幂等), 这是设计建议, 但不一定要遵守.

    • GET请求可以被缓存, POST不能被缓存. 缓存的前提是幂等.

  • 其他方法:

    • PUT 与 POST 相似,只是具有幂等特性,一般用于更新
    • DELETE 删除服务器指定资源
    • OPTIONS 返回服务器所支持的请求方法
    • HEAD 类似于GET,只不过响应体不返回,只返回响应头
    • TRACE 回显服务器端收到的请求,测试的时候会用到这个
    • CONNECT 预留,暂无使用

(2)https://www.sogou.com/: URL, 描述访问的服务器, 以及服务器的资源

  • URL, jdbc唯一资源定位符, 用来描述网络上的资源.

    在这里插入图片描述

    https : 协议方案名. 常见的有 http 和 https, 也有其他的类型.

    user:pass : 登陆信息. 现在的网站进行身份认证一般不再通过 URL 进行了. 一般都会省略

    www.example.jp : 服务器地址, 可以是域名, 也可以是IP地址, 此处是一个 “域名”. 如果省略, 相当于是访问当前服务器的地址.

    80: 服务器端口号, 区分应用程序.如果省略了, 浏览器会根据协议类型自动决定使用哪个端口.

    dir/index.htm: 带层次的文件路径: 表示访问服务器上的哪个资源. 如果省略了, 相当于访问的就是根目录, 也就是服务器的主页

    uid=1: 查询字符串: 描述访问资源时, 带上的参数. 可省略.

    • 查询字符串是键值对格式, 以?开始; 键和值之间, 使用=分割; 键值对之间, 使用&符号分割.
    • 键和值的含义都是程序员自定义的.

    ch1: 片段标识符: 不常见, 主要在文档类的网站中能看见.主要用于页面内跳转.

(3)HTTP/1.1: 版本号

请求头(header)

header 的整体的格式也是 “键值对” 结构. 每个键值对占一行. 键和值之间使用: 分割. header中的键值对有些是标准规定的, 有些事自定义的.

报头的种类有很多, 这里介绍几个常见的

(1)Host

  • 表示服务器主机的地址和端口.

通常情况下, Host里的内容和URL是一致的, 但是也有例外, 比如如果使用了代理, 就不一定了

(2)Content-Length

  • 表示 body 中的数据长度.

  • 请求中有body的, 必须有这个字段, 否则就是非法请求; 若是请求中没有body, 这个字段可以没有.

  • body从空行开始, 数Content-Length个长度, body就结束了

  • 为什么要设置这样一个字段? 其实就是为了解决粘包问题.

    • HTTP基于TCP, 当浏览器连续给服务器发起多个HTTP请求, 或者服务器返回多个HTTP响应时, 服务器和浏览器如何区分, 从哪到哪是一个完整的HTTP数据呢?(粘包问题)
      • 使用分隔符. 如果是GET, 没有body, 那么空行就代表结束标志.
      • 使用长度. 如果是POST, 有body, 则使用长度来判断结尾.

(3) Content-Type

  • 表示请求的 body 中的数据格式.

  • 有三种常见格式:

  • application/x-www-form-urlencoded

    格式形如:

    title=test&content=hello
    

    和query string一样

  • multipart/form-data

    通常用于提交图片/文件.

    body 格式形如:

    Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA 
    
    ------WebKitFormBoundaryrGKCBY7qhFd3TrwA 
    Content-Disposition: form-data; name="text" 
    
    title 
    ------WebKitFormBoundaryrGKCBY7qhFd3TrwA 
    Content-Disposition: form-data; name="file"; filename="chrome.png" 
    Content-Type: image/png 
    
    PNG ... content of chrome.png ...
    ------WebKitFormBoundaryrGKCBY7qhFd3TrwA--
    
  • application/json

    数据为 json 格式, body 格式形如:

    {"username":"123456789","password":"xxxx","code":"jw7l","uuid":"d110a05ccde64b16a861fa2bddfdcd15"}
    
  • 通过Content-Type 就可以区分出body的数据格式是什么, 尤其是浏览器需要根据不同的格式来决定如何处理

空行

相当于一个分隔符, 分割了header和body, 描述了body是从哪里开始的

正文(body)

body里的格式是可以有很多种.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1037748.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

异步电机直接转矩控制学习

导读:本期文章对异步电机直接转矩控制进行梳理。DTC包括转速外环、磁链观测器、滞环和电压矢量离线开关表。离线电压矢量开关表共分为两种:添加零矢量和未添加零矢量。 如果需要文章种的仿真模型,关注微信公众号:浅谈电机控制&am…

同城配送商城小程序的作用是什么

本地生活服务如餐饮、服装、鲜花、百货等产品都具备同城经营属性,在产品销售方面普遍是以实体店为主做三公里生意,而随着互联网线上深入,很多商家会通过进驻外卖平台获得生意,当然也有越来越多的商家选择自建商城完成品牌的配送平…

机器学习第十四课--神经网络

总结起来,对于深度学习的发展跟以下几点是离不开的: 大量的数据(大数据)计算资源(如GPU)训练方法(如预训练) 很多时候,我们也可以认为真正让深度学习爆发起来的是数据和算力,这并不是没道理的。 由于神经网络是深度学习的基础,学…

AIGC(生成式AI)试用 6 -- 桌面小程序

生成式AI,别人用来写作,我先用来写个桌面小程序。 桌面小程序:计算器 需求 Python开发图形界面,标题:计算器 - * / 基本运算计算范围:-999999999 ~ 999999999** 乘方计算(例,2*…

c==ubuntu+vscode debug redis7源码

新建.vscode文件夹,创建launch.json和tasks.json {"version": "0.2.0","configurations": [{"name": "C/C Launch","type": "cppdbg","request": "launch","prog…

人工智能轨道交通行业周刊-第61期(2023.9.18-9.24)

本期关键词:焊线机器人、智能综合运维管理系统、信号平面图、铁路部门架构、书生浦语大模型 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通…

确知波束形成matlab仿真

阵列信号处理中的导向矢量 假设一均匀线性阵列,有N个阵元组成,满足:远场、窄带假设。 图1. 均匀线性阵模型 假设信源发射信号,来波方向为 θ \theta θ,第一个阵元接收到的信号为 x ( t ) x(t) x(t),则第…

mybatsi-MyBatis的逆向工程

mybatsi-MyBatis的逆向工程 一、前言二、创建逆向工程的步骤1.添加依赖和插件2.创建MyBatis的核心配置文件3.创建逆向工程的配置文件4.执行MBG插件的generate目标 一、前言 正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。 Hibernate是支…

Nitrux 3.0 正式发布并全面上市

导读乌里-埃雷拉(Uri Herrera)近日宣布 Nitrux 3.0 正式发布并全面上市,它是基于 Debian、无 systemd、不可变的 GNU/Linux 发行版的最新安装媒体,利用了 KDE 软件。 Nitrux 3.0 由带有 Liquorix 味道的 Linux 6.4.12 内核提供支持…

每日一题~把二叉搜索树转换为累加

原题链接:538. 把二叉搜索树转换为累加树 - 力扣(LeetCode) 题目描述: 思路分析: 通过描绘二叉搜索树转换累加树的过程,我们发现转换的过程是从右往左依次相加的,新节点的值 右边节点的值的和 …

HTML怎么使用角度代码调节一个角的角度

文章目录 概要整体架构流程 概要 我们在用代码做图形的时候,用的矩形和圆形比较多,如果遇到只改变其中一个角的角度,这时又该怎么做呢 整体架构流程 如图,这是建立的一个正圆的代码,其调节角度的属性代码是border-ra…

Leetcode | 560. 和为 K 的子数组

560. 和为 K 的子数组 文章目录 [560. 和为 K 的子数组](https://leetcode.cn/problems/subarray-sum-equals-k/)题目解法1:暴力枚举解法2:前缀和解法3:[官方题解](https://leetcode.cn/problems/subarray-sum-equals-k/solutions/238572/he-…

成都直播基地火热招商中,天府蜂巢成都直播基地招商政策汇总

随着直播产业的发展,四川天府新区也在逐步形成成熟的直播产业链。近日,记者采访到成都天府蜂巢直播产业基地即将竣工,正式进入运营阶段,作为成都科学城兴隆湖高新技术服务产业园的主打新一代成都直播基地,正积极招商中!引领大规模的平台聚合发…

关于POM声明为provided的依赖,运行程序时报错NoClassDefFoundError

问题叙述 我在编写flink程序时,将flink相关依赖声明为provided(目的是项目打包时不会将flink依赖打入包最终jar包中,减少内存占用) 但是如果在IDEA本地中执行程序会报错java.lang.NoClassDefFoundError,如下所示 解…

静态资源的动态引入

有常用的2种方式: 1、css中的静态路径 2、img中的src静态路径 运行的环境是打包后的图片路径,而打包后的图片通常会生成一个文件指纹,而我们在写代码时,写的是源码中的路径和文件名,如果是静态路径,则会自动…

leetcodetop100(18) 螺旋矩阵

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]示例 2: 输入:matrix [[1,2,3…

SpringBoot启用禁用员工/员工分页查询/编辑员工 --苍穹外卖day3

启用禁用员工 Controller 路径参数前面加上Path~注解来获取参数 PostMapping("/status/{status}") ApiOperation("启用禁用员工") public Result StartOrStop(PathVariable("status") Integer status, Long id){log.info("启用禁用")…

你需要知道DDD基本知识

0 概述 2004 年埃里克埃文斯(Eric Evans)发表了《领域驱动设计》(Domain-Driven Design –Tackling Complexity in the Heart of Software)这本书,从此领域驱动设计(Domain Driven Design,简称…

马尔可夫链预测 (Markov Chain)

一、人寿保险案例(两状态) 人寿保险公司把人的健康状态分为健康和疾病两种,以一年为一个时段,研究健康状态的转变。假设对某一年龄段的人来说,今年健康,明年继续保持健康的概率为0.8,即明年转为疾病的概率…

网络协议定制

目录 一、协议定制 1.再谈协议 2.认识序列化与反序列化 二、网络计算器 1.序列化与反序列化头文件 2.服务端 3.客户端 4.makefile 5.运行结果 三、json序列化与反序列化 1.常用序列化与反序列化库 2.安装 3.使用 (1)Request的序列化 &…