“网络协议入门: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.mzph.cn/bicheng/57481.shtml

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

相关文章

Android 13 SystemUI 隐藏下拉快捷面板部分模块(wifi,bt,nfc等)入口

frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java createTileInternal(tileSpec)方法注释想隐藏的模块即可。

【leetcode|哈希表、动态规划】最长连续序列、最大子数组和

目录 最长连续序列 解法一:暴力枚举 复杂度 解法二:优化解法一省去二层循环中不必要的遍历 复杂度 最大子数组和 解法一:暴力枚举 复杂度 解法二:贪心 复杂度 解法三:动态规划 复杂度 最长连续序列 输入输…

Mac 远程 Windows 等桌面操作系统工具 Microsoft Remote Desktop for Mac 下载安装详细使用教程

最近需要在 Mac 上远程连接控制我的 windows 电脑系统,经过一番尝试对于 win 来说还是微软自家推出的 Microsoft Remote Desktop for Mac 最最好用,没有之一 简介 Microsoft Remote Desktop是一款由微软公司开发的远程桌面连接工具,可以让用…

Linux基础——信号

目录 1. 什么是信号? 2. 信号的产生 ①键盘的组合键 ②kill命令 ④产生异常 ⑤软件条件 ⑥进程等待中的core dump 3. 信号的保存 ①信号的发送与接收 ②为什么需要保存信号? ③信号是如何保存的 4. 信号的捕捉处理 ①信号的处理与处理时机…

Redis Time Series介绍和命令大全

Redis Time Series介绍和命令大全 Redis Time Series1 时序序列是什么2 Redis Time Series的特性3 內存模型4 命令详解命名链接表命名详解表TS.CREATETS.ADDTS.ALTERTS.CREATERULETS.DECRBYTS.DELTS.DELETERULETS.GETTS.INCRBYTS.INFOTS.MADDTS.MGETTS.MRANGETS.MREVRANGETS.QU…

WORFBENCH:一个创新的评估基准,目的是全面测试大型语言模型在生成复杂工作流 方面的性能。

2024-10-10,由浙江大学和阿里巴巴集团联合创建的WORFBENCH,一个用于评估大型语言模型(LLMs)生成工作流能力的基准测试。它包含了一系列的测试和评估协议,用于量化和分析LLMs在处理复杂任务时分解问题和规划执行步骤的能力。WORFBE…

微信小程序文本收起展开

这里写自定义目录标题 微信小程序文本收起展开常见问题的梯形背景框 微信小程序文本收起展开 参考 https://juejin.cn/post/6963904955262435336 <!-- 常见问题解答 --><view classcontentBottom><view classBottomFirst><text id0 data-id0 class&quo…

安装buildkit,并使用buildkit构建containerd镜像

背景 因为K8s抛弃Docker了,所以就只装了个containerd,这样就需要一个单独的镜像构建工具了,就用了buildkit,这也是Docker公司扶持的,他们公司的人出来搞的开源工具,官网在 https://github.com/moby/buildkit 简介 服务端为buildkitd,负责和runc或containerd后端连接干活,目前…

魔音音乐 5.0.1 | 界面优美,可无损下载,可播放

魔音Morin 是一款免费下载付费音乐和免费播放音乐的软件。现在听歌都需要付费&#xff0c;不想付费听音乐就来魔音Morin&#xff0c;完全免费的音乐资源非常丰富&#xff0c;可同步四大音乐平台歌单&#xff0c;还有各类音乐榜单&#xff0c;自带音乐社、同步歌单以及搜索音乐功…

iTOP-RK3568开发板独立NPU通过算法加特应用到以下的场景

iTOP-3568开发板采用瑞芯微RK3568处理器&#xff0c;内部集成了四核64位Cortex-A55处理器。主频高达2.0Ghz&#xff0c;RK809动态调频。集成了双核心架构GPU&#xff0c;ARM G52 2EE、支持OpenGLES1.1/2.0/3.2、OpenCL2.0、Vulkan1.1、内嵌高性能2D加速硬件。 内置独立NPU,算力…

国内大语言模型哪家更好用?

大家好&#xff0c;我是袁庭新。 过去一年&#xff0c;AI大语言模型在爆发式增长&#xff0c;呈现百家争鸣之态。国内外相关厂商积极布局&#xff0c;并相继推出自家研发的智能化产品。 我在工作中已习惯借助AI来辅助完成些编码、创作、文生图等任务&#xff0c;甚至对它们产…

基于Springboot在线视频网站的设计与实现

基于Springboot视频网站的设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;idea 源码获取&#xff1a;https://do…

Android 开发 TabLayout 自定义指示器长度

前言 原生 TabLayout 的指示器长度是充满整个屏幕的&#xff0c;但在实际开发中 UI 会设计成 指示器的长度等于或者小于标题字体长度&#xff0c;如图 如果设置成跟字体长度一样即使用 API: mTabLayout.setTabIndicatorFullWidth(false);或者在 xml 布局文件中的TabLayout标签…

vscode配色主题推荐:Andromeda !

vscode配色主题推荐:Andromeda ! 图标库 vscode-icons ! Andromeda:Dark theme with a taste of the universe&#xff1b; 仙女座&#xff1a;一套宇宙深空体验的哑暗色主题; 高对比度,色彩饱和; Easy Installation Open the extensions sidebar on Visual Studio CodeSearc…

判断自己的mac是macOS x64 还是macOS ARM64

在终端输入 uname -a 这样的是x64 这样的是ARM64

Skydel 24.9版本震撼发布,升级五大关键功能

在信号传播与仿真领域&#xff0c;Skydel软件一直是行业内的佼佼者。我们与您分享升级快讯&#xff0c;Skydel软件24.9.0版本已正式发布&#xff0c;此次更新不仅带来了五大全新功能&#xff0c;还在性能优化、用户体验以及远程API方面进行了全面升级&#xff0c;为用户带来更高…

面试题:如何能够保证T2在T1执行完后执行,T3在T2执行完后执行?——CountDownLatch原理

CountDownLatch的使用方式 CountDownLatch用于某个线程等待其他线程执行完任务再执行&#xff0c;与thread.join()功能类似。常见的应用场景是开启多个线程同时执行某个任务&#xff0c;等到所有任务执行完再执行特定操作&#xff0c;如汇总统计结果。 面试题&#xff1a;如何…

最新Java零基础知识(持续更新中......)

1. 学习前的准备 一个好的学习方法&#xff08;如何更高效学习&#xff09;&#xff1a; 成为一名合格的程序员&#xff0c;需要具备两个关键能力&#xff1a; 指法速度&#xff1a;高效的代码输入速度。编程思想&#xff1a;能够用编程的方式解决现实问题的能力。 指法速度&am…

SpringBoot中的Component和ComponentScan注解工作原理

Spring IoC 容器的工作是通过管理对象的生命周期和配置来保持业务逻辑清晰&#xff0c;但是 Spring 容器并不会自动知道要管理哪些 bean。所以我们来告诉 Spring 应该处理哪些 bean 以及如何处理&#xff0c;很简单这就是 Spring 的 Component 和 ComponentScan 注释的作用所在…

算法题总结(二十)——并查集

并查集理论基础 并查集常用来解决集合连通性问题&#xff0c;两个节点在不在一个集合&#xff0c;也可以将两个节点添加到一个集合中。 大白话就是当我们需要判断两个元素是否在同一个集合里的时候&#xff0c;我们就要想到用并查集。 并查集主要有两个功能&#xff1a; 将…