“网络协议入门: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是一个唯一的标识符

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

举个例子: 

美图分享

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

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

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

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

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

USART串口(发送和接收)

目录 一. USART串口协议 二. USART串口外设 三. 串口发送接收 四. 效果展示 一. USART串口协议 USART(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/异步收发器。 通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统。…

端点物联网学习资源合集

端点物联网 学习资源合集 导航 1. 物联网实战--入门篇 文章链接 简介:物联网是一个包罗万象的行业和方向,知识碎片严重,本系列文章通过 边学边用 的思想,逐步建立学习者的信心和兴趣,从而进行更深入透彻的学习和探索…

kaptcha依赖maven无法拉取的问题

老依赖了,就是无法拉取,也不知道为什么,就是用maven一直拉去不成功,还以为是魔法的原因,试了好久发现不是,只好在百度寻求帮助了,好在寻找到了这位大佬的文章Maven - 解决无法安装 Kaptcha 依赖…

信息安全工程师(57)网络安全漏洞扫描技术与应用

一、网络安全漏洞扫描技术概述 网络安全漏洞扫描技术是一种可以自动检测计算机系统和网络设备中存在的漏洞和弱点的技术。它通过使用特定的方法和工具,模拟攻击者的攻击方式,从而检测存在的漏洞和弱点。这种技术可以帮助组织及时发现并修补漏洞&#xff…

衡石分析平台系统分析人员手册-可视化报表仪表盘

仪表盘​ 仪表盘是数据分析最终展现形式,是数据分析的终极展现。 应用由一个或多个仪表盘展示,多个仪表盘之间有业务关联。 仪表盘编辑​ 图表列表​ 打开仪表盘后,就会看到该仪表盘中所有的图表。 调整图表布局​ 将鼠标移动到图表上拖动…

到底是微服务,还是SOA?

引言:大概正式工作有5年了,换了三个大厂【也是真特么世道艰难,中国互联网人才饱和了】。基本上每个公司有的架构都不太相同,干过TOC和TOB的业务,但是大家用的架构都不太相同。有坚持ALL in one的SB,最后服务…

2024项目管理软件,不融入敏捷开发怎么行?

一、项目管理软件的重要性 在当今快节奏的商业环境中,项目管理软件的重要性愈发凸显。随着市场竞争的不断加剧,企业面临着越来越多的挑战,项目的复杂性和不确定性也在不断增加。在这样的背景下,项目管理软件成为了团队高效规划、…

大模型涌现判定

什么是大模型? 大模型:是“规模足够大,训练足够充分,出现了涌现”的深度学习系统; 大模型技术的革命性:延申了人的器官的功能,带来了生产效率量级提升,展现了AGI的可行路径&#x…

◇【论文_20151120_20160405v3】Dueling Network 决斗〔Google DeepMind〕

整理代码:Dueling_DQN__Pendulum_v1.ipynb https://arxiv.org/abs/1511.06581 Dueling Network Architectures for Deep Reinforcement Learning 文章目录 摘要1. 引言1.1. 相关工作 2. 背景2.1. Deep Q-networks 【DQN】2.2. Double Deep Q-networks 【DDQN】2.3…

Linux基础项目开发day05:量产工具——页面系统

文章目录 一、数据结构抽象page_manager.h 二、页面管理器page_manager.c 三、单元测试1、main.page.c2、page_test.c3、Makefile修改3.1、unittest中的Makefile3.2、page中的Makefile 四、上机实验 前言 前面实现了显示、输入、文字、UI系统,现在我们就来实现页面的…

HCIP--1实验DNS,VLAN,静态路由,浮动静态,动态路由协议,Telnet

学习目标: 静态路由,浮动静态 VLAN,vlan间路由TelnetACL NAT OSPF/RIP 学习内容: 实验拓扑实验需求实验需求分析实验配置内容 (每一个设备的每一步操作)实验结果验证 1.实验拓扑 2.实验需求 1,学校内部…

Qt键盘按下事件和定时器事件及事件的接收和忽略

定时器事件 //设置多少毫秒调用一次 1s1000timerId this->startTimer(1000);timerId2 this->startTimer(500);void MyWidget::timerEvent(QTimerEvent* t) {static int sec 0;//通过判断当前ID来实现不同定时器的调用时间if(t->timerId() this->timerId){//隔一…

IDEA中的快捷键大全--超详细

目录 一、通用类型 1.1 图示 1.2 表格化 二、编写速度提升 2.1 图示 2.1.1 表格化 2.2 图示 2.2.1 表格化: 三、类结构,查找和查看源码 3.1 图示 3.2 表格化 四、查找,替换和关闭 4.1图示 4.2 表格化 五、调整格式 5.1 图示 5.2 表格化 六、快捷键的自主定义…

【C】数组(array)

数组(array) 数组的概念 数组是一组相同类型元素的集合 数组中存放的是1个或者多个数据,但是数组元素个数不能为0数组中存放的多个数据,类型是相同的 数组分为一维数组和多维数组,多维数组一般比较多见的是二维数组 一维数组的创建和初始…

递归神经网络解释(RNN)

Recurrent Neural Network (RNN) 如今,不同的机器学习技术用于处理不同类型的数据。最难处理和预测的数据类型之一是顺序数据。顺序数据与其他类型的数据不同,因为虽然可以假设典型数据集的所有特征都是与顺序无关的,但不能假设顺序数据集是无关的。为了处理这种类型的数据…

Kibana可视化Dashboard如何基于字段是否包含某关键词进行过滤

kinana是一个功能强大、可对Elasticsearch数据进行可视化的开源工具。 我们在dashboard创建可视化时,有时需要将某个index里数据的某个字段根据是否包含某些特定关键词进行过滤,这个时候就可以用到lens里的filter功能很方便地进行操作。 如上图所示&…

【笔记】【YOLOv10图像识别】自动识别图片、视频、摄像头、电脑桌面中的花朵学习踩坑

(一)启动 创建环境python3.9 打开此环境终端 (后面的语句操作几乎都在这个终端执行) 输入up主提供的语句:pip install -r requirements.txt 1.下载pytorch网络连接超时 pytorch网址: Start Locally | P…

centos系列图形化 VNC server配置,及VNC viewer连接,2024年亲测有效

centos系列图形化 VNC server配置,及VNC viewer连接 0.VNC服务介绍 VNC英文全称为Virtual Network Computing,可以位操作系统提供图形接口连接方式,简单的来说就是一款桌面共享应用,类似于qq的远程连接。该服务是基于C/S模型的。…

【STM32-HAL库】STM32F系列新建工程并点灯教程(小白向)

本帖是STM32HAL库系列新建工程系列合集 stm32-HAL库cubeMX新建工程教程(以F103C8T6为例)https://blog.csdn.net/qq_39150957/article/details/136637881?fromshareblogdetail&sharetypeblogdetail&sharerId136637881&sharereferPC&sha…

uniapp使用html2canvas时,页面内的image元素模糊

不废话很简单只需要将image改成img就行 改之前 改之后 原因可能是因为uniapp里面的image标签做了某种处理