【网络协议大花园】应用层 http协议的使用小技巧,用好了都不用加班,效率翻两倍(上篇)

news2024/11/25 10:34:08

本篇会加入个人的所谓鱼式疯言

❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言

而是理解过并总结出来通俗易懂的大白话,

小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.

🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人能接受我们这个概念 !!!

在这里插入图片描述

引言

HTTP 协议(超文本传输协议)是万维网中数据通信的基础。它定义了客户端与服务器之间如何进行交互,确保信息能够准确、高效地在网络中传输。从简单的网页浏览到复杂的网络应用,HTTP 协议都发挥着至关重要的作用,是互联网世界不可或缺的一部分。

目录

  1. http的初识

  2. http的抓包工具

  3. 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的原始数据

  1. 发送一段请求时, 是往 Tcp Socket 包中写入一段 字符串
  1. 返回一段响应时, 是从 Tcp Socket 包中 读出一段字符串并解析
  1. 注意抓包是 抓自己的包是允许的 , 如果是 抓别人网站的包 就很 的 。

三. 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">&#xe610;</i> </div> <div s-if="showTts" class="homepage-feed-tts"> <span 
class="play-tts" data-nid="{{nid}}"> <i class="c-icon">&#xe680;</i> <p 
class="tts-button-text">播报</p> </span> <span class="pause-tts" data-nid="
{{nid}}"> <i class="c-icon">&#xe67d;</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, 图片MP3MP4 等…

鱼式疯言

响应报文首行——》 响应头——》空行——》 正文

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程序猿日常开发中常用的

总结

  1. http的初识: 了解HTTP是应用层用来规定 传输方式和数据格式 的一种最常用的协议, 没有之一。

  2. http的抓包工具:掌握FIddler 的下载流程并且会进行基础的抓包操作

  3. http的报文格式: 熟悉HTTP的报文的四种格式: 首行——》报头——》 空行——》正文 , 并 熟悉Url 格式的理解

如果觉得小编写的还不错的咱可支持 三连 下 (定有回访哦) , 不妥当的咱请评论区 指正

希望我的文章能给各位宝子们带来哪怕一点点的收获就是 小编创作 的最大 动力 💖 💖 💖

在这里插入图片描述

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

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

相关文章

基站设备检测系统源码分享

基站设备检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

【网络篇】计算机网络——运输层详述(笔记)

目录 一、运输层 1. 概述 2. 运输层和网络层的关系 3. 运输层协议概述 二、多路复用和多路分解 1. 综述 2. 无连接的多路复用与多路分解&#xff08;UDP&#xff09; 3. 面向连接的多路复用与多路分解&#xff08;TCP&#xff09; 4. Web 服务器与TCP 三、UDP&#x…

CMake 教程跟做与翻译

目录 STEP 1: 入门与理解 cmake_minimum_required设置CMake版本的最小值 project声明工程属性 add_executable添加可执行文件 使用CMake构建工程 根据自己的构建工具自行构建 Reference STEP 1: 入门与理解 我们起手的&#xff0c;最基本的 CMake 项目是从单个源代码文件…

一篇教你玩转腾讯混元大模型!

0 前言 腾讯混元大模型&#xff08;Tencent Hunyuan&#xff09;具备&#xff1a; 强大的中文创作能力复杂语境下的逻辑推理能力可靠的任务执行能力 基于混元大模型&#xff0c;腾讯云推出文本生成、图像创作、视频创作产品方案&#xff0c;覆盖全场景AIGC应用&#xff1a; …

如何在 Kubernetes 上部署 Spark

在 Kubernetes 集群中部署 Apache Spark&#xff0c;需要你具备对 Kubernetes 的工作原理、Spark 的架构以及云原生应用的理解。 前期准备工作 在进行 Spark 的部署之前&#xff0c;需要对你的 Kubernetes 环境做好充分的准备。这包括 Kubernetes 集群的搭建以及基础工具的安…

【大模型理论篇】大模型相关的周边技术分享-关于《NN and DL》的笔记

本文所要介绍的一本书《Neural Networks and Deep Learning》&#xff0c;该书作者Michael Nielsen&#xff0c;Y Combinator Research的研究员&#xff0c;是多年之前自己看的一本基础书籍&#xff0c;很适合入门了解一些关于深度学习的概念知识&#xff0c;当然也包含了一些小…

华为OD机试 - 日志限流 - 二分查找(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

毕业设计——springboot + VUE实现后台管理系统(集成JWT接口权限验证)

作品详情 - 高质量的代码、代码结构、和代码注释 - 漂亮的UI&#xff0c;菜单栏、标签页&#xff0c;体验、交互更好用的员工、部门、角色、菜单管理等等 - 优化基于Keepalive的标签页&#xff0c;做到标签页该缓存的时候缓存&#xff0c;比如左右切换等&#xff0c;不该缓存的…

二、图解C#教程

一、方法 {}块&#xff0c;里面的是方法体 二、Var关键字 推断出等号右边的实际类型 三、局部常量 1、声明时必须初始化 2、声明后不能改变

虚拟内存能不能完全关了?太占空间了……

前言 这几天咱们提到关于Swap区&#xff08;就是Linux上的数据交换分区&#xff09;&#xff0c;在Windows上这个功能被称为虚拟内存。 前段时间&#xff08;应该是很早之前&#xff09;&#xff0c;小白写过一篇关于虚拟内存的文章&#xff1a; Windows调大虚拟内存来代替升…

常见激活函数总结

简介&#xff1a;个人学习分享&#xff0c;如有错误&#xff0c;欢迎批评指正。 一. 激活函数的定义 激活函数&#xff08;Activation Function&#xff09;是人工神经网络中对每个神经元的输入进行非线性变换的函数。神经网络中的每个神经元都会接受来自上一层的输入&#xf…

qt_c++_xml存这种复杂类型

demo&#xff0c;迅雷链接。或者我主页上传的资源 链接&#xff1a;https://pan.xunlei.com/s/VO8bIvYFfhmcrwF-7wmcPW1SA1?pwdnrp4# 复制这段内容后打开手机迅雷App&#xff0c;查看更方便 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>#include…

【MySQL】使用 JDBC 连接数据库

文章目录 前言1. 认识 JDBC1.1 概念1.2 好处 2. 使用 JDBC2.1 安装数据驱动包2.2 把 jar 包导入到项目中2.3 代码编写2.4 测试结果 3. 代码优化4. 源码展示结语 前言 在 MySQL 系列中&#xff0c;我们介绍了很多内容&#xff0c;包括但不限于建库建表&#xff0c;增删查改等等…

如何使用MATLAB代码生成器生成ADRC跟踪微分器(TD) PLC源代码(SCL)

ADRC线性跟踪微分器TD详细测试 ADRC线性跟踪微分器TD详细测试(Simulink 算法框图+CODESYS ST+博途SCL完整源代码)-CSDN博客文章浏览阅读383次。ADRC线性跟踪微分器(ST+SCL语言)_adrc算法在博途编程中scl语言-CSDN博客文章浏览阅读784次。本文介绍了ADRC线性跟踪微分器的算法和…

图论day55|深度优先搜索理论基础、98. 所有可达路径(卡码网)

图论day55|深度优先搜索理论基础、98. 所有可达路径(卡码网&#xff09; 思维导图汇总深度优先搜索理论基础98.所有可达路径(卡码网)1.邻接矩阵法2.邻接表法 思维导图汇总 深度优先搜索理论基础 深度优先搜索&#xff08;dfs&#xff09;与广度优先搜索&#xff08;bfs&#xf…

@Transactional声明式事务回调编程

文章目录 1. 理论阐述2. 代码实现2.1. 问题代码2.2. 改进方案 本文参考&#xff1a; 事务回调编程 大事务问题 1. 理论阐述 最近在学习数据库事务的过程中&#xff0c;了解到了大事务的危害&#xff1a; 并发情况下&#xff0c;数据库连接资源容易耗尽锁定数据较多&#xff0…

SpringBoot企业级开发(SpringSecurity安全控制+pringBatch批处理+异步消息+系统集成SpringIntegration)

Spring Security 多个过滤器来实现所有安全的功能&#xff0c;只需要注册一个特殊的DelegatingFilterProxy过滤器到WebAppliationInitializer即可 实际使用中需要让自己的Initializer类继承AbstractSecurity WebApplicationInitializer抽象类即可。 AbstractSecurityWebAppli…

【瑞昱RTL8763E】刷屏

1 显示界面填充 用户创建的各个界面在 rtk_gui group 中。各界面中 icon[]表对界面进行描述&#xff0c;表中的每个元素代表一 个显示元素&#xff0c;可以是背景、小图标、字符等&#xff0c;UI_WidgetTypeDef 结构体含义如下&#xff1a; typedef struct _UI_WidgetTypeDef …

每年每门学科排名第一的学生 和每年总成绩都有所提升的学生

一张学生成绩表(student_scores)&#xff0c;有year-学年&#xff0c;subject-课程&#xff0c;student-学生&#xff0c;score-分数这四个字段&#xff0c;请完成如下问题&#xff1a; 问题1&#xff1a;每年每门学科排名第一的学生 问题2&#xff1a;每年总成绩都有所提升的…

【STM32 HAL库】MPU6050 DMP库移植 与 自检失败的处理

【STM32 HAL库】MPU6050 DMP库移植 与 自检失败的处理 本文参考移植步骤文件配置代码修改inv_mpu.cinv_mpu.hinv_mpu_dmp_motion_driver.c 使用 自检失败怎么处理ret -1改正DEBUG过程 ret -9改正DEBUG过程 本文参考 B站 CSDN 移植步骤 文件配置 新建一个 dmp 文件夹 并将…