计算机网络——应用层重点协议【HTTP协议】

news2025/7/10 21:45:28

目录

1、HTTP是什么

抓包工具Fidder的下载及使用

2、HTTP协议工作过程

3、HTTP协议格式

HTTP请求:

HTTP响应:

协议格式总结:

4、HTTP请求

 4.1、URL / URI

4.1.1、URL(I)基本格式

4.1.2、URL encode

4.2、认识“方法”

4.2.1、GET方法

4.2.2、POST方法

4.2.3、GET和POST的区别

4.2.4、其他方法

4.3、认识请求“报头”[header]

HOST

Content-Length

Content-Type

User-Agent(UA)

Referer

5、HTTP响应详解

 5.1、认识“状态码”

 5.2、认识响应“报头“

Content-Type


1、HTTP是什么

全称:超文本传输协议——应用层协议

        HTTP往往是基于传输层TCP协议实现的(HTTP1.0、HTTP1.1、HTTP2.0基于TCP,HTTP3.0基于UDP实现) 

        我们大家常见的,在浏览器的地址栏里输入一个“网址”,回车后就可以看到网页,这个过程中就是通过HTTP和服务器进行了通信

         HTTP协议属于典型的“一问一答”模型的协议

        那如何才能看到HTTP的报文格式或信息,这就需要对HTTP进行抓包,下面介绍一下如何进行HTTP的抓包。

抓包工具Fidder的下载及使用

        Fidder是一款专门抓HTTP/HTTPS包的软件,它的原理就是充当一个代理,比如当访问一个网站时,会先将请求发送给Fidder,然后Fidder再把请求发送给目标网页的服务器,同理服务器返回的响应也一样,先需要经过Fidder,再发送给客户端。

        这样,Fidder就能够捕获到HTTP的请求与响应,由于Fidder充当的是一个“代理”的角色,所以使用Fiddder时不能够有其他使用或修改代理的软件运行,否则Fidder就不能够捕获到HTTP/HTTPS的包。

下载

官网网址: https://www.telerik.com/fiddler

打开网页:

官网首页

往下翻:

下载

 下载

后续填写信息,下载一路next即可 

简单使用

 首先,找到Tools选项,选择Options,找到HTTPS

1

 如图

2

 会有一个窗口跳出来,一定要点yes,不然就要重装Fidder了,这样Fidder就可以使用了。

Fidder左侧是捕获到的HTTP(s)包,双击某个包后,会在右侧显示详细信息。

图片

 2

 显示详细信息后,使用Raw模式可以看到http的本体。

3

 点击View in Notepad可以使用记事本打开,查看详情。

4

 对于右侧的上下两栏,上面是请求,下面是对应的响应。

我们发现响应里面的内容有一串乱码,这可能是压缩或者加密了,可以点击下面黄色的按钮来显示服务器的响应结果。

6

 基本的简单使用就这了


2、HTTP协议工作过程

上图理解:

注:HTTPS只是在HTTP基础上做了一个加密解密的工作 


3、HTTP协议格式

结合抓包来分析理解:

HTTP请求:

  • 首行:方法 + url + 版本
  • Header:请求的属性,冒号分割的键值对,遇到空行则结束
  • Body:空行后的内容(如果Body存在,则在Header中会有一个Content-Length属性来标识Body的长度 

HTTP响应:

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

协议格式总结:

 


4、HTTP请求

 4.1、URL / URI

URI即网络资源标识符,URL即网络资源定位符,前者是使用唯一字符串来标识互联网中某一资源,后者使用字符串来表示某个资源的位置,URL可以理解为URI的一种实现,就像接口与实现类的关系一样。

4.1.1、URL(I)基本格式

url

协议方案名:必选项,使用 http 或https等协议方案名获取访问资源时要指定协议类型。不区分字母大小写,最后附一个冒号:,使用//与后面的字段分隔。
也可使用 jdbc:mysql:// 或 javascript: //这类jdbc程序或脚本程序的方案名。

登录信息:可选项,这是上古时期上网的时候,在这里会体现出账号与密码,现在基本上没有了,使用@符号与后面的字段分隔。

服务器地址:必选项,可以使用域名和IP地址来表示,使用:与端口号分隔,没有端口号:省略。

端口号:可选项,表示访问主机上哪一个应用程序,该字段为空,浏览器会分配默认的端口号,http是80,https是443。

文件路径:必选项,描述访问服务器的资源是什么,最简单的路径就是一个/,你访问很多网站的首页的时候,最后都会有一个/,使用?与查询字符串分隔。

查询字符串:可选项,表示浏览器或者客户端传给服务器自定义的信息,对获取的资源提出进一步的要求,一般是程序员自定义,所以如果不是你自己写的,大概率看不懂,使用#与片段标识符分隔。

片段标识符:可选项,表示访问页面的子位置,能够控制浏览器滚动到某一位置。

HTTP 协议使用 URI 定位互联网上的资源。正是因为 URI 的特定功能,在互联网上任意位置的资源都能访问到。

4.1.2、URL encode

        如果查询字符串(query string)的内容包含一些具有特定含义的字符需要进行转义,如/,?,&等,如果含有这些字符,会将这些字符替换为%字符的ASCII码,这个过程就是encode,反过来将这些转义的字符串解析为原来的字符,这个过程就是decode。

比如,你在浏览器上搜索C++,在URL上就会得到C%2B%2B这样的字符串。
c++

4.2、认识“方法”

各方法功能:

其中最最常用的方法就是GET和POST方法 

4.2.1、GET方法

GET:获取资源

        在浏览器中直接输入URL,此时浏览器就会发送出一个GET请求(HTML中的link,img,script等标签可以出发GET请求,以及JavaScript中的ajax也能构造GET请求)

        GET 方法用来请求访问已被 URL 识别的资源。指定的资源经服务器端解析后返回响应内容。也就是说,如果请求的资源是文本,那就保持原样返回;如果是像 CGI(CommonGateway Interface,通用网关接口)那样的程序,则返回经过执行后的输出结果。

咱们来抓包看看:

GET请求的特点:

  • 首行的第一部分为GET
  • URL的query string 可以为空,也可以不为空
  • header 部分有若干个键值对结构
  • body 部分为空 

4.2.2、POST方法

POST:传输实体主体

        虽然用 GET 方法也可以传输实体的主体,但一般不用 GET 方法进行传输,而是用 POST方法。虽说 POST 的功能与 GET 很相似,但 POST 的主要目的并不是获取响应的主体内容。

抓包瞅瞅:

POST 请求的特点:

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

4.2.3、GET和POST的区别

  • 语言不同:GET一般用于获取数据,POST一般用于提交数据
  • GET的body一般为空,需要传递的数据通过query string 传递
  • POST的query string 一般为空,需要传递的数据通过body传递
  • GET请求一般是幂等的,POST请求一般不是幂等的(多次请求得到的结果一样的,就视为幂等)
  • GET可以被缓存,POST不能被缓存
  • GET和POST谁更安全?是否安全取决于前端在传输密码等敏感信息时是否进行加密,与GET和POST无关
  • 标准中没有规定GET的URL长度,也没有规定POST的body的长度,传输数据量多少,完全取决于不同浏览器和不同的服务器之间的实现的区别
  • “GET只能传输文本数据,POST可以传输二进制数据”,说法有问题的,GET的query string 虽然无法直接传输二进制数据,但是可以针对二进制数据进行url encode 

4.2.4、其他方法

PUT:传输文件
PUT 方法用来传输文件。就像 FTP 协议的文件上传一样,要求在请求报文的主体中包含文
件内容,然后保存到请求 URI 指定的位置。
该方法在HTTP/1.1无验证机制,不安全,配合验证机制可以开放使用该方法。

HEAD:获得报文首部
与GET的区别就是HEAD只返回报文的首部。

DELETE:删除文件
DELETE 方法按请求 URI 删除指定的资源,不安全,需配合验证机制使用。

OPTIONS:询问支持的方法
询问服务器支持哪些方法。

TRACE:追踪路径
TRACE 方法是让 Web 服务器端将之前的请求通信环回给客户端的方法,不常用。

CONNECT:要求用隧道协议连接代理
CONNECT 方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行 TCP 通信。主要使用 SSL(Secure Sockets Layer,安全套接层)和 TLS(Transport Layer Security,传输层安全)协议把通信内容加 密后经网络隧道传输。
 

4.3、认识请求“报头”[header]

header的整体的格式也是“键值对”结构

每个键值对占一行,键和值之间使用分号分割

HOST

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

Content-Length

表示body中的数据的长度

Content-Type

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

User-Agent(UA)

表示浏览器、操作系统的属性,形如

其中: 

Windows NT 10.0 ; Win64 ; x64 表示操作系统信息
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36 表示浏览器信
.

Referer

表示这个页面是从哪个页面跳转过来的 

 如果直接在浏览器中输入URL, 或者直接通过收藏夹访问页面时是没有 Referer .

Cookie中存储了一个字符串,这个数据可能是客户端自行通过JS写入的,也可能是来自于服务器 

        因为HTTP是一种无状态的协议,它无法对之前的发生过的请求和响应状态进行记忆,如果遇到需要登录的页面,登录之后,再刷新,是需要重新进行登录的,这个就非常的难受,为了解决这个问题,引入了Cookie机制。

好处:可以减少服务器的 CPU 及内存资源的消耗。

        Cookie是浏览器为页面提供的一种持久化储存数据的机制,即就是将数据存储磁盘上,不会因为浏览器或者电脑重启而导致数据丢失。

        Cookie会按照域名来进行分类并组织,针对每一个域名,都会分配一个“小房间”(一块独立的储存空间),这些小房间之间是相互独立的,在每个“小房间”里面会按照键值对的方式储存数据(值),每个键值对之间使用&来进行分隔。

        那Cookie的数据从哪里来?其实是从服务器返回给客户端的,服务器完成客户端的身份认证之后会通过的头部字段Set-Cookie来给客户端响应信息。

 就像下面服务器返回的Cookie一样:

Cookie

        Cookie的作用其实就像医院里面的就诊卡一样,就诊卡里面有就诊人的基本信息,刷卡之后会根据这些基本信息可以查出在当前医院里面的历史就诊记录等更加详细的信息,这张就诊卡就相当于Cookie,而根据就诊卡信息获得的详细记录叫做session,每个session里面记录了就诊用户的许多关键信息,例如历史就诊记录,要做的检测等等,每一个session都有对应的sessionId,即会话标识,服务器返回给客户端的Cookie响应就有这个会话标识,然后访问后续页面的,根据这个会话标识就能从服务器找到对应的信息进行登录,这样刷新页面就不用在重复登录了。

下图所圈的部分就有可能就是一种sessionId。
sessionid


5、HTTP响应详解

 5.1、认识“状态码”

        状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了错误。

分类:

class

 部分常见状态码:

ps:此图来源于网络 

 5.2、认识响应“报头“

Content-Type

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

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

本期结束啦!!!下期见,哈哈哈,很久没更了

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

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

相关文章

五、ROS2接口及其使用

接口,即interface,其实是一种规范。 举个例子,不同厂家生产出不同类型的激光雷达,每种雷达的驱动方式,扫描速率都不相同。 当机器人进行导航时,需要激光雷达的扫描数据,假如没有统一接口&#x…

Nginx (6):nginx防盗链配置

先说一下含义,就是想让nginx里的静态资源只供它反向代理连接的内部服务器去访问,其他人想访问,就不给。比如01虚拟机充当nginx服务器,它里面存了很多静态资源,04虚拟机proxy_pass到01虚拟机,想访问它的页面…

Linux--信号量共享内存

1.基础知识: (1)共享内存是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间的数据传递不再涉及内核,即进程不再通过执行进入内核的系统调用来传递彼此的数据。 (2)共享…

MySQL浅析之架构概览

MySQL主要分为Server层,跟存储引擎层。 Server层负责“逻辑处理”,包括连接器、分析器、优化器、执行器以及所有内置函数。所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。 存储引擎层跟文件系统交互,负责数…

bug探索之路:List<Map>get取出元素却是String?

一、bug初现峥嵘 有一说一我定义的List<Map>对吧&#xff0c;我get(0)取出的元素也应该是Map类型没问题吧。不行&#xff0c;编译器告诉我&#xff0c;java.lang.String cannot be cast to java.util.Map。 这个意思就是说&#xff0c;你这个就是String类型&#xff0c;…

Spring Cloud Gateway夺命连环10问?

这篇文章介绍下微服务中的一个重要角色&#xff1a;网关&#xff0c;对于网关如何选择&#xff0c;由于阿里系暂时未出网关&#xff0c;当然是选择了Spring cloud Gateway&#xff0c;毕竟是亲儿子。 文章目录如下&#xff1a; ​ 编辑切换为居中 添加图片注释&#xff0c;不…

[附源码]java毕业设计智能超市导购系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【科学文献计量】RC.networkBibCoupling()中的参数解释

RC.networkBibCoupling中的参数解释 1 数据2 RC.networkBibCoupling()中的参数解释2.1 测试weighted参数2.2 测试fullInfo参数2.3 测试addCR参数1 数据 使用web of science中的数据,借助metaknowledge库读入到python中,然后截取2020-2021年的数据构建网络 2 RC.networkBib…

CrystalNet ADO.Net VCL for Delphi

CrystalNet ADO.Net VCL for Delphi ADO。用于Delphi的Net DAC被描述为数据库的最快和最可靠的连接&#xff0c;以及使用ADO技术的虚拟和数据库的替代方案。NET在Delphi。它能够为用户和开发人员提供对信息源的数据访问&#xff0c;这些信息源不喜欢SQL Server、Oracle、Vista…

Flutter高仿微信-第42篇-创建群

Flutter高仿微信系列共59篇&#xff0c;从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图&#xff1a; 实现代码&#xff1a; /*** Author : wangning* Email : maoning20080809163.c…

ARM S5PV210的启动过程

一、内存 SRAM 静态内存 特点就是容量小、价格高&#xff0c;优点是不需要软件初始化直接上电就能用。DRAM 动态内存 特点就是容量大、价格低&#xff0c;缺点就是上电后不能直接使用&#xff0c;需要软件初始化后才可以使用。 单片机中&#xff1a;内存需求量小&#xff0c;而…

秉持技术普惠的华为,致力于无处不在的联接

编辑 | 阿冒 设计 | 沐由经济学家托马斯弗里德曼在《世界是平的》一书中曾经指出&#xff1a;“科技和通信领域如闪电般迅速的进步&#xff0c;使全世界的人们可以空前地彼此接近。”然而&#xff0c;在世界各国和地区的政府工作报告中&#xff0c;“数字鸿沟”一词出现的频…

致敬最美逆行者网页设计作品 大学生抗疫感动专题网页设计作业模板 疫情感动人物静态HTML网页模板下载

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

【Matlab代码】基于遗传算法和蚂蚁优化算法的路径优化问题

目录 1 概述 2 Matlab代码 3 运行结果 1 概述 在1959年&#xff0c;Dantzing 和 Ramser在经过实验和思考后&#xff0c;首次提出配送车辆路径优化问题。在物流运输中配送是重要的环节&#xff0c;准确选择配送车辆路径能有效缩短运输时间、降低运输成本、满足顾客需求等目的…

C语言 * 数组的解析 *

目录 一&#xff1a;一维数组的创建和初始化 1.1 数组的创建 1.2 数组的初始化 1.3 一维数组的使用 1.4 一维数组在内存中的存储 二&#xff1a;二维数组的创建和初始化 2.1 数组的创建 2.2 数组的初始化 2.3 一维数组的使用 2.4 一维数组在内存中的存储 2.5 数组越…

黑苹果系统安装常见问题汇集

常见问题 黑苹果折腾之路上遇到的问题多种多样&#xff0c;这里把常见问题分为安装篇、使用篇、进阶篇。 安装篇 如何安装黑苹果&#xff1f; 目前主要有两种方式&#xff0c;第一种是推荐的方式&#xff1a;下载黑苹果安装镜像 → 刻录到U盘 → 调整配置文件 → 格式化准备…

又一款机器学习模型解释神器:LIME

在机器学习的许多应用中&#xff0c;要求用户信任模型来帮助他们做出决策。医生肯定不会仅仅因为“模型这么说”就给病人做手术。即使在风险较低的情况下&#xff0c;例如从 Netflix 选择要观看的电影时&#xff0c;在我们根据模型放弃几个小时的时间之前&#xff0c;也需要一定…

红黑树封装 map/set 及其迭代器(C++)

目录 一、map/set 的封装 1.1 封装思路 1.2 红黑树节点调整 1.3 map 和 set 的定义 1.4 仿函数 KeyOfValue 1.5 map/set 的插入 二、map/set 迭代器实现 2.1 迭代器的定义 2.2 解引用运算符重载 2.3 成员访问运算符重载 2.4 (不)等于运算符重载 2.5 begin() 与 end…

[附源码]java毕业设计智慧农业销售平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

认知电子战 | 电子战简介

1 电子战的基本概念 电子战(Electronic Warfare,EW)也叫做电子对抗(Electronic Counter Measures,ECM) 简洁定义: 电子战是为确保我方使用电磁频谱,同时阻止敌方使用电磁频谱所采取的战术与技术 完善定义: 利用电磁能、定向能、水声能等的技术手段,确定、扰乱、削弱…