HTTP协议简介

devtools/2025/3/16 12:30:33/

一、HTTP协议介绍

基本介绍:

HTTP:全称超文本传输协议,是用于从万维网服务器传输超文本到本地浏览器的传送协议。

HTTP是一种应用层协议,是基于TCP/IP通信协议来传输数据的,其中HTTP1.0、HTTP1.1、HTTP2.0均为TCP实现,HTTP3.0基于UDP实现。现主流使用HTTP1.0和HTTP3.0。

协议:为了使数据在网络上从源头到达目的地,网络通信的参与方必须遵循相同的规则,这套规则称为协议,它最终体现为在网络上传输的数据包的格式。

通俗点讲,协议就是要保证网络通信的双方,能够互相对接上号。就像是两个人传递纸条通过互相指定的暗号,如果发送天亮了,表示可以打游戏了等等。

 注意:当我们访问一些网页时,是显示通过HTTPS来进行通信的,并且当下大多数的网页都是通过HTTPS来进行通信的,因为HTTPS在HTTP的基础上做了一个加密的工作。

二、HTTP协议的工作过程

当我们在浏览器输入一个网址,此时浏览器就会给对应的服务器发送一个HTTP请求,对应的服务器收到这个请求后,经过计算处理,就会返回一个HTTP响应。并且当我们访问一个网站时,可能涉及不止一次的HTTP请求和响应的交互过程。

基础术语:

客户端:主动发起网络请求的一端

服务端:被动接收网络请求的一端

请求:客户端给服务端发送的数据

响应:服务端给客户端返回的数据

HTTP协议的重要特点:一发一收,一问一答

https://i-blog.csdnimg.cn/direct/741d26602bb44cd6ae5b310708dc85b5.png" width="561" />

注意:网络编程中,除了一发一收之外,还有其他的模式

多发一收:例如上传大文件

一发多收:例如看直播时,搜索一个词条可以得到多个视频源

多发多收:例如串流

三、Fiddler抓包工具介绍

抓包工具的使用:

当我们访问一个网站时,可能涉及不止一次的HTTP请求和响应的交互,为此为了更加清楚的了解我们访问一个网站时HTTP请求/协议是怎么交互的,由于HTTP是一个文本格式的协议,就可以通过以下两种方式:

方式一:通过F12打开浏览器的开发者工具,点击Network标签页,然后刷新页面。显示的每一条记录都是一次HTTP请求/响应

https://i-blog.csdnimg.cn/direct/54c2a11fec0f4f90b3dae237dda1ff5a.png" width="1905" />

 方式二:抓包工具,这里以Fiddler为例,它能够直接读取你电脑上网卡的信息,网卡上有什么数据流动,它都能够感知到并且显示出来。

Fiddler使用方式:

打开Fiddler,然后打开你要访问的网站,访问该网站的HTTP请求和响应就会显示在Fiddler上

https://i-blog.csdnimg.cn/direct/7cc17a1e7f584d5b887972d6030cd6b0.png" width="1905" />

 当我们选择好我们要查看的HTTP/HTTPS请求和响应时,右上栏就会显示具体的请求报文内容,右下角就会显示具体的响应报文内容。

请求和响应的详细数据,可以通过右下角的view in Notepad键通过记事本打开

为了方便我们抓取我们自己想查看的抓包结果,可以通过ctrl+a全选左侧的抓包结果,ctrl+x删除选中的所有抓包结果,再进行网页的刷新就行

相应的正文往往是被显示在浏览器上,最常见的响应格式就是html,很多网站返回的html是压缩过的(因为压缩过后,网络传输的数据量就变更少了,即节省了网络带宽),所以需要进行解压缩decode

https://i-blog.csdnimg.cn/direct/24ed48697d5b448ea8789fac09c3aff9.png" width="969" />

 注意:直接安装的Fiddler是无法抓取HTTPS的请求的,需要配置才能够抓取。

抓包结果:

接下来我们抓取搜狗首页的HTTP请求,抓取到的结果如下

完整的HTTP请求:

https://i-blog.csdnimg.cn/direct/6b70d2a2239f45a29793092f854e42a9.png" width="1906" />

完整的HTTP响应:

https://i-blog.csdnimg.cn/direct/3bc0027a96754f83ac4038ccaf25508e.png" width="1906" />

 抓包工具原理:

Fiddler之所以能够获取到这些HTTP请求的详细情况,主要是因为此处的Fiddler相当于一个代理程序。

代理,也可以理解为中介或代购,就比如你想通过中介去租房或者买房,你会将你的需求告诉给中介,中介就会去徐州那好哦房源并将找到的结果的详细情况反映给你。

 上述我们通过Fiddler来抓取搜狗首页的HTTP请求时,首选我们会访问sogo.cn,即把HTTP请求发送给Fiddler,Fiddler再把请求转发给搜狗的服务器,当搜狗的服务器返回数据时,Fiddler就会先拿到返回数据,再把数据给浏览器。

https://i-blog.csdnimg.cn/direct/6bd009d4575d496e8e2623d443de2f76.png" width="956" />

 四、HTTP协议格式总览

HTTP请求格式:

https://i-blog.csdnimg.cn/direct/d6eab00699df4cf3b1c9f939c3dfed12.png" width="1759" />

 HTTP响应格式:

https://i-blog.csdnimg.cn/direct/55a54d7243fb454e9765480df56df7a0.png" width="1754" />

 

注意:为什么HTTP报文中要存在空行呢?

因为HTTP协议并没有规定报头部分的键值对有多少个,使用空行就相当于是报文的结束标记或报文和正文之间的分隔符

五、HTTP请求

URL 基本介绍


平时我们俗称的”网址“,其实就是 URL(Uniform Resource Locator),翻译为统一资源定位符
互连网上的每个文件都有一个唯一的 URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它


URL 基本格式


URL 的标准格式如下:

协议类型:[//服务器地址[:端口号]][/资源层级 UNIX 文件路径]文件名[?查询字符串][#片段标识符]

URLencode介绍

当我们用搜狗搜索时,通过抓包,我们会得到下面这个URL

GET https://www.sogou.com/web?query=%E8%9B%8B%E7%B3%95&_asf=www.sogou.com&_ast=&w=01019900&p=40040100&ie=utf8&from=index-nologin&s_from=index&sut=1129&sst0=1646360982664&lkt=0%2C0%2C0&sugsuv=003B56A6DA4C2A82610BB3A8CFD5D583&sugtime=1646360982664 HTTP/1.1
 

需要URLencode的原因:

这是因为像 /、?、: 等这样的字符,已经被 url 当做特殊意义理解了,因此这些字符不能随意出现。如果某个参数中需要带有这些特殊字符,就必须先对特殊字符进行转义,即 urlencode
一个中文字符由 UTF-8 或者 GBK 这样的编码方式构成,虽然在 URL 中没有特殊含义,但是仍然需要进行转义,否则浏览器可能把 UTF-8/GBK 编码中的某个字节当做 URL 中的特殊符号

 认识方法

HTTP中的方法,就是HTTP请求报文中的首行的第一个部分。

https://i-blog.csdnimg.cn/direct/eece1dd40888476391da1a22c3b7078d.png" width="1346" />

 GET请求示例:

https://i-blog.csdnimg.cn/direct/16cd21b187f24157b5bf56494cba7c36.png" width="1907" />

 POST方法:

POST方法也是一种常见的方法,多用于提交用户输入的数据给服务器(如登录页面)。

POST请求示例:

https://i-blog.csdnimg.cn/direct/9f996350808a4075a40e541e1d3189f9.png" width="1907" />

 经典面试题

GET和POST区别:

GET 习惯上用于从服务器获取数据;POST 习惯上是客户端给服务器提交数据

幂等是什么?

一个 HTTP 方法是幂等的,指的是同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的。换句话说,幂等的方法不应该具有副作用。

关于GET请求的URL长度问题的误解:

网上有一种错误的解释: GET 请求的长度是存在上限的,这个上限有被说成 1024kb、2048kb 等等,并且 GET 请求存在上限的原因是 URL 的长度存在上限


RFC 2616 标准正确的解释: HTTP 协议由 RFC 2616 标准定义,该标准中明确说明 "Hypertext Transfer Protocol -- HTTP/1.1," does not specify any requirement for URL length,即没有对 URL 的长度有任何限制


URL 的长度取决因素: 实际上 URL 的长度取决于浏览器的实现和 HTTP 服务器端的实现。在浏览器端,不同的浏览器最大的长度是不同的,但是现在浏览器支持的长度一般都很长;在服务器端,一般这个长度是可以配置的

注意:GET不仅可以传输文本数据,也可以传输二进制数据

Cookie

Cookie是什么?

Cookie 是浏览器提供的一种让程序员在本地存储数据的能力

为什么需要Cookie?

如果没有 Cookie,直接将要存储的数据保存在客户端浏览器所在的主机的硬盘上,那么就会出现很大的安全风险,比如当你不小心打开某个不安全的网站,该网站就可以在你的硬盘上写一个病毒程序,那么你的电脑就挂了!因此浏览器为了保证安全性,就禁止网页中的代码访问主机的硬盘(无法在 JS 中读写文件),因此也就失去了持久化存储的能力,故 Cookie 就很重要!

Cookie里面存储的是什么?

Cookie 中存储了一个字符串,是键值对结构的,键值对之间使用 ;分割,键和值之间使用 = 分割

Cookie来自哪里,如何往Cookie中存储数据?

Cookie 这个数据可能是客户端(网页)自行通过 JS 写入的,也可能来自于服务器在 HTTP 响应的 header 中通过 Set-Cookie 字段给浏览器返回数据。

Cookie 在浏览器这边是按照域名维度来存储的,例如我们打开 CSDN 的首页,点击网址栏左边的一把小锁就能找到 Cookie,我们就可以看到打开这个网页时,系统按照不同域名设置了 Cookie。

https://i-blog.csdnimg.cn/direct/dab81e7230cc4144954f113836866205.png" width="1138" />

每一组都是中都存储了 Cookie,我们点开 csdn.net 这组的 Cookie 就能看到具体的数据

https://i-blog.csdnimg.cn/direct/b6add1e45dbc4196a75314a9892b3642.png" width="546" />

Cookie要到哪里去?

Cookie 字段会在后续的请求中,把浏览器本地存储的这些键值对再发送回服务器

https://i-blog.csdnimg.cn/direct/95f8d5e052124d8c9cc9344d9c1956ad.png" width="655" />

Cookie 的一个经典应用就是保持客户端的登录状态

https://i-blog.csdnimg.cn/direct/f6920d8766194a0a9fc2b5e311222d53.png" width="654" />

六、HTTP响应

状态码

200 OK        表示访问成功

404 NOT FOUND        表示没有找到资源

5xx        表示服务器内部出现错误

3xx        表示临时重定向

1xx        表示连接中间状态


http://www.ppmy.cn/devtools/167555.html

相关文章

网络层协议

目录 一、网段划分的发展过程 (1)固定长度的网络号 (2)子网掩码---网络号长度不再固定 二、公有IP和私有IP (1)私有IP (2)NAT技术 三、IP协议报头 分片操作 四、查看一下li…

【Godot】CanvasItem

(参考自deepseek回答) 在 Godot 引擎中,CanvasItem 是一个非常重要的类,它是所有 2D 渲染对象的基础类。CanvasItem 提供了 2D 渲染、变换、绘制和可见性控制等功能,是 Godot 2D 系统的核心组成部分。 1. CanvasItem 的…

重塑企业存储性能的终极引擎-NVMe集群

在实时交易系统每秒处理百万级请求的时代,在自动驾驶汽车每秒生成GB级数据的场景下,传统存储协议已难以为继。NVMe(Non-Volatile Memory Express)集群作为存储技术的革命性突破,正在重新定义企业级存储的性能上限。根据…

Android中的FragmentTransaction是什么以及如何使用它

Android中的FragmentTransaction是一个非常重要的类,它用于管理Fragment的添加、替换、移除等操作。通过FragmentTransaction,开发者可以在Activity中灵活地管理多个Fragment,实现页面的切换和交互,从而提高用户体验和界面灵活性。…

在windows上通过idea搭建doris fe的开发环境(快速成功版)

一、前置环境准备 1. 准备Linux环境,我起的虚机,使用CentOS8,4核、12G,磁盘50G 1.1.备份yum源 # 系统下载连接:magnet:?xturn:btih:9DB46A612D04763AA7DB02A0FF63EDE2EA555867&dnCentOS-8.1.1911-x86_64-dvd1.…

Linux下对2TB磁盘的分区、格式化、挂截目录介绍

问题背景: 在当今,大硬盘比比皆是。如果手里拿到了一块2TB或更大的硬盘,‌fdisk‌ 命令显示已不再适用,而parted 命令将可能是我们的最佳实践方案,因此,我们需要学习和掌握parted命令及相关命令的使用。 以…

【附JS、Python、C++题解】Leetcode面试150题(9)——三数之和

一、题目​​​​​ 15. 三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足: i!j、i!k 且 j! k ,同时还满足:nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意…

Java开发之数据库应用:记一次医疗系统数据库迁移引发的异常:从MySQL到PostgreSQL的“dual“表陷阱与突围之路

记一次医疗系统数据库迁移引发的异常:从MySQL到PostgreSQL的"dual"表陷阱与突围之路 一、惊魂时刻:数据库切换引发的系统雪崩 某医疗影像系统在进行国产化改造过程中,将原MySQL数据库迁移至PostgreSQL。迁移完成后,系…