【网络协议大花园】应用层 http协议的使用小技巧,用好了都不用加班,效率翻两倍(上篇)
本篇会加入个人的所谓鱼式疯言
❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言
而是理解过并总结出来通俗易懂的大白话,
小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.
🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人能接受我们这个概念 !!!
引言
HTTP 协议(超文本传输协议)是万维网中数据通信的基础。它定义了客户端与服务器之间如何进行交互,确保信息能够准确、高效地在网络中传输。从简单的网页浏览到复杂的网络应用,HTTP 协议都发挥着至关重要的作用,是互联网世界不可或缺的一部分。
目录
-
http的初识
-
http的抓包工具
-
http的报文格式
一. http的初识
1. http协议是什么?
http: 叫超文本传输协议, 用于服务器和客户端互相通信的应用层协议。
http主要负责规定 客户端与服务器 之间的通信, 包括
传输的方式
和数据格式
。
关于传输的方式和数据格式在下篇文章中, 小编会重点细细道来。
简单来说吧 ! 它是 互联网上运用最广泛的协议 (没有之一), 我们平常的日常生活中离不开 http 协议, 像 打开浏览器, 使用手机app, 后端开发使用分布式结构都离不开http协议 。
鱼式疯言
如果是作为一名Java程序猿, 作为 web开发 是经常和应用层协议打交道的, 所以日常开发中是离不开http的, 小伙伴要学好哦~
2. http 的特点
如上图:
在 http3.0 的版本之前是基于Tcp 实现的 , 而 http 3.0 版本是基于 Udp实现的 。
而目前大规模互联网 见到最多使用的最多 的也就是
http1.1
版本。
http 协议是 一问一答模型
的协议
一问一答就是:
客户端——服务器
客户端发送一个请求, 服务器响应一个回复。
打开网页的过程, 就是一问一答的场景。
鱼式疯言
补充说明:
- 像其网络通信过程中有:
一问多答
:文件下载
多问一答
: 大文件传送
多问多答
: 远程桌面(远程控制)
二. http的抓包工具
1. 抓包是什么?
要想学习好http 协议,
抓包
是每个程序猿必不可少的技能。
抓包: 把通过 网卡上的数据获取到, 并解析出来。
平常开发人员很少抓Tcp的包, 而是进行抓http的包。
我们可以通过抓包工具来获取到 http 请求和响应的详细情况 。
2. 抓包工具
在这里小编推荐使用 Fiddler
的抓包工具, 这个抓包工具简单操作, 门槛较低, 特别适合我们刚接触http的初学者。
下面我们来看看下载流程吧:
<1>. 下载流程
小伙伴先点开下方链接
Fidder 下载链接
使用经典版下载(最近版是收费的)
直接下载即可。
<2>. 下载完毕后的操作
点击打开
Fiddler
软件
安装配置, 注意点击的方位
下面必须勾选Yes, 否则是无法进行抓包的, 这点后面的文章详讲, 小伙伴们一定要记得勾选, 如果勾选到No 了, 就只能卸载重装了 。
然后就是操作了
如下图, 就是 Fiddler
可以正常使用了
像平常要查看一个自己包时
首先是 ctrl + A + delete
然后进行一个网站
就会得到 请求和响应的包 , 我们 随机点击一个 , 就可以接收到
如上图就可以得到一个 http请求报文
如上面的过程就是 查看自己 http 报文的基本抓包过程 , 小伙伴多多抓包, 定能熟悉http 。
鱼式疯言
RAW标签页
是 http的原始数据
- 当发送一段请求时, 是往
Tcp Socket
包中写入一段字符串
。
- 当返回一段响应时, 是从
Tcp Socket
包中 读出一段字符串并解析 。
- 注意抓包是 抓自己的包是允许的 , 如果是 抓别人网站的包 就很
刑
的 。
三. http的报文格式
下面以百度服务器的请求和响应报文为例:
1. 请求报文
<1>. 首行
GET https://img-s.msn.cn/tenant/amp/entityid/BB1hxbpr?w=16&h=16&q=100&m=6&f=png&u=t HTTP/1.1
GET 是方法名 : 表示请求的动作 , 其中GET 就是客户端要向服务器拿数据。
https://img-s.msn.cn/tenant/amp/entityid/BB1hxbpr?w=16&h=16&q=100&m=6&f=png&u=t
: 称之为 URL
,涉及内容比较多也重要, 下面小编细细讲解
HTTP/1.1
: 这个标志当下使用的 http 是1.1 版本的。
<2>. 请求头(header)
Host: img-s.msn.cn
Connection: keep-alive
sec-ch-ua-platform: "Windows"
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0
sec-ch-ua: "Microsoft Edge";v="129", "Not=A?Brand";v="8", "Chromium";v="129"
sec-ch-ua-mobile: ?0
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
X-Edge-Shopping-Flag: 1
Sec-MS-GEC: 18AE840C02E7BB0CBC4B5CD23B77A887FC776399E6AF2BC73D86108F8080A847
Sec-MS-GEC-Version: 1-129.0.2792.65
Sec-Fetch-Site: same-site
Sec-Fetch-Mode: no-cors
Sec-Fetch-Dest: image
Referer: https://ntp.msn.cn/
Accept-Encoding: gzip, deflate, br, zstd...
类似以上这些 首行以下到空行结束 都是 报头内容 , 并且每一行的报头都是 键值对 的形式, 由
:和 空格
分割开。
鱼式疯言
http的报文是键值对
是很多的, 不同的键值对是http自身规定的 , 但 人为也可以规定的
关于 面试常考, 工作常用 的 报头的键值对
, 小编在下篇中会重点讲解~
<3>. 空行
空行唯一的作用就是 分隔报头和正文 , 是作为 报头的结束标志。
<4>. 正文(body)
有些 请求报文有正文 ,有些 请求报文没有正文 , 正文其实就是提供给服务器的数据 。
{"adRefreshVariant":"","locale":"zh-cn",
"rid":"67000138b1ed4560b8ac438861d00965","partnerId":"ntp","content":
{"sourceUrl":"https://ntp.msn.cn/edge/ntp","pageType":"edgechrntp","previousReservedRiverNativeAdCount":0,"previousRiverDualWideNativeAdCount":0,"previousRiverHalfNativeAdCount":0,"previousRiverNativeAdCount":0,
"verticalName":"edge","anaheimPageLayout":"informational","isXfeed":false,"audienceMode":"adult"}
,"user":
{"muid":"0642785F51D0686B1AEF6B1450936914","browserOptOut":false,"isAdblock":false,"gdpr":true},"placements":[{"region":"oneriver.main","indices":[1],"img":
{"w":300,"h":157}}],"extensions":{"taboola":
{"sessionId":"init"},"impressedCrids":
["SU1HOk9BREQyLjczNTMxMzkwMTk1MzBfMUpSUlhXTjNFVUJVUktOTERH","SU1HOk9BREQyLjgyNDY0MzI5MDIxMzlfMVZHM1c4NDZBWkFQVEpLMFA4"]},
"isCookieWallPresent":false,"isPeregrine":true,"device":{"isMobile":false}}
如上图: 空行以下为 正文(body)
, 正文一般都是程序猿自己去定义的。
鱼式疯言
总结说明:
请求的
http报文格式
: 首行——》 报头——》 空行——》 正文
一般来说, 使用 GET 方法的报文不含有正文 , 使用POST 方法的报文含有正文, 因为
POST 方法
一般就是用于给 服务器传输文件数据 。
2. 效应报文
效应报文的结构和请求报文的结构相似,但也有不同的地方。
<1>. 首行
HTTP/1.1 200 OK
HTTP/ 1.1 : HTTP的版本号
200: 表示是 HTTP的状态码
(下篇介绍)
OK: 对 状态码的说明
<2>. 响应头
Content-Type: application/json; charset=utf-8
Vary: Origin,Accept-Encoding
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Access-Control-Allow-Origin: https://ntp.msn.cn
Access-Control-Allow-Credentials: true
X-Content-Type-Options: nosniff
X-Cache: CONFIG_NOCACHE
Accept-CH: Sec-CH-UA-Arch, Sec-CH-UA-Bitness, Sec-CH-UA-Full-Version, Sec-CH-UA-Full-Version-List, Sec-CH-UA-Mobile, Sec-CH-UA-Model, Sec-CH-UA-Platform, Sec-CH-UA-Platform-Version
X-MSEdge-Ref: Ref A: 877BE17A0D7B4A0A958F80023506182E Ref B: BJ1EDGE0718 Ref C: 2024-10-04T14:57:25Z
Date: Fri, 04 Oct 2024 14:57:26 GMT
Content-Length: 8441
响应报头和请求报头相似 ,这里小编就不赘述了 。
<3>. 空行
空行唯一的作用就是 分隔报头和正文 , 是作为 报头的结束标志。
<4>. 正文(body)
define("superman-san/app/feed-ad/result_696f230",
["san","tslib","@searchfe/inject-js"],function(e,i,s){return l={0:function(t,a)
{t.exports=e},1:function(t,a){t.exports=i},10:function(t,a){t.exports=' <div
class="from c-font-normal {{footData.layout === \'s-news-special-item-tpl-2\' ?
\'from-tpl2\' : \'\'}}"> <span s-if="footData.tag" class="hot-point c-color-red
c-gap-right">{{ footData.tag }}</span> <a s-if="footData.source" class="c-gap-
right c-color-gray" href="{{footData.src_link ? footData.src_link :
footData.link_url}}" target="_blank" data-src="1" data-click="LOG_LINK">{{
footData.source }}</a> <span s-if="footData.src_time" class="src-time c-color-
gray2 c-gap-right">{{ footData.src_time }}</span> <span s-if="isAd" class="ad-
icon c-color-gray2">广告</span> <div s-if="showFeedback" class="{{isAd ?
\'nativead-dustbin\' : \'dustbin\'}}" data-click="LOG_BTN_DUSTBIN"> <i class="c-
icon"></i> </div> <div s-if="showTts" class="homepage-feed-tts"> <span
class="play-tts" data-nid="{{nid}}"> <i class="c-icon"></i> <p
class="tts-button-text">播报</p> </span> <span class="pause-tts" data-nid="
{{nid}}"> <i class="c-icon"></i> <p class="tts-button-text">暂停</p>
</span> </div> </div> '},109:function(t,a){t.exports=' <div s-if="adData.picNum
0" class="s-nativead-item s-news-special s-news-item {{adData.layout}} s-
opacity-blank8 clearfix" data-url="{{adData.link_url}}" data-rid="
{{adData.id}}" data-log="stype:11;picNum:{{adData.picNum}};title:
{{adData.title}};pos:{{pos}};st:nativead;" data-locate="{{pos}}" data-
imTimeSign="{{adData.imTimeSign}}" data-extra-
一般来说
响应的正文是
html
,css
,js
,图片
,MP3
,MP4
等…
鱼式疯言
响应报文: 首行——》 响应头——》空行——》 正文
3. URL
URL的初识
URL 是网络上 唯一资源的标识符 , 相当于在一个一个小房间, 每个小房间都是唯一的一种标识 。
在上面请求报文的首行:
https://baike.baidu.com/item/%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92
%8C%E5%9B%BD%E5%9B%BD%E5%BA%86%E8%8A%82/1041892?fr=ge_ala
https
: 协议名方案, 用于指明 URL给哪个协议使用!。
baike.baidu.com
: 域名, 域名就相当于IP地址
的 人为翻译版本 ,可以 方便阅读。
%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92 %8C%E5%9B%BD%E5%9B%BD%E5%BA%86%E8%8A%82/
: 这些是将一些特定的字符(中文, 特殊标点) 通过 Url encode
转码得到的结果,由 % 加 十六进制数字 组成 相当于 转义字符的含义 , 让服务器更好的去识别, 以免出现BUG问题 。
1041892
: 这个为端口号
, 用于 识别哪个应用程序的标识 。
https://csdnimg.cn/public/common/libs/jquery/jquery-1.9.1.min.js?1728096134092 HTTP/1.1
//csdnimg.cn/public/common/libs/jquery/jquery
上面这个称之为: 层次的路径 ,与文件路径相似, 路径有了才能找到对应的文件。
?fr=ge_ala
以问号开头的后面内容为 查询字符串
, 是 程序猿自行定义的 , 针对访问的资源进行补充说明
鱼式疯言
讲解了那么多细节概念:
但是对于Url 来说:
最核心的还是:
-
IP地址(域名)
-
端口号
-
层次的路径
-
查询字符串
其中层次的路径和 查询字符串是作为java程序猿日常开发中常用的。
总结
-
http的初识: 了解HTTP是应用层用来规定
传输方式和数据格式
的一种最常用的协议, 没有之一。 -
http的抓包工具:掌握FIddler 的下载流程并且会进行基础的抓包操作。
-
http的报文格式: 熟悉HTTP的报文的四种格式: 首行——》报头——》 空行——》正文 , 并
熟悉Url 格式的理解
。
如果觉得小编写的还不错的咱可支持 三连 下 (定有回访哦) , 不妥当的咱请评论区 指正
希望我的文章能给各位宝子们带来哪怕一点点的收获就是 小编创作 的最大 动力 💖 💖 💖
相关文章:

【网络协议大花园】应用层 http协议的使用小技巧,用好了都不用加班,效率翻两倍(上篇)
本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. 🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人…...

今日指数day8实战补充(上)
1.用户管理 1.多条件综合查询 1.1 多条件综合查询接口说明 1)原型效果 2)接口说明 功能描述:多条件综合查询用户分页信息,条件包含:分页信息 用户创建日期范围 服务路径:/api/users 服务方法࿱…...
Python 之进阶语法:with...as...
1. Python with…as…是什么 Python 的 with…as… 语句,就像一个贴心的管家,负责照顾你的资源,让你不再担心忘记关闭文件、网络连接或数据库事务等。这个管家在你进入“房间”时自动打开门,离开时帮你把门关上,真的是…...

嵌入式硬件设计知识详解
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
计算机网络:物理层 —— 信道及其极限容量
文章目录 信道信道的极限容量信号失真失真类型产生信号失真的主要因素 奈式准则码元传输速率香农公式 信道 信道是指信息传输的通道或介质。在通信中,信道扮演着传输信息的媒介的角色,将发送方发送的信号传递给接收方。 信道可以是无线信道,…...

面向对象特性中 继承详解
目录 概念: 定义: 定义格式 继承关系和访问限定符 基类和派生类对象赋值转换: 继承中的作用域: 派生类的默认成员函数 继承与友元: 继承与静态成员: 复杂的菱形继承及菱形虚拟继承: 虚…...

C++ | Leetcode C++题解之第455题分发饼干
题目: 题解: class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {sort(g.begin(), g.end());sort(s.begin(), s.end());int m g.size(), n s.size();int count 0;for (int i 0, j 0; i < …...

java版基于Spring Boot + Mybatis在线招投标|评标|竞标|单一采购|询价|邀标|在线开标|招标公告发布|评审专家|招投标采购系统源码
一、项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,…...

Anaconda的安装与环境设置
文章目录 一、Anaconda介绍二、Anaconda环境搭建1. 下载Anaconda(1)官网下载(2)清华大学镜像 2. 安装Anaconda3.配置环境变量4.检验conda是否安装成功5.更改镜像源6.若菜单栏没有conda prompt 三、虚拟环境1.创建、查看、删除虚拟环境2.激活、退出虚拟环境 四、CUDA、Pytorch、…...

使用FastAPI做人工智能后端服务器时,接口内的操作不是异步操作的解决方案
在做AI模型推理的接口时,这时候接口是非异步的,但是uvicorn运行FastAPI时就会出现阻塞所有请求。 这时候需要解决这个问题: api.py: import asyncio from fastapi import FastAPI from fastapi.responses import StreamingResp…...
Leetcode 3312. Sorted GCD Pair Queries
Leetcode 3312. Sorted GCD Pair Queries 1. 解题思路2. 代码实现 题目链接:3312. Sorted GCD Pair Queries 1. 解题思路 这一题的话坦率来说没有搞定,后来是找的大佬的代码抄了一下…… 整体来说这道题思路上还是比较暴力的,还是一个二重…...
用 Delphi 做了一个简单的 CMS
Delphi 代码上面花的时间最少。 前提是你要熟悉 Delphi 的 WebBroker 框架。不熟悉也没关系,5分钟就可以入门,10分钟就熟悉了。 CMS 就是个基于 WEB 的内容管理嘛。相当于一个简单的没有跟贴功能的 BBS。这样的东西,后边是数据库࿰…...
ASK, PSK, FSK, DPSK
ASK, PSK, FSK, DPSK详解: 这四种调制方式都是数字调制技术,用于将数字信号转换成适合在信道上传输的模拟信号。它们的主要区别在于如何用模拟信号的变化来表示数字信息。 1. ASK (Amplitude Shift Keying) 幅移键控: 原理: ASK 通过改变载波信号的幅…...

【Linux】认识Linux内核中进程级别的文件结构体【files_struct】&文件IO模型初步演示
前言 大家好吖,欢迎来到 YY 滴 系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的《Linux》…...

[Offsec Lab] ICMP Monitorr-RCE+hping3权限提升
信息收集 IP AddressOpening Ports192.168.52.218TCP:22,80 $ nmap -p- 192.168.52.218 --min-rate 1000 -sC -sV -Pn PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.9p1 Debian 10deb10u2 (protocol 2.0) | ssh-hostkey: | 2048 de:b5:23:89:bb:9f:d4:1…...
Studying-多线程学习Part4 - 异步并发——async future、packaged_task、promise
异步并发——async future packaged_task promise 1.async、future 是C11引入的一个函数模版,用于异步执行一个函数,并返回一个future对象,表示异步操作的结果。使用 async 可以方便地进行异步编程,避免了手动创建线程和管理线程…...
【Java基础】用Scanner类获取控制台输入
目录 Scanner类是什么导入并创建读取一个数读取字符串读取一行读取直到空白字符为止读取多个数直到^z读取一个字符 Scanner类是什么 在Java中,Scanner 是一个非常有用的类,用于从各种输入源(如键盘、文件或其他输入流)读取数据。…...

微服务seata解析部署使用全流程
官网地址: Seata 是什么? | Apache Seata 1、Seata术语 用来管理分布式事务,由阿里巴巴出品。 【1、TC (Transaction Coordinator) - 事务协调者】 用来维护事务的,包括主事务和分支事务。 【2、TM (Transaction Manager) - …...

Linux性能调优技巧
目录 前言1. CPU性能优化1.1 调整CPU调度策略1.2 合理分配多核处理 2. 内存性能优化2.1 调整内存分配策略2.2 缓存和分页优化 3. 磁盘I/O性能优化3.1 使用合适的I/O调度器3.2 磁盘分区和文件系统优化 4. 网络性能优化4.1 优化网络参数4.2 调整网络拥塞控制算法 5. 系统监控与优…...
python 实现sha1算法
sha1算法介绍 SHA-1(Secure Hash Algorithm 1,安全散列算法1)是一种密码散列函数,由美国国家安全局(NSA)设计,并由美国国家标准技术研究所(NIST)发布为联邦数据处理标准…...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...