JavaWeb——HTTP 协议的基本格式和 fiddler 的用法

news2024/9/21 4:30:02

目录

一、HTTP定义

二、HTTP协议的工作流程

三、抓包工具Fiddler的用法

1、介绍

2、原理

3、抓包结果

(1)、HTTP请求

(2)、HTTP响应

四、HTTP协议的格式

1、HTTP请求

(1)、请求行

(2)、请求报头

(3)、请求正文

2、HTTP响应

(1)、状态码

(2)、响应报头

(3)、响应正文


一、HTTP定义

HTTP被称为超文本传输协议,是一种应用非常广泛的应用层协议,往往是基于传输层的TCP 协议实现的。

二、HTTP协议的工作流程

当我们在浏览器中输入一个网址时,浏览器会给对应的服务器发送一个HTTP请求,服务器收到请求后会返回一个HTTP响应。响应结果被服务器解析后就会被展示成我们所看到的页面内容。在此过程中浏览器可能会向服务器发送多个HTTP请求,而服务器则会返回多个包含页面HTML、CSS、JS等的响应。

三、抓包工具Fiddler的用法

1、介绍

  • 左侧窗口显示所有的 HTTP请求/响应,可以选中某个请求查看详情
  • 右侧上方显示HTTP 请求的报文内容,切换到 Raw 标签页可以看到详细的数据格式
  • 右侧下方显示HTTP 响应的报文内容,切换到 Raw 标签页可以看到详细的数据格式

2、原理

Fiddler相当于一个代理,浏览器访问baidu.com时会把HTTP请求先发给Fiddler,Fiddler再把请求转发给百度服务器。当百度服务器返回数据时,Fiddler拿到返回数据后再把数据交给浏览器。因此Fiddler对于浏览器和百度服务器之间交互的数据细节都是非常清楚的。

3、抓包结果

(1)、HTTP请求

  • 首行:方法 + url + 版本
  • Header:请求的属性。冒号分割的键值对,每组属性之间使用\n分隔,遇到空行表示Header部分结束
  • Body:空行后面的内容都是Body。Body允许为空字符串,如果Body存在,则在Header中会有一个Content-Length属性来标识Body的长度

(2)、HTTP响应

 

  • 首行:版本号 + 状态码 + 状态码解释
  • Header:请求的属性。冒号分割的键值对,每组属性之间使用\n分隔,遇到空行表示Header部分结束
  • Body:空行后面的内容都是Body。Body允许为空字符串,如果Body存在则在Header中会有一个Content-Length属性来标识Body的长度,如果服务器返回了一个html页面,那么html页面内容就是在body中

四、HTTP协议的格式

注:因为 HTTP 协议并没有规定报头部分的键值对有多少个,空行就相当于是报头的结束标记或是报头和正文之间的分隔符。HTTP 在传输层依赖 TCP 协议,TCP 是面向字节流的,如果没有这个空行就会出现粘包问题。

1、HTTP请求

(1)、请求行

【1】、请求地址URL

我们俗称的 "网址" 其实说的就是URL(Uniform Resource Locator 统⼀资源定位符)。

互联网上的每个⽂件都有⼀个唯⼀的URL,它包含的信息指出⽂件的位置以及浏览器应该怎么处理它。

  • https:协议方案名。常见的有http和https,也有其他的类型
  • user:pass:登陆信息。现在的网站进行身份认证一般不再通过 URL 进行了,一般都会省略
  • v.bitedu.vip:服务器地址。此处是一个域名,域名会通过DNS系统解析成一个具体的IP 地址
  • 端口号:上面的URL中端口号被省略了,当端口号省略时,浏览器会根据协议类型自动决定使用哪个端口。例如http协议默认使用80端口,https协议默认使用443端口。
  • /personInf/student:带层次的文件路径
  • userId=10000&classId=100:查询字符串。本质是一个键值对结构,键值对之间使用& 分隔,键和值之间使用“=”分隔
  • 片段标识:此 URL 中省略了片段标识。片段标识主要用于页面内跳转

注:URL中有部分可省略

  • 协议名:可以省略,省略后默认为http://
  • ip 地址 / 域名:在 HTML 中可以省略(比如 img、link、script、a 标签的 src 或者 href 属性)省略后表示服务器的 ip / 域名与当前 HTML 所属的 ip / 域名一致
  • 端口号:可以省略,省略后如果是 http 协议,端口号自动设为 80。如果是 https 协议,端口号自动设为 443
  • 带层次的文件路径:可以省略,省略后相当于 / ,有些服务器会在发现 / 路径的时候自动访问/index.html
  • 查询字符串:可以省略
  • 片段标识:可以省略
     

【2】、方法

GET方法

GET是最常用的HTTP方法,常用于获取服务器上的某个资源。

在浏览器中直接输入URL,此时浏览器就会发送出一个GET请求。另外HTML 中的 link、img、script 等标签,也会触发 GET 请求

GET特点

首行的第一部分为 GET。

URL 的 query string 可以为空也可以不为空;

header 部分有若干个键值对结构;

body 部分为空;

POST方法

POST 方法是一种常见的方法,多用于提交用户输入的数据给服务器。

通过 HTML 中的 form 标签可以构造 POST 请求,或者使用 JavaScript 的 ajax 也可以构造 POST 请求

POST特点 

首行的第一部分为 POST。

URL 的 query string 一般为空也可以不为空;

header 部分有若干个键值对结构;

body 部分一般不为空,body 内的数据格式通过 header 中的 Content-Type 指定,body 的长度由header 中的 Content-Length 指定;

GET 和 POST 的区别

  • 语义不同,GET 一般用于获取数据,POST 一般用于提交数据;
  • GET 的 body 一般为空,需要传递的数据通过 query string 传递,POST 的 query string 一般为空,需要传递的数据通过 body 传递;
  • GET 请求一般是幂等的,POST 请求一般是不幂等的,如果多次请求得到的结果一样就视为请求是幂等的;
  • GET 可以被缓存,POST 不能被缓存;

其他方法

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

(2)、请求报头

  • header 整体的格式也是 "键值对" 结构。每个键值对占一行,键和值之间使用分号分割。
  • Host表示服务器主机的地址和端口。
  • Content-Length 表示 body 中的数据长度。
  • Content-Type 表示请求的 body 中的数据格式。
  • User-Agent 表示浏览器/操作系统的属性。
  • Referer 表示这个页面是从哪个页面跳转过来的。如果直接在浏览器中输入URL或直接通过收藏夹访问页面时是没有 Referer 的。
  • Cookie中存储了一个字符串,这个数据可能是客户端自行通过 JS 写入的,也可能来自于服务器,服务器在 HTTP 响应的 header 中通过 Set-Cookie 字段给浏览器返回数据,往往可以通过这个字段实现 "身份标识" 的功能。

注:每个不同的域名下都可以有不同的 Cookie, 不同网站之间的 Cookie 并不冲突

(3)、请求正文

正文中的内容格式和 header 中的 Content-Type 密切相关

2、HTTP响应

(1)、状态码

状态码表示访问一个页面的结果

  • 200 OK,表示访问成功;

  • 404 Not Found,没有找到资源;

    浏览器输入一个 URL,目的就是为了访问对方服务器上的一个资源。如果这个 URL 标识的资源不存在,那么就会出现 404

  • 403 Forbidden,表示访问被拒绝;

    有的页面通常需要用户具有一定的权限才能访问,如果用户没有登陆直接访问,就容易见到 403

  • 405 Method Not Allowed;

    HTTP 中所支持的方法有GET、POST、PUT、DELETE等,但是对方的服务器不一定都支持所有的方法或不允许用户使用一些其他的方法

  • 500 Internal Server Error,表示服务器出现内部错误;

    一般是服务器的代码执行过程中遇到了一些特殊情况会产生这个状态码

  • 504 Gateway Timeout;

    当服务器负载比较大的时候,服务器处理单条请求的时候消耗的时间就会很长,就可能会导致出现超时的情况

  • 302 Move temporarily,表示临时重定向;

    在登陆页面中经常会见到 302,用于实现登陆成功后自动跳转到主页,响应报文header 部分会包含一个 Location 字段,表示要跳转到哪个页面

  • 301 Moved Permanently,表示永久重定向;

    当浏览器收到这种响应时,后续的请求都会被自动改成新的地址

类别原因短语
1XXInformational(信息性状态码)接收的请求正在处理
2XXSuccess(成功状态码)请求正常处理完毕
3XXRedirection(重定向状态码)需要进行附加操作已完成请求
4XXClient Error(客户端错误状态码)服务器无法处理请求
5XXServer Error(服务器错误状态码)服务器处理请求出错

(2)、响应报头

响应报头的基本格式和请求报头的格式基本一致,类似于Content-Type、Content-Length 等属性的含义也和请求中的含义一致。

响应中的 Content-Type 常见取值有以下几种:

  • text/html : body 数据格式是 HTML
  • text/css : body 数据格式是 CSS
  • application/javascript : body 数据格式是 JavaScript
  • application/json : body 数据格式是 JSON

(3)、响应正文

正文的具体格式取决于 Content-Type

 

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

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

相关文章

OpenAPI的签名校验

前言 作为一个后端开发,提供API接口或者对接第三方API接口的时候,考虑接口的防刷、重放等安全问题,严格意义上,都需要加上双方约定的签名规则。 大致思路 一般情况下,签名规则没有墨守成规的规定,只要考…

MediaPipe Face Detection可运行在移动设备上的亚毫秒级人脸检测

MediaPipe人脸检测 MediaPipe人脸检测是一种超快速的人脸检测解决方案,具有6个界标和多人脸支持。它基于BlazeFace,BlazeFace是为移动GPU推理量身定制的轻巧且性能良好的面部检测器。检测器的超实时性能使其可应用于需要准确地关注面部区域作为其他任务特定模型: 例如 1、3…

如何有效解决企业文件安全事件频发问题?

企业文件安全是企业必须解决的一个关键问题。随着数字化趋势的不断发展,企业严重依赖于以电子格式存储和访问数据。这种转变使得组织必须实施适当的安全协议,以确保其敏感数据免受未经授权的访问或盗窃。 企业网盘的使用已经在公司中流行起来&#xff0c…

ChatGPT:3. 使用OpenAI创建自己的AI网站:2. 使用 flask web框架快速搭建网站主体

使用OpenAI创建自己的AI网站 如果你还是一个OpenAI的小白,有OpenAI的账号,但想调用OpenAI的API搞一些有意思的事,那么这一系列的教程将仔细的为你讲解如何使用OpenAI的API制作属于自己的AI网站。博主只能利用下班时间更新,进度慢…

mybatis是如何集成到spring的之SqlSessionFactoryBean

文章目录 1 前言1.1 集成spring前使用mybatis的方式1.2 集成mybatis到spring的关键步骤 2 SqlSessionFactoryBean对象分析2.1 buildSqlSessionFactory做了什么事情?2.2 为什么是SqlSessionFactoryBean却可以使用SqlSessionFactory? 3 验证demo4 举一反三…

【QT】自定义工程封装成DLL并如何调用(带ui界面的)

一、动态库的封装 1、首先新建一个Library工程 2、修改类型为共享库,自定义项目名称以及项目路径 3、选择编译器 4、选择动态库所需要的模块 5、自定义类名,点击下一步 6、点击下一步 7、项目总览 8、此时的文件中还没有ui文件,因为要封装带…

南京邮电大学算法与设计实验四:回溯法(最全最新,与题目要求一致)

要求用回溯法求解8-皇后问题,使放置在8*8棋盘上的8个皇后彼此不受攻击,即:任何两个皇后都不在同一行、同一列或同一斜线上。请输出8皇后问题的所有可行解。 用回溯法编写一个递归程序解决如下装载问题:有n个集装箱要装上2艘载重分…

pg事务:隔离级别(2)

事务隔离级别的历史 ANSI SQL-92定义的隔离级别和异常现象确实对数据库行业影响深远,甚至30年后的今天,绝大部分工程师对事务隔离级别的概念还停留在此,甚至很多真实的数据库隔离级别实现也停留在此。但后ANSI92时代对事物隔离有许多讨论甚至…

【5.20】五、安全测试——渗透测试

目录 5.3 渗透测试 5.3.1 什么是渗透测试 5.3.2 渗透测试的流程 5.3 渗透测试 5.3.1 什么是渗透测试 渗透测试是利用模拟黑客攻击的方式,评估计算机网络系统安全性能的一种方法。这个过程是站在攻击者角度对系统的任何弱点、技术缺陷或漏洞进行主动分析&#x…

如何在项目管理中实现任务活动的留痕管理?

项目工作为什么需要留痕呢? 1,记录项目工作:在项目管理工作中常常涉及多部门协作,工作留痕可以帮助我们有效复原已经发生了的工作活动,从而留下印迹供日后查证。 2,支撑工作复盘:在项目工作结束之后&…

SpringBoot程序启动速度提速分析

传统的破程序(百万行级一个微服务),在我的P15-gen2代电脑上启动一次需要80秒左右(直接运行三次,取平均值),在其它人电脑上可想而知了。 大概记录几点 1 优化肯定是需要找工具观察的,不观测还…

MyBatis、MyBatis-plus

文章目录 MyBatis一、MyBatis简介1. 什么是MyBatis2. MyBatis开发步骤3. 环境搭建4. MyBatis的映射文件(UserMapper)5. 动态sql语句6. MyBatis的增删改查 二、MyBatis核心配置文件(sqlMapConfig)1. MyBatis常用配置1)environments…

使用JAVA代码实现跳动爱心(脱单节程序员必备哦)

520!!!表白日,你脱单了吗?你跟对象彻夜不归了吗? 如果没有说明,你的诚心不够,来给对象一个代码表白吧! 话不多说,先上效果图: 实现代码如下&…

kicad学习笔记6:kicad启动及其grid参数设置和修改

1。kicad启动&#xff1a; single_top.cpp 启动函数&#xff1a; 1。 IMPLEMENT_APP( APP_SINGLE_TOP )2。 PGM_SINGLE_TOP::OnPgmInit()3。 PGM_BASE::InitPgm2。kicad参数 grid参数定义&#xff1a; struct GRID_SETTINGS {bool axes_enabled;std::vector<wxString&…

华为OD机试真题 Java 实现【天然蓄水池】【2023Q1 200分】

一、题目描述 公元2919年&#xff0c;人类终于发现了一颗宜居星球——X星。现想在X星一片连绵起伏的山脉间建一个天然蓄水库&#xff0c;如何选取水库边界&#xff0c;使蓄水量最大&#xff1f; 要求&#xff1a; 山脉用正整数数组s表示&#xff0c;每个元素代表山脉的高度。…

基于springboot人事管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SpringBoot 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 前言 基于springboot人事管…

vscode录音及语音实时转写插件开发并在工作区生成本地mp3文件 踩坑日记!

前言 最近接到一个需求&#xff0c;实现录音功能并生成mp3文件到本地工作区&#xff0c;一开始考虑到的是在vscode主体代码里面开发&#xff0c;但这可不是一个小的工作量。时间紧&#xff0c;任务重&#xff01;市面上实现录音功能的案例其实很多&#xff0c;一些功能代码是可…

【敬伟ps教程】修复工具

文章目录 模糊工具锐化工具涂抹工具减淡、加深工具海绵工具仿制图章工具图案图章工具修复画笔工具污点修复画笔工具修补工具内容感知移动工具红眼工具 模糊工具 模糊工具的主要功能就是把图像变的模糊。虽然是把图像变模糊&#xff0c;但是模糊工具应用也是很广泛的。使用模糊工…

小黑子—Java从入门到入土过程:第十一章 - 网络编程、反射及动态代理

Java零基础入门11.0 网络编程1. 初识网络编程2. 网络编程三要素3.IP三要素3.1 IPV4的细节3.1.1特殊的IP地址3.1.2 常用的CMD命令 3.2 InetAddress 的使用3.3 端口号3.4 协议3.4.1 UDP协议3.4.1 - I UDP 发送数据3.4.1 - II UDP 接收数据3.4.1 - III UDP 练习&#xff08;聊天室…

C++实现日期类(超详细)

个人主页&#xff1a;平行线也会相交&#x1f4aa; 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【C之路】&#x1f48c; 本专栏旨在记录C的学习路线&#xff0c;望对大家有所帮助&#x1f647;‍ 希望我们一起努力、成长&…