网络原理——http/https ---http(1)

news2024/11/16 3:26:46

在这里插入图片描述

T04BF

👋专栏: 算法|JAVA|MySQL|C语言

🫵 今天你敲代码了吗

网络原理 HTTP/HTTPS

HTTP,全称为"超文本传输协议"
在这里插入图片描述
HTTP 诞⽣与1991年. ⽬前已经发展为最主流使⽤的⼀种应⽤层协议.

在这里插入图片描述
实际上,HTTP最新已经发展到 3.0

但是当前行业中主要使用的HTTP版本还是 1.1

应用场景

(1)网页与服务器之间的交互

(2)手机APP 与 服务器 之间的交互

虽然HTTP作用很大,应用很广,但是在实际开发里面,不一定真正直接使用HTTP,更大的概率是使用HTTPS

HTTPS,本质上还是HTTP,但是引入了额外的加密层(此处的s => 安全)

抓包工具

进一步理解HTTP协议的工作流程,以及理解 HTTP协议的报文格式,需要用到 “抓包工具”

所谓抓包,即使能够把网络上传输的HTTP数据获取到,并且显示出来

而抓包工具就是一个代理程序

我们常使用的HTTP抓包工具就是 Fiddler

我们使用fiddler 并且用浏览器打开 搜狗的网页:
在这里插入图片描述
这些都是给搜狗服务器发送的请求数据

(浏览器访问一个网站的时候,往往不是只发送一个请求,很可能是发送很多个请求)

我们关注的是蓝色的 ,并且body这一列数据比较多的请求

(蓝色的是服务器返回的HTML数据,黑色的就是返回的普通的数据,同时还会存在其他不同的颜色区分 => css js 图片等)

此时用fiddler抓取请求的时,右边就会有两部分

在这里插入图片描述
这个就是请求的详情(右上角)

在这里插入图片描述
这个是响应的详情

实际上HTTP本来是 文本协议,但是如果需要返回的响应比较大,就可能需要将响应数据压缩再返回
服务器里面就宝贵的硬件资源就是 网络带宽
经过压缩就是用cpu资源,置换贷款资源
对于浏览器来说,解压缩就是 自动完成的
对于fiddler来说,就需要手动解压缩
在这里插入图片描述

http请求报文

在这里插入图片描述
我们来理解一下请求报文里面涉及的主要内容

首行

首行又包括3部分,分别是

(a)请求的方法
就是用来表示,当前这个请求要做什么,这里是get,就是表示要从服务器获取某个数据

(b)请求的URL
表示请求对方的网址

©版本号
表示http协议的版本

在首行里面,是使用空格来区分三部分的

请求(header)
Host: sogou.com
Connection: keep-alive
sec-ch-ua: "Google Chrome";v="125", "Chromium";v="125", "Not.A/Brand";v="24"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br, zstd
Accept-Language: zh-CN,zh;q=0.9
Cookie: SUID=B2F2E6B75019870A0000000065E83505; cuid=AAEhDK3JSgAAAAqHS15V8gEASQU=; SUV=1709716740486165; SMYUV=1712055327421647; ABTEST=3|1716650944|v17; SNUID=7E584C1EAAAFB3E158142029AA686AC3

header里面可以包含若干行数据

此处本质上是一个 "键值对"结构

每一行就是一个键值对,键和值之间是通过 : 分割的

这里的键,都是标准已经规定好了的

空行

最后一个header后面,存在一个空格,就是用来标识 header什么时候结束

正文body

可选的,有些情况下有正文,有些情况下则没有
在这里插入图片描述
这里的内容是任意的,可以是 完整的HTML,也可以是完整的css / js,或者json数据 / 文件 / 字体…

响应报文

http响应这里也是有4部分的
在这里插入图片描述

首行

首行也分成3部分
(a)HTTP版本
(b)状态码
©状态码描述

状态码和 状态码描述,就是用来表示当前这个请求,是一个成功的现响应还是一个失败的响应
如果失败,具体是什么原因

响应的报头header
Content-Security-Policy: script-src 'report-sample' 'nonce-DZQj_AIZgPzZ8U3IlRD6Rg' 'unsafe-inline' 'strict-dynamic' https: http:;object-src 'none';base-uri 'self';report-uri https://csp.withgoogle.com/csp/clientupdate-aus/1
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: Mon, 01 Jan 1990 00:00:00 GMT
Date: Sat, 25 May 2024 16:07:58 GMT
X-Cup-Server-Proof: 3045022053fcd15abefbd905af6aec3d7b1d8e22d568cfaef94045db64c55c6d360911760221009c9723e72e9aac45564bbe973b9a2d5d770605694f39c1d49c849f53c7a6609b:04476c6afa69f5b08dd45f8ea917d5749db193b1f2b53cd712a033d88b4545a0
ETag: W/"3045022053fcd15abefbd905af6aec3d7b1d8e22d568cfaef94045db64c55c6d360911760221009c9723e72e9aac45564bbe973b9a2d5d770605694f39c1d49c849f53c7a6609b:04476c6afa69f5b08dd45f8ea917d5749db193b1f2b53cd712a033d88b4545a0"
Content-Type: application/json; charset=utf-8
X-Daynum: 6354
X-Daystart: 32878
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Server: GSE
Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
Content-Length: 461

这里和请求的报头一样,键都是标准规定好的

空行

响应头的结束标记

正文

在这里插入图片描述
这些就是我请求搜狗的网页时,返回的响应正文

http请求

认识URL

平时我们俗称的 “⽹址” 其实就是说的 URL (Uniform Resource Locator 统⼀资源定位符).

在这里插入图片描述

协议方案名

协议⽅案名. 常见的有 http 和 https, 也有其他的类型. (例如访问 mysql 时⽤的jdbc:mysql)

登录信息

这是很久之前的方式,就是描述了你登录的时候的信息,现在基本不这么干了,都是搞一个登录页面

服务器地址

描述了要访问的服务器的IP / 域名

服务器端口号

如果这里我们自己不写的话,浏览器就会自己这个URL设置一个默认的端口,这个端口号指的就是访问的服务器的端口号

如果是http协议端口号使用80,如果是https协议,端口号就是443

如果服务器的端口号不是默认的80 / 443,那么我们就必须在url里面显示写出来端口号

但是实际上一般来说,一个网站都会使用默认的端口,大部分网站还是通过80/ 443来进行部署的

带层级的文件路径

指定了要访问服务器的哪些资源

一个服务器,可以提供很多的资源供外界访问

比如,web服务器(网站),就可能包含很多的不同的资源,就可以通过这里的路径区分不同的网页资源了

此时通过Ip 确定主机

结合端口号 确定主机上的程序

结合路径确定程序里的哪个资源

结合这三部分,就能够确定互联网上的唯一网址了

查询字符串

就是浏览器传输给服务器的时候,携带的一些参数
通过参数,将客户端想传给服务器的信息告知过去

查询字符串也是键值对的格式
在这里插入图片描述
使用& 来进行多对键值对之间的分割

使用 = 来进行键和值之间的分割

片段标识符

是用来区分页面中不同部分的目录 / 导航
比如我们访问https://v2.cn.vuejs.org/v2/guide/#%E8%B5%B7%E6%AD%A5这个网站的时候,点击不同的导航,实际上还是在同一个页面,但是是不同的内容

关于url encode

在这里插入图片描述
​实际上,在url里面存在很多的特殊含义的符号,比如: / ? = & 等等

而在query string里面的value部分,一旦也包含这些符号,那不就乱套了吗,就会使得url的解析出现问题

而encode就是针对value进行转移

而也会触发不仅仅是符号,中文汉字也会触发转义

为什么不直接使用汉字?? 实际上,汉字是utf8 / gbk编码
如果某个汉字的恰好某个字节,就和某个特殊符号的ascii码值重复了,此时就可能会导致解析的时候出现问题

那么具体是怎么转码的呢??

实际上就是,遇到需要转码的字符,就显示出这个字符原始的编码的十六进制,在这个基础上,加上%

在这里插入图片描述
就比如上面的c++,+的ascii码值的十六进制就是2B,那么转移后就是 %2B

如果是汉字,就把utf8编码结果,每个字节前面,加上 % ,按照16进制的方式来表示

在解析URL的时候,见到带 % 就知道特殊的转码后的是数据了,就可以很容易的和特殊符号区分开来

认识方法

在这里插入图片描述
方法就是动作/意图,在http请求首行里,就包含了方法,语义就是,这次请求我要干啥

get方法 和 post方法

get的语义是从服务器获取某个数据
post的语义是往服务器提交某个数据

但是实际上这是最初设计出来的目的

现如今使用这两个方法的时候已经很少区分开了
即get也可能用来提交数据,post也可能用来获取某个数据

但是在习惯上的差别是
get请求报文里面通常不会 携带body,有要传输的传输,就是使用url的query string
详细请访问关于http方法中get和post的区别

而post通常使用的是body传输数据

现实网络上大部分请求都是get

至于post就比get少很多,就是登录 / 上传文件

其他方法

put方法:也是用来给服务器提交数据的,和post非常类似,不一定用来提交文件

delete是用来删除文件的,与get类似,没有body,使用的是query string

构造不同的方法请求
对于get方法

(1)在浏览器地址栏直接输入 url,此时就是get请求

(2)网页html中会有一些特殊的标签,img / a /link 这些标签,会带有一个url属性,页面被 浏览器加载之后,解析到这些标签,就会根据url构造出新的http请求

(3)表单 通过html中特殊的标签form

(4)通过js构造

比如用原生的 ajax api / jquery 的 ajax api / 第三方库 axios ,fetch…

post

(1)表单

(2)js

感谢您的访问!!期待您的关注!!!

在这里插入图片描述

T04BF

🫵 今天记得敲代码

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

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

相关文章

Java桥接模式

桥接模式 最重要的是 将 抽象 与 实现 解耦 , 通过组合 在 抽象 与 实现 之间搭建桥梁 ; 【设计模式】桥接模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )-CSDN博客 桥接模式(Bridge Pattern)-(最通俗易懂的案例)_桥接模式 例子-…

【Linux】(三)—— 文件管理和软件安装

文件管理 Linux的文件管理是系统管理中的核心部分,它涉及到如何组织、访问、修改和保护文件及目录结构。 目录 文件管理基本概念常用命令查看和切换目录创建文件和目录删除文件和目录文件拷贝移动和重命名文件文件查看cat文件查看more查找文件查找文本 数据流和管道…

保姆级讲解 Mybatis的配置与管理

Mybatis简介 MyBatis历史 MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下,iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到GithubiBatis一词来源于“intern…

大厂真实面试题(一)

滴滴大数据sql 取出累计值与1000差值最小的记录 1.题目 已知有表t_cost_detail包含id和money两列,id为自增,请累加计算money值,并求出累加值与1000差值最小的记录。 2.分析 本题主要是想找到累加值域1000差距最小的记录,也就是我们要对上述按照id进行排序并且累加,并…

华为如何造车?

引言 近年来,华为在智能汽车领域的布局备受关注,虽然华为创始人任正非曾多次表示华为不造车,但事实证明,华为在汽车产业链的深度参与已让人产生了“华为造车”的错觉。本文将探讨华为在汽车领域的发展历程,分析华为不…

F5G城市光网,助力“一网通城”筑基数字中国

《淮南子》中说,“临河而羡鱼,不如归家织网”。 这句话在后世比喻为做任何事情都需要提前做好准备,有了合适的工具,牢固的基础,各种难题也会迎刃而解。 如今,数字中国发展建设如火如荼,各项任务…

AI绘画软件深度测评:精选四款高效自动生成工具

随着人工智能技术的飞速发展,AI绘画软件已经成为艺术创作和设计领域的新宠。它们不仅能够提供无限的创意灵感,还能大幅提升工作效率。在经过对几十种AI绘画软件的测试后,我们特别推荐以下四款高效自动生成工具——Midjourney、Stable Diffusi…

Android Studio 下载 | 安装 | 下载 SDK | 中文插件 | 卸载

文章目录 下载安装包安装下载 SDK中文插件卸载 下载安装包 下载 Android Studio 和应用工具 - Android 开发者 | Android Developers 点击下载 Android Studio。 在协议最下方勾选同意(第一次用最好还是看一眼),再点击 Dowload Android Stu…

人工智能时代,Martech未来的3种场景

多年来,人们一直在预测Martech Landscape的崩溃。成千上万个不同的Martech应用程序将被筛选出少数几个赢家。在过去的12年里,这些预测一直被证明是错误的,年复一年。 但也许,只是也许,人工智能时代将成为拐点&#xf…

九.网络层协议——IP协议

TCP和IP之间的关系 引言 IP协议全称为“网际互连协议(Internet Protocol)”,是TCP/IP体系中的网络层协议. 我们在上篇文章中曾经提到过,TCP的全称是传输控制协议(Transmission Control Protocol"),它和我们的IP…

用户管理的小demo--修改、删除

目录 1、删除 同理 异常往下抛出 2、修改 2.1 在修改页面 实现数据回显 同理 往下抛异常 2.2 更新数据 3、结果: 1、删除 同理 异常往下抛出 2、修改 2.1 在修改页面 实现数据回显 同理 往下抛异常 2.2 更新数据 3、结果:

SEACells:元细胞分析

元细胞是从单细胞测序数据中衍生的细胞分组,代表高度精细的不同细胞状态。在这里,作者介绍了单细胞细胞状态聚集 (SEACells),这是一种用于识别元细胞的算法,它克服了单细胞数据的稀疏性,同时保留了传统细胞聚类所掩盖的…

安防综合管理系统EasyCVR视频汇聚平台GA/T 1400协议中的关键消息交互示例

在当今的信息化时代,公共安全防范日益成为保障社会和谐稳定的关键。视频监控系统作为现代安全防范的重要手段,正不断在公安、交通、城市管理等领域发挥着越来越重要的作用。而GA/T 1400协议视图库,作为公安视频图像信息应用系统的标准&#x…

【前端面试3+1】18 vue2和vue3父传子通信的差别、props传递的数据在子组件是否可以修改、如何往window上添加自定义属性、【多数元素】

一、vue2和vue3父传子通信的差别 1、Vue2 父组件向子组件传递数据通常通过props属性来实现。父组件可以在子组件的标签中使用v-bind指令将数据传递给子组件的props属性。在子组件中,可以通过props属性来接收这些数据。这种方式是一种单向数据流的方式,父…

SpringBoot配置Mysql+达梦双数据源

背景&#xff1a; 因项目需求&#xff0c;需使用Mysql达梦双数据源 涉及技术栈&#xff1a; SpringBoot、Druid、Mybatis、Mysql、达梦 一、引入pom依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://mave…

视频汇聚EasyCVR安防监控系统GA/T 1400协议视图库对接:技术实现与应用

随着信息技术的不断发展&#xff0c;各类协议标准在各个领域得到了广泛应用。GA/T1400协议作为公安视频监控系统中的一种重要标准&#xff0c;对于提升公安工作的信息化水平、加强社会治安防控具有重要意义。本文将重点探讨GA/T1400协议视图库对接的技术实现及应用价值。 一、…

语音深度鉴伪识别项目实战:基于深度学习的语音深度鉴伪识别算法模型(三)音频去噪算法大全+Python源码应用

前言 深度学习技术在当今技术市场上面尚有余力和开发空间的&#xff0c;主流落地领域主要有&#xff1a;视觉&#xff0c;听觉&#xff0c;AIGC这三大板块。 目前视觉板块的框架和主流技术在我上一篇基于Yolov7-LPRNet的动态车牌目标识别算法模型已有较为详细的解说。与AIGC相…

1104 天长地久(测试点1,2,3)

solution 测试点3超时&#xff1a;直接暴力搜超时。m和m1的最大公约数一定是1&#xff0c;则A的个位一定是9才有可能gcd(m, m1)大于1&#xff0c;步长变为10。测试点1&#xff0c;3&#xff1a;m和n的最大公约数是大于2的素数测试点2&#xff1a;按照n从小到大排序&#xff0c…

【spring】第一篇 IOC和DI入门案例

Spring到底是如何来实现IOC和DI的&#xff0c;那接下来就通过一些简单的入门案例&#xff0c;来演示下具体实现过程。 目录 前期准备 一、IOC入门案例 思路分析 代码实现 二、DI入门案例 思路分析 代码实现 总结 前期准备 使用IDEA创建Maven项目&#xff0c;首先需要配…

STM32 SPI驱动读取LSM6DSRTR

提示&#xff1a;通过SPI驱动读取传感器数据 文章目录 前言一、LSM6DSRTR二、配置步骤1.配置SPI2.引入 LSM驱动库3.结果 总结 前言 制作一个倾角传感器&#xff0c;通过SPI读取LSM6DSRTR的加速度数据转换为角度&#xff0c;不用IIC的原因是考虑IIC通讯的协议过于繁琐&#xff…