【网络协议大花园】应用层 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)发布为联邦数据处理标准…...

ejb-ref元素
ejb-ref 是用于在 Java EE (现在称为 Jakarta EE) 中引用 Enterprise JavaBeans (EJB) 的一个元素,主要用于定义和配置 SLEE (Service Logic Execution Environment) 组件中的 EJB 依赖关系。通过这个引用,SBB (Service Building Block) 可以轻松地访问和…...

Perl 子程序(函数)
Perl 子程序(函数) Perl 是一种高级、解释型、动态编程语言,广泛用于CGI脚本、系统管理、网络编程、 finance, bioinformatics, 以及其他领域。在Perl中,子程序(也称为函数)是组织代码和重用代码块的重要方…...

ElasticSearch 备考 -- Snapshot Restore
一、题目 备份集群下的索引 task,存储快照名称为 snapshot_1 二、思考 这个涉及的是集群的备份,主要是通过创建快照,涉及到以下2步骤 Setp1:注册一个备份 snapshot repository Setp2:创建 snapshot 可以通过两种方…...

【Linux】进程替换、命令行参数及环境变量(超详解)
目录 进程替换 替换函数的含义 命令行参数 环境变量 PATH 进程替换 我们先看代码: 1 #include<stdio.h>2 #include<unistd.h>3 int main()4 {5 printf("process...begin!\n");6 7 execl("/usr/bin/ls","ls"…...

MySQL事务日志—redo日志介绍
MySQL事务日志—redo日志 事务有4种特性: 原子性、一致性、隔离性和持久性。 那么事务的四种特性到底是基于什么机制实现? 事务的原子性、一致性由事务的 undo 日志事务的隔离性由锁机制和MVCC实现。事务的持久性由redo 日志来保证。 两类日志概述:…...

告别音乐小白!字节跳动AI音乐创作工具,让你一键变作曲家!
还在羡慕别人能创作动听的音乐?五音不全的你,也梦想着谱写属于自己的乐章?现在,机会来了!字节跳动推出了一款AI音乐创作工具——抖音推出的海绵音乐,它能让你轻松一键创作音乐,即使是“音乐小白…...

空心正方形图案
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的“空心”正方形图案。 输入描述: 多组输入,一个整数(3~20),表示输出的行数,也表示组成正方形边的“ * ”的数量。 输出描述…...

【EXCEL数据处理】000020 案例 保姆级教程,附多个操作案例。EXCEL使用表格。
前言:哈喽,大家好,今天给大家分享一篇文章!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 【EXCEL数据处理】000020 案例 保姆级教程,附多个操作案例。…...

虾皮Shopee大数据面试题及参考答案
Cube 表性能优化,还有其他优化的方法吗? Cube 表性能优化可以从多个方面入手。 一方面,可以优化数据存储格式。选择合适的存储格式能够减少存储空间占用,提高数据读取速度。例如,Parquet 格式是一种高效的列式存储格式,它可以按列进行数据压缩,大大减少磁盘 I/O 和内存占…...

重学SpringBoot3-集成Redis(六)之消息队列
更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(六)之消息队列 1. 什么是发布/订阅(Pub/Sub)?2. 场景应用3. Spring Boot 3 整合 R…...