“网络协议入门:HTTP通信的四大组成部分“

White graces:个人主页

🙉专栏推荐:Java入门知识🙉

🐹今日诗词: 春水满四泽,夏云多奇峰🐹


⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏

⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏


目录

前言

HTTP

HTTP请求

1. 首行

2. 请求头(header)

3. 空行

4. 正文(body)

HTTP响应

1. 响应的首行

2. 响应报头(header)

3. 响应的空行

4. 响应的正文(body)

HTTP请求URL

urlencode

HTTP方法

get方法

post方法

二者区别

get和post方法有什么区别(经典面试题)

HTTP请求报头(header)

host

Content-Length和Content-Type

User-Agent

Referer

Cookie(header最最最重要的)

Cookie中最关键的信息(会话ID)

美图分享


前言

http和https都应用层协议, 区别就是https在http基础上进行了加密, 减少数据被劫持的风险

日常开发中也是https使用的比较多, 想要学习https, 我们要从http开始学起

HTTP

http是一种一问一答式的协议, 请求和响应一一对应

TCP/UDP协议不仅支持一问一答, 还支持一问多答, 多问一答, 多问多答

为了直观了解http协议, 我们可以通过抓包来快速学习, 常见的抓包工具: Fiddler

官网链接: Fiddler

抓包工具通俗点说就是代理工具, 也就是跑腿的, 一般分为正向代理和反向代理

正向代理: 你让室友(义父)给你带饭, 你不需要亲自去, 室友买完饭给你带回来, 此时你的室友扮演的是正向代理角色

反向代理: 点外卖, 你在客户端下单, 饭店老板做好饭, 不是老板亲自给你送饭, 让外卖员给你送饭, 此时外卖员充当的是反向代理角色

Fiddler抓包注意事项

由于网络上大部分数据包都是HTTPS, 所以我们要在Fiddler开启抓取HTTPS的选项

HTTP请求

HTTP是一个文本格式的协议, 构造出文本写到TCP的Socket中

一个完整的HTTP请求有以下几个部分

1. 首行(它有包括三个部分)

2. 请求头(header)

3. 空行

4. 正文(也称body)

1. 首行

首行包括: 1. 请求方法 2. URL 3. 版本号

比如这个, 这个三个部分通过空格区分

方法还有POST方法.... 待会会说

2. 请求头(header)

请求头: 由若干行数据组成, 每行数据由键值对组成, 通过 : 将键和值进行分割

这么多行, 怎么判定请求头结束呢?

3. 空行

4. 正文(body)

正文这个东西, 是可以选择的, 可以有, 也可以没有

那么正文里面可以放什么内容呢?

可以放任意类型的数据, css, json, js, html类型的都可以

HTTP响应

HTTP的响应部分的组成和HTTP的请求非常类似也分为4个部分

1. 响应的首行

2. 响应的报头(header)

3. 响应的空行

4. 响应的正文(body)

1. 响应的首行

响应的首行有三个部分组成

1. 版本号

2. 状态码

3. 状态码描述

状态码是一串数字, 不同的数字对应不同的请求结果

状态码描述就是描述当前请求返回的结果, OK代表成功, 还有很多其他的描述

例如404...

请求的结果有很多种, 后面会统一介绍

2. 响应报头(header)

响应报头也是键值对的形式

3. 响应的空行

响应的空行用于区分报头(header)和正文(body)

空行有很多个, 第一个才是响应的空行, 因为正文什么都可以存储, 所以空行也可以,

因此第一个空行作为报头(header)和正文(body)分界线

4. 响应的正文(body)

剩下的就都是正文了, 正文存啥都可以

HTTP请求URL

请求里的URL, 也就是我们经常说的网址, 正式名称叫: 唯一资源定位符

urlencode

urlencode是一种表示特殊字符的编码体制, 像转义字符一样, 有些字符组合会有特殊含义,会引起冲突, 因此urlencode就是用来解决冲突, 像转义字符一样,用其他字符代替当前字符

HTTP方法

前面介绍HTTP请求时说了GET方法, HTTP还有很多方法

HTTP方法的作用: 描述请求具体要做什么

HTTP方法虽然有很多, 但是它们就像二八法则一样, 经常出现的

get方法占八成, post方法占一成, 剩下的方法占一成

get方法

get方法: 从服务器获取数据

post方法

post方法: 往服务器发送/提交数据

二者区别

大部分使用get方法居多, post方法一般用于登录和上传文件

实际上get方法也可以用来发送或者提交数据

post方法也可以用来获取数据

二者最大的区别: get方法使用Query String传输数据, 一般不搭配body

post方法使用body传输数据, 一般不搭配Query String

get和post方法有什么区别(经典面试题)

1. get和post本质没什么区别, get能用的场景, post也可以

post能用的场景, get也可以使用, 很多公司get一把梭, 或者post一把梭哈

2. 从语义上说

get方法: 一般用于获取数据, 传输数据一般使用query string

post方法: 一般用于发送/提交数据, 传输数据一般使用body

3. get方法构造时, 一般设计成幂等

post方法构造时, 则不要求幂等

幂等: 发送相同请求, 一定返回相同的结果

不幂等: 发送相同的请求, 返回的结果不一定相同

get方法也是可以设置成不幂等

4. get方法请求的结果可以被缓存, 可以被浏览器收藏, 下次直接点击

post方法一般不能被缓存

post其实也可以缓存, 但是缓存一般使用get方法

get方法和post方法, 容易出现误区的地方

1. get方法没有post方法安全(×)

这种说法是错误的, 安不安全取决于加不加密

2. get方法传输数据量比较有限, post方法传输数据量比较大(×)

这个说法也是错误的, HTTP标准没有对get方法的URL做出限制

3. get方法只能传输文本数据, post方法既可以传输文本数据,也可以传输二进制数据(×)

这种说法也是错误的, get方法可以通过urlencode转义来传输二进制数据

HTTP请求报头(header)

host

host: 请求的主机ip和端口号

Content-Length和Content-Type

Content-Length: 描述body的长度

Content-Type: 描述body的数据类型

Content-Length作用: 防止粘包问题

区分请求方法和报头(header) 通过空行

区分报头body部分就通过长度, 提前说明body是多长

Content-Type

传输的数据有很多格式, 像图片, 视频, 文本, 音频, html, css, js.....

不同的数据的处理方式不同, 因此要告知数据类型便于后续处理

常见几种数据类型

html中的form表单的格式

也是通过form表单构造的, 这个数据格式一般提交文件或者图片

json格式

这个经常使用, 日常开发经常用到

User-Agent

User-Agent: 又称作UA, 用于描述操作系统的版本和浏览器的版本

告诉服务器, 用户使用了什么样的设备和系统去访问你的网页或者资源

UA的作用

现在UA最大的作用就是区分手机和电脑设备, 如果是电脑就返回大一点的界面, 手机就返回窄一点的界面, 适应我们的设备, 可以简单的理解为自适应窗口大小

Referer

Referer: 表示当前页面是从哪个页面跳转过来

如果是直接在浏览器输入网址, 那么Referer就是空,

Cookie(header最最最重要的)

Cookie: 是网站能在用户计算机硬盘上持久化存储的小型文本文件

每个网站都会有属于自己的Cookie文件, 并且不同的网站的Cookie文件不会相互干扰

Cookie的由来: 网页运行在浏览器中的, 正常情况下网页是不能访问我们本地的硬盘文件资源(随意访问修改容易让我们的电脑出问题), 但是有些网站有一些必要的信息希望持久化存储,

浏览器就提供了Cookie机制, 让网页能够访问到硬盘, Cookie机制相当于浏览器对我们的硬盘做了一层封装

Cookie的特点: 文本文件, 键值对的形式, 键和值都必须是文本 

Cookie的作用: 举个例子吧!

假如你有一家经常去的咖啡馆, 每次你去都会点一杯少糖, 多奶的拿铁, 并且喜欢在周二去, 坐在靠窗的位置, 于是店员就会记住你的喜好, 你下次再来的时候就能为你提供更加个性化的服务, 这里你的习惯就是Cookie数据, 你下次再来Cookie数据也会发送给服务器(店员)

Cookie应用场景很多: 根据你的喜好提供个性化服务

自动登录, 这里自动登录不是记住密码的那种自动登录

自动登录指的是, 后续你访问该网站的其他界面时, 就不需要重新登录了

因为向服务器发送的请求中包含你的Cookie, Cookie里又包含你的信息

Cookie中最关键的信息(会话ID)

会话ID(SessionId): 不同用户的会话ID不能相同, 因此会话ID是一个唯一的标识符

作用: 跟踪用户在网络上的所有活动, 记录用户的行为, 连续的为用户提供个性化服务

举个例子: 

美图分享

✨🎆谢谢你的阅读和耐心!祝愿你在编程的道路上取得更多的成功与喜悦!"🎆✨🎄

⭐️点赞收藏加关注,学习知识不迷路⭐️

🎉✔️💪🎉✔️💪🎉✔️💪🎉✔️💪🎉

👍😏⛳️点赞☀️收藏⭐️关注😏👍

👍😏⛳️点赞☀️收藏⭐️关注😏👍

👍😏⛳️点赞☀️收藏⭐️关注😏👍

🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大话设计模式解读07-模板方法

上篇文章,介绍了《大话设计模式》的第9章——原型模式。 本篇,来介绍《大话设计模式》的第10章——模板方法。并通过C代码实现实例代码的功能。 1 模板方法 模板方法模式(TemplateMethod):定义一个操作中的算法的骨架…

【简单版】通过 Window.performance 实现前端页面(性能)监控

1 背景 前端监控系统告警xx接口fetchError 问题:前端监控系统没有更多的错误信息,查询该fetch请求对应的接口日志返回200状态码、无请求异常记录,且后台能查到通过该fetch请求成功发送的数据。那是前端页面的错误还是前端监控系统的问题&…

如何轻松使用pip安装Git仓库中的私有Python模块(使用pip和Git仓库发布和安装私有Python模块)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 Git模块 📒📝 Git仓库要求🔖 项目目录结构🔖 文件说明📝 编写setup.py📝 配置MANIFEST.in📝 推送代码到Git仓库📝 使用pip安装模块🔖 使用用户名和密码🔖 使用Personal Access Token (PAT)🔖 示例📝 更…

基于SpringBoot的在线数据平台设计与实现(源码+定制+开发)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

Apache Lucene 10 已发布!Lucene 硬件效率改进及其他改进

作者:来自 Elastic Adrien Grand Apache Lucene 10 刚刚发布,重点关注硬件效率!查看主要版本亮点。 Apache Lucene 10 终于发布了!自 Lucene 9.0(于 2021 年 12 月发布,距今已有近 3 年)以来&a…

Faster RCNN

经过R-CNN和Fast RCNN的积淀,Ross B. Girshick在2016年提出了新的Faster RCNN,在结构上,Faster RCNN已经将特征抽取(feature extraction),proposal提取,bounding box regression(rect refine),classificati…

医疗领域的RAG技术:如何通过知识图谱提升准确性

在医学领域,准确的信息检索和处理至关重要。随着大型语言模型(LLMs)的兴起,检索增强生成(RAG)技术在医学信息处理中的应用越来越受到关注。本文将探讨RAG技术在医学领域的应用,特别是如何利用知…

【wpf】07 后端验证及令牌码获取步骤

由于在用wpf开发应用程序时,从后端获取数据需要用到 Authorization 授权的Bearer令牌,而这个令牌的获取需要登录后台进行获取,这里登录时还涉及到的验证码的操作,所以在获取过程中,需要对后台系统进行登录并拿到这个Be…

潮流头像社 1.1 | 打造个性化专属头像的设计工具。

潮流头像社提供了丰富多样的头像制作工具和素材,让用户可以尽情地展示自己的独特魅力。无论是想要换脸特效、滤镜、贴纸、文字还是配饰,用户都可以在这里找到自己喜欢的元素,并且将其融合到自己的头像设计中,创造出一个独一无二的…

87. 多边形轮廓Shape(圆弧)

先掌握上节课关于Shape内容,再继续学习本节课关于Shape圆弧的介绍。 圆弧方法.arc() 圆弧方法.arc()使用方式和原来学习过的圆弧曲线ArcCurve整体相似,区别在于圆心定位方式有差异。 圆弧.arc()参数的圆心坐标是相对当前.currentPoint而言,而不是坐标原…

MFC工控项目实例二十五多媒体定时计时器

承接专栏《MFC工控项目实例二十四模拟量校正值输入》 用多媒体定时器实现0.1秒计时器 1、在SEAL_PRESSUREDlg.h文件中添加代码 #include<MMSystem.h> #pragma comment(lib,"winmm.lib")class CSEAL_PRESSUREDlg : public CDialog { public:CSEAL_PRESSUREDlg(…

【动态规划】【斐波那契数列模型】三步问题、第N个泰波那契数、使用最小花费爬楼梯

模板 算法原理 做动态规划的题目&#xff0c;一般会先创建一个一维数组 dp&#xff0c;称之为 dp表我们想办法填满这个 dp表&#xff0c;里面的某个值就是最终结果 采用动态规划&#xff0c;一般分五步&#xff1a; 状态表示 是什么&#xff1f; dp 表中每一个值所表示的含义…

王爽汇编语言第三版实验3

实验任务 将下面的程序保存为t1.asm&#xff0c;将其生成可执行文件t1.exe 用Vscode编写源程序t1.asm 用脚本一键生成可执行文件t1.exe 成功运行 查看资源管理器&#xff0c;成功生成T1.obj与t1.exe文件‘ 用debug跟踪t1.exe的执行过程&#xff0c;写出每一步执行后&#xff…

基于SSM的大学校医院信息管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着高校规模的不断扩大和师生健康意识的增强&#xff0c;大学校医院面临着日益增长的医疗服务需求。传统的纸质病历、手工预约和药品管理方式已难以满足高效、准确和便捷的服务要求。因此&#xff0c;开发一套基于SSM&#xff…

021_Thermal_Transient_in_Matlab统一偏微分框架之热传导问题

Matlab求解有限元专题系列 固体热传导方程 固体热传导的方程为&#xff1a; ρ C p ( ∂ T ∂ t u t r a n s ⋅ ∇ T ) ∇ ⋅ ( q q r ) − α T d S d t Q \rho C_p \left( \frac{\partial T}{\partial t} \mathbf{u}_{\mathtt{trans}} \cdot \nabla T \right) \nab…

[计算机网络]第一周

TCP/IP 与OSI TCP/IP TCP/IP 四层模型是一个分层网络通信模型&#xff0c;它将网络通信过程分为四个层次&#xff0c;这四层分别是&#xff1a;网络接口层、互联网层、传输层和应用层。 网络接口层负责在计算机和网络硬件之间传输数据&#xff0c;负责在物理网络上发送和接收…

Cesium 影像加载的TileReplacementQueue技术

本文以分析QuadtreePrimitive及相关影像内容&#xff0c;讨论一些流程和方法。影像和地形是Cesium的基础内容&#xff0c;但是有时候感觉这部分的加载和渲染效率并不高。 TileReplacementQueue是一个非常神奇的类&#xff0c;我自己研究了小半天。虽然结构简单&#xff0c;但是…

鸿蒙HarmonyOS开发:应用权限的基本概念及如何申请应用权限详细介绍

文章目录 一、访问控制二、应用权限1、应用权限管控2、权限使用的基本原则3、授权方式4、权限等级 三、申请应用权限1、选择申请权限的方式2、声明权限3、声明样例4、二次向用户申请授权5、具体实现示例6、效果展示 四、应用权限列表1、system_grant&#xff08;系统授权&#…

【开源免费】基于SpringBoot+Vue.JS社区团购系统(JAVA毕业设计)

本文项目编号 T 024 &#xff0c;文末自助获取源码 \color{red}{T024&#xff0c;文末自助获取源码} T024&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析5.4 用例设计 六、核…

亿发工单,拯救制造企业的时间:工单也能这样高效

在制造企业的日常生产中&#xff0c;工单管理是一项至关重要的任务。它不仅直接关系到生产效率&#xff0c;还影响到整个生产链的运作。然而&#xff0c;许多制造企业在工单处理过程中面临效率低下、沟通不畅、任务分配混乱等诸多问题&#xff0c;这不仅拖慢了生产进度&#xf…