【应用层协议】初始Http,fiddler的使用

news2024/11/18 17:37:29

文章目录

  • 1. HTTP概念
  • 2. 下载fiddler及使用获得HTTP协议格式
    • 2.1 fiddler的下载
    • 2.2 fiddler使用
  • 3. HTTP请求(Request)
    • 3.1 请求行
      • 3.1.1 URL
      • 3.1.2 方法
        • 3.1.2.1 GET
        • 3.1.2.2 POST
        • 3.1.2.3 其他方法
    • 3.2 报头(header)
    • 3.3 空白行
    • 3.4 正文(body)
  • 4. HTTP响应(response)

1. HTTP概念

Http全称是超文本传输协议,是一种常用的应用层协议。它是Web的基础,用于在客户端和服务器之间传递数据和请求网页资源。
例如:当我们搜索一个网站时,就相当于向网站的服务器发送一个http请求,当网站的服务器收到请求后就会进行响应。
HTTP 往往是基于传输层的 TCP 协议实现的. (HTTP1.0, HTTP1.1, HTTP2.0 均为TCP, HTTP3 基于 UDP 实现)

2. 下载fiddler及使用获得HTTP协议格式

当我们搜索一个网站时,我们便会发出HTTP的请求,但我们可能无法直接的观察,我们就可以使用这个fiddler的抓包工具进行捕捉HTTP,方便我们观察这个过程和HTTP协议格式等。
这个fiddler就相当于一个代理,当我们开启fiddler搜索网站发出http请求,不会直接到达网站服务器,而是先到fiddler,然后从fiddler再到网站服务器,当网站服务器回应时,也是如此。

2.1 fiddler的下载

我们可以直接搜索fiddler的官网,进行下载。
fiddler下载
下载
下载我们需要的版本即可。

2.2 fiddler使用

fiddler的使用也是非常的简单,我们直接打开即可。
我们会得到以下的界面:
界面

  1. 最上面的导航
  2. 左面的便是我们抓到的HTTP(还会有HTTPS协议,这个后面博客会讲)。
  3. 当我们点开一个HTTP,右上一块就是HTTP请求。
  4. 右下是HTTP响应。

点击Raw,View in Noteod,便可以查看具体细节。在这里插入图片描述

3. HTTP请求(Request)

请求

如图,HTTP请求协议分为四部分:

  1. 请求行
  2. 报头
  3. 空白行
  4. 正文

下面具体介绍每一个部分。

3.1 请求行

请求行

如图,请求行分为三个部分:

  1. HTTP请求的方法
  2. 请求的URL
  3. HTTP协议版本

3.1.1 URL

URL,又称统一资源定位符,也就是我们经常说的网址。
互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
下面就是一个CSDN的URL:
https://www.csdn.net/?spm=1011.2124.3001.4476

  • https:协议方案名,常见的就http和https。
  • www.csdn.net:服务器地址, 此处是一个 “域名”, 域名会通过 DNS 系统解析成一个具体的 IP 地址。
  • spm=1011.2124.3001.4476:查询字符串(query string), 本质是一个键值对结构. 键值对之间使用 & 分隔. 键和值之间使用 = 分隔。程序员自定义。

但这并不完整的URL,还是有一些信息被省略了。
完整:
2

3.1.2 方法

方法

HTTP请求行的第一个部分为HTTP请求的方法,每种方法都有不同的意义, 后面我们也可以使用JS的ajax自己定义方法。
上面方法中其中常用的只有GET和POST。

3.1.2.1 GET

GET 是最常用的 HTTP 方法. 常用于获取服务器上的某个资源,
在浏览器中直接输入 URL, 此时浏览器就会发送出一个 GET 请求.
请求
如图就是一个GET请求,我们可以方法GET请求的特点:

  1. 请求行第一个部分为GET;
  2. URL 的 query string 可以为空, 也可以不为空;
  3. header 部分有若干个键值对结构;
  4. body 部分为空。
3.1.2.2 POST

POST 方法也是一种常见的方法. 多用于提交用户输入的数据给服务器(例如登陆页面)。
通过 HTML 中的 form 标签可以构造 POST 请求, 或者使用 JavaScript 的 ajax 也可以构造 POST 请求。
POST

  1. 首行的第一部分为 POST;
  2. URL 的 query string 一般为空 (也可以不为空) header 部分有若干个键值对结构;
  3. body 部分一般不为空;
  4. body 内的数据格式通过 header 中的 Content-Type 指定. body 的长度由 header 中的Content-Length 指定.

GET和POST区别?
1.GET一般用于获取数据,POST一般用于提交数据;
2.GET一般body为空,传递数据通过query string,POST一般query string为空,传递数据通过body;
3.GET请求一般幂等(多次请求结果相同),POST不是幂等的;
4.GET可以被缓存,POST不能被缓存。

3.1.2.3 其他方法

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

3.2 报头(header)

报头

header 的整体的格式也是 “键值对” 结构,每个键值对占一行. 键和值之间使用分号分割。
header中种类很多,这里介绍几种常见的。

  1. Host:表示服务器主机的地址和端口。
  2. Content-Length:表示 body 中的数据长度。
  3. Content-Type:表示请求的 body 中的数据格式。
  4. User-Agent (简称 UA):表示浏览器/操作系统的属性。
  5. Referer:表示这个页面是从哪个页面跳转过来的。
  6. Cookie:Cookie 中存储了一个字符串, 这个数据可能是客户端(网页)自行通过 JS 写入的, 也可能来自于服务器(服务器在 HTTP 响应的 header 中通过 Set-Cookie 字段给浏览器返回数据)可以通过这个字段实现 “身份标识” 的功能。

3.3 空白行

作用
分割报头和正文,标识报头结束,一般有正文才会有空白行,没报文就没空白行。

3.4 正文(body)

正文中数据:
文本数据:HTML、XML、JSON等文本格式的数据。
二进制数据:图像、音频、视频等二进制格式的数据。
表单数据:用户通过Web表单提交的数据。
文件上传:在文件上传请求中,正文包含上传的文件数据。
……

4. HTTP响应(response)

响应

HTTP响应也是四个部分组成:

  1. 状态行
  2. 报头
  3. 空白行
  4. 正文

其中后三个与HTTP请求相同。

状态行
座谈会

由HTTP协议版本和状态码和原因短语组成。
状态码和原因短语一一对应,如:
200 OK:表示访问成功。
404 Not Found:没有找到资源。
403 Forbidden:没有权限,拒绝访问。
405 Method Not Allowed:前面我们已经学习了 HTTP 中所支持的方法, 有 GET, POST, PUT, DELETE 等,但是对方的服务器不一定都支持所有的方法(或者不允许用户使用一些其他的方法)。
500 Internal Server Error:服务器出现内部错误。
504 Gateway Timeout:当服务器负载比较大的时候, 服务器处理单条请求的时候消耗的时间就会很长, 就可能会导致出现超时的情况。
302 Move temporarily:临时重定向。
301 Moved Permanently:永久重定向。

总结
状态码

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

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

相关文章

Django 模型层的操作(Django-05 )

一 模型层的解读 Django中内嵌了ORM框架,不需要直接编写SQL语句进行数据库操作,而是通过定义模型类,操作模型类来完成对数据库中表的增删改查和创建等操作。 O 是object,也就类对象的意思。R 是relation,翻译成中文是…

Python综合案例:学生管理系统

目录 需求说明: 功能: 创建入口函数: 实现菜单函数: 实现增删查操作: 1. 新增学生 2. 展示学生 3. 查找学生 4. 删除学生 加入存档读档: 1. 约定存档格式 2. 实现存档函数 3. 实现读档函数 打…

C#中的数组探究与学习

目录 C#中的数组一般分为:一.数组定义:为什么要使用数组?什么是数组?C#一维数组for和foreach的区别C#多维数组C#锯齿数组初始化的意义:适用场景:C#中的数组一般分为: ​①.一维数组。 ②.多维数组,也叫矩形数组。 ③.锯齿数组,也叫交错数组。 一.数组定义: 数组…

013-第二代上位机开发环境搭建

第二代上位机开发环境搭建 文章目录 第二代上位机开发环境搭建项目介绍虚拟机安装Debian 10文件传输远程调试VNCrsync下载安装验证 配置远程调试环境配置远程设备配置 kitsCompilers配置Qtversions配置kits 测试 总结一下 关键字: Qt、 Qml、 关键字3、 关键字4…

GitHub爬虫项目详解

前言 闲来无事浏览GitHub的时候,看到一个仓库,里边列举了Java的优秀开源项目列表,包括说明、仓库地址等,还是很具有学习意义的。但是大家也知道,国内访问GitHub的时候,经常存在访问超时的问题,…

云安全之等级保护解决方案及应用场景

等保2.0解决方案背景 适应云计算、移动互联网、大数据、物联网和工业控制等新技术发展,在新的技术场景能够顺利开展等级保护工作;《网络安全法》2016年已正式发布,等级保护2.0为了更好配合《网络安全法》的实施;等级保护1.0,在适…

U盘支持启动区+文件存储区的分区方法

准备新U盘 启动diskgenius ,先建立一个主分区(7G),剩余空间建立为第二分区,然后设定第二分区激活。 diskgenius格式化 用diskgenius格式化,在格式化的过程中有一个 写入dos系统的选项,在格式…

企业微信机器人对接GPT

现在网上大部分微信机器人项目都是基于个人微信实现的,常见的类库都是模拟网页版微信接口。 个人微信作为我们自己日常使用的工具,也用于支付场景,很怕因为违规而被封。这时,可以使用我们的企业微信机器人,利用企业微信…

抄写Linux源码(Day14:从 MBR 到 C main 函数 (3:研究 head.s) )

回忆我们需要做的事情: 为了支持 shell 程序的执行,我们需要提供: 1.缺页中断(不理解为什么要这个东西,只是闪客说需要,后边再说) 2.硬盘驱动、文件系统 (shell程序一开始是存放在磁盘里的,所以需要这两个东…

linux以太网(三).之netstat命令

引言&#xff1a; netstat命令是一个监控TCP/IP网络的非常有用的工具&#xff0c;它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息 语法选项&#xff1a; netstat [选项] -a或--all&#xff1a;显示所有连线中的Socket&#xff1b; -A<网络类型>或…

JUC第十五讲:JUC集合-ConcurrentHashMap详解(面试的重点)

JUC第十五讲&#xff1a;JUC集合-ConcurrentHashMap详解 本文是JUC第十五讲&#xff1a;JUC集合-ConcurrentHashMap详解。JDK1.7之前的ConcurrentHashMap使用分段锁机制实现&#xff0c;JDK1.8则使用数组链表红黑树数据结构和CAS原子操作实现ConcurrentHashMap&#xff1b;本文…

跨站脚本攻击(XSS)以及如何防止它?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是跨站脚本攻击&#xff08;XSS&#xff09;&#xff1f;⭐ 如何防止XSS攻击&#xff1f;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#…

复习 --- 消息队列

进程间通信机制(IPC) 简述 IPC&#xff1a;Inter Process Communication 进程和进程之间的用户空间相互独立&#xff0c;但是4G内核空间共享&#xff0c;进程间的通信就是通过这4G的内核空间 分类 传统的进程间通信机制 无名管道&#xff08;pipe&#xff09; 有名管道&…

Linux Vi编辑器基础操作指南

Linux Vi编辑器基础操作指南 Linux中的Vi是一个强大的文本编辑器&#xff0c;虽然它有一些陡峭的学习曲线&#xff0c;但一旦掌握了基本操作&#xff0c;它就变得非常高效。以下是Vi编辑器的一些基本用法&#xff1a; 打开Vi编辑器&#xff1a; vi 文件名退出Vi编辑器&#xff…

[架构之路-232]:操作系统 - 文件系统存储方法汇总

目录 前言&#xff1a; 一、文件系统存储方法基本原理和常见应用案例&#xff1a; 二、Windows FAT文件系统 2.1 概述 三、Linux EXT文件系统 3.1 基本原理 3.2 索引节点表&#xff08;Inode Table&#xff09; 3.2.1 索引节点表层次结构 3.2.2 间接索引表的大小和表项…

@SpringBootApplication剖析

一、前言 在SpringBoot项目中启动类必须加一个注解SpringBootApplication&#xff0c;今天我们来剖析SpringBootApplication这个注解到底做了些什么。 二、SpringBootApplication简单分析 进入SpringBootApplication源代码如下&#xff1a; 可以看出SpringBootApplication是…

【C语言】动态通讯录(超详细)

通讯录是一个可以很好锻炼我们对结构体的使用&#xff0c;加深对结构体的理解&#xff0c;在为以后学习数据结构打下结实的基础 这里我们想设计一个有添加联系人&#xff0c;删除联系人&#xff0c;查找联系人&#xff0c;修改联系人&#xff0c;展示联系人&#xff0c;排序这几…

数据挖掘(3)特征化

从数据分析角度&#xff0c;DM分为两类&#xff0c;描述式数据挖掘&#xff0c;预测式数据挖掘。描述式数据挖掘是以简介概要的方式描述数据&#xff0c;并提供数据的一般性质。预测式数据挖掘分析数据建立模型并试图预测新数据集的行为。 DM的分类&#xff1a; 描述式DM&#…

arm代码

RISC精简指令集 长度和执行周期固定 长度为一条机器指令在计算机占用的内存大小 指令周期为CPU执行一条机器指令所发费的时间(时钟周期由CPU工作频率决定) CISC复杂指令集 其架构一般用于PC端 X86和X64都是负载指令集CPU 更注重指令的功能性 指令周期和长度都不固定 ar…

014-第二代软件开发

第二代软件开发 文章目录 第二代软件开发项目介绍正式开始我们的Debian Qt 软件开发主题色QSS U盘检测QFileSystemWatcher 屏幕键盘LibUSB 使用 总结 关键字&#xff1a; Qt、 Qml、 U盘检测、 屏幕键盘、 LibUSB 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这…