【HTTP】HTTP协议 HTTPS 协议

目录

一、HTTP

🌷1、HTTP是什么?

🌷2、HTTP的工作过程

🌷3、 抓包工具Fiddler的使用

🌷4、HTTP的协议格式(重点)

🌷5、HTTP请求

5.1 请求地址URL

5.2 方法method

5.3 认识   请求报头

🌷6、HTTP响应

6.1 状态码

6.2 响应报头

二、HTTPS

🌷1、HTTPS是什么?

🌷2、HTTPS的执行过程(重点)


一、HTTP

🌷1、HTTP是什么?

        HTTP(超文本传输协议)是一种应用非常广泛的应用层协议。HTTPs 是在 HTTP基础之上做了一个加密解密的工作。

        平时我们打开一个网站,就是通过HTTP协议来传输数据的。(所谓 "超文本" 的含义, 就是传输的内容不仅仅是文本(比如 html, css 这个就是文本), 还可以是一些其他的资源, 比如图片, 视频, 音频等二进制的数据)

        一个完整应用是由前端+后端构成的,而前后端之间的通讯是要依靠HTTP来完成的。类似于消费者在网上买东西,商家和买家之间,需要一个快递公司,HTTP就相当于这个快递公司,其中的请求方法GET/POST相当于不同类型的快递类型(比如:标准快递,加急快递)。

        HTTP往往是基于传输层的TCP协议实现的,目前我们主要使用的是HTTP1.1和HTTP2.0。

🌷2、HTTP的工作过程

🌷3、 抓包工具Fiddler的使用

        HTTP 是一个文本格式的协议,可以通过 Chrome 开发者工具或者 Fiddler 抓包,分析 HTTP 请求/响应的细节。

        Fiddler相当于一个“代理”:当浏览器访问sogou.com时,就会将HTTP的请求先发送给Fiddler,Fiddler再将请求转发给sogou的服务器,当sogou服务器返回数据的时候,Fiddler拿到返回数据,再将数据交给浏览器。因此,Fiddler对于浏览器和sogou服务器之间交互的数据细节,是非常清楚的。

 Fiddler的页面:需要知道

🌷4、HTTP的协议格式(重点)

🍅1、HTTP协议格式总结

(1)Request对象

  • 请求行【方法  地址  HTTP版本号】
  • 请求报文【很多项,是Key:value的形式】
  • 空行
  • 请求正文【程序员传递的参数】

(2)Respond对象

  • 响应行【HTTP版本号  状态码  状态码描述】
  • 响应报头【很多项,是Key:value的形式】
  • 空行
  • 响应正文【程序员返回给前端的数据】

问题:为什么要有空行存在?

        因为HTTP协议并没有规定报头部分的键值对有多少个,可能正文里也是Key:value的形式存在的,因此通过空行来区分两者,相当于空行是“报头的结束标记”。HTTP在传输层依赖TCP协议,TCP是面向字节流的,如果没有这个空行,就会出现“粘包问题”。


2、使用Fiddler抓包观察上述HTTP协议的格式

        注意观察,与上述图中的格式是一一对应的。

(1)Request

(2)Respond 

🌷5、HTTP请求

5.1 请求地址URL

 1、举例:一个具体的 URL
可以看到, 在这个 URL 中有些信息被省略了。
(1)https : 协议方案名。常见的有 http 和 https, 也有其他的类型。(例如访问 mysql 时用的
jdbc:mysql )
(2)user:pass : 登陆信息。现在的网站进行身份认证一般不再通过 URL 进行了, 一般都会省略。
(3)v.bitedu.vip : 服务器地址。此处是一个 "域名", 域名会通过 DNS 系统解析成一个具体的 IP 地址。(通过 ping 命令可以看到, v.bitedu.vip 的真实 IP 地址为 118.24.113.28 )
(4)端口号: 上面的 URL 中端口号被省略了。当端口号省略的时候, 浏览器会根据协议类型自动决定使用哪个端口。例如 http 协议默认使用 80 端口, https 协议默认使用 443 端口.
(5)/personInf/student : 带层次的文件路径。
(6)userId=10000&classId=100 : 查询字符串(query string)。本质是一个键值对结构,键值对之间使用 & 分隔, 键和值之间使用 = 分隔。
(7)片段标识: 此 URL 中省略了片段标识。片段标识主要用于页面内不同元素之间的跳转。 


2、URL encode

        像 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现。比如,某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义。一个中文字符由 UTF-8 或者 GBK 这样的编码方式构成,虽然在 URL 中没有特殊含义, 但是仍然需要进行转义, 否则浏览器可能把 UTF-8/GBK 编码中的某个字节当做 URL 中的特殊符号。

        转义的规则如下: 将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式。

  

解码的时候:urldecode。urldecode就是urlencode的逆过程。

比如:

5.2 方法method


🍅面试题:Get与Post方法的区别?

(1)数据传输方式

        Get请求是通过URL传递的,即将数据拼接到URL的后面,以?分隔,参数之间以&分隔。因此,get请求对于传输的数据大小是有限制的,通常在几千个字符以内;Post请求是将数据放在HTTP请求的请求体(正文)中传输,因此没有大小限制,可以传输较大的数据量。

(2)数据传输安全性

        GET传参放在URL里面,请求传输的数据是明文的,因此数据容易被拦截和篡改;而Post请求传输的数据放在请求体中,只有在抓包的时候才能获取信息,因此相对安全一些。

(3)缓存

Get请求是可以被缓存的,当浏览器再次请求同一个URL时,可以从缓存中直接获取数据,加快访问速度;而Post请求是不可以被缓存的,因为每次提交数据都有可能导致服务器状态的改变。

(4)历史记录的安全性问题

        Get请求的数据会被浏览器保存在历史记录和服务器日志中,容易被恶意程序利用;Post请求不会被保存在历史记录和服务器日志中,相对更加安全。

5.3 认识   请求报头

报头的种类有很多,我们主要认识下面几种常见的。

(1)Host:表示服务器主机的地址和端口。

(2)Content-Length:表示请求体body中的数据长度。

(3)Content-Type:表示请求的 body 中的数据格式。(重要)

常见的:

  • application/x-www-form-urlencoded: form 表单提交的数据格式;
  • multipart/form-data: form 表单提交的数据格式(在 form 标签中加上enctyped="multipart/form-data" . 通常用于提交图片/文件;
  • application/json: 数据为 json 格式。            

(4)User-Agent (简称 UA):表示浏览器/操作系统的属性。
(5)Referer:表示这个页面是从哪个页面跳转过来的。
🍅(6)Cookie(重要)

解决的问题:

        HTTP是基于TCP交互的,在交互的时候存在一个问题,就是HTTP本身是一个无状态的。比如说,现在登录学生系统,然后访问里面的A页面,当要再去访问B页面的时候,由于没有记录当前的登录状态,因此又要再登录一次,所以只要你去访问新的页面,就要不断的进行登录,非常麻烦。因此在登录一次之后,就要将这个登录状态记录下来,但是HTTP不支持。因此通过Cookie加Session解决HTTP无状态的情况。

        Cookie:Cookie中存储了一个字符串,这个数据可能是客户端(网页)通过js写入的,也可能来源于服务器(服务器在HTTP响应的header中通过set-Cookie字段给浏览器返回数据),可以通过这个字段实现“身份标识”的功能。

例子:

        输入csdn网站,此时默认是登录状态。是因为cookie中存储了这个登录的用户标识信息。

 现在F12,我们将cookie中的信息手动清除掉。在“应用”下的cookie。

 此时再打开csdn网页,发现登录状态已经失效。

 🍅cookie的过程

        当服务器给客户端写了一个cookie标识之后,服务器告诉浏览器将cookie标识存起来,并且每一次再去访问这个域名的时候,浏览器会将该域名(csdn)下的所有的cookie全部放在请求头里传给服务器,此时服务器就从请求头里面获取cookie信息,获取到cookie信息之后就知道是否登录了。

        session默认在服务器的内存中,根据sessionid,在服务器中的session映射表中查找是否存在。

🌷6、HTTP响应

6.1 状态码

 🍅1、理解重定向:

        比如去十字街吃饭,但是发现店面搬迁,告诉你搬迁到哪里了,你就按照新地址走就行。也就是你去原来的地方,但是发现原来的地方没有人了,但是它告诉你往哪里走,这就是重定向。

        或者相当于手机号码中的 "呼叫转移" 功能。
比如我本来的手机号是 186-1234-5678, 后来换了个新号码 135-1234-5678, 那么不需要让我的朋友知道新号码,只要我去办理一个呼叫转移业务, 其他人拨打 186-1234-5678 , 就会自动转移到 135-1234-5678上。

🍅2、知道常见的状态码

(1)200:表示访问成功;

(2)404:未知的错误:客户端将网址输错了;

(3)403:没有权限访问;

(4)500:服务器内部出错;

(5)504:网关出问题了。当服务器负载比较大的时候, 服务器处理单条请求的时候消耗的时间就会很长, 就可能会导致出现超时的情况。这种情况在双十一等 "秒杀" 场景中容易出现, 平时不太容易见到。

(6)302与301的区别

302是临时重定向:在登陆页面中经常会见到 302,用于实现登陆成功后自动跳转到主页。
301是永久重定向:当浏览器收到这种响应之后,后续的请求都会被改成新的地址;

301对于搜索引擎来说,权重比较高。

比如:去吃饭,301就相当于是临时搬迁,只是说着一段时间搬迁到新地址了,那么用户在去的时候要考虑是去新地址还是已经搬回来了,在原来的地址;而302是永久搬迁,以后去的都是新地址。

6.2 响应报头

响应报头的基本格式和请求报头的格式基本一致。
类似于 Content-Type , Content-Length 等属性的含义也和请求中的含义一致。


二、HTTPS

🌷1、HTTPS是什么?

        HTTPS(Hyper Text Transfer Protocol Secure) 也是一个应用层协议, 是在 HTTP 协议的基础上引入了一个加密层HTTP的默认端口号为80;HTTPS的默认端口号为443。

        HTTPS = HTTP+加密+认证+完整性保护

原因:

        HTTP 协议内容都是按照文本的方式明文传输的,这就导致在传输过程中出现一些被篡改的情况。这就是“运营商劫持”问题。

举例:

(1)下载一个天天动听,正常情况应该是:点击下载按钮,弹出其下载链接。

(2)被劫持的情况:点击下载按钮,弹出其他app(比如:qq浏览器的下载链接)。

 上述现象分析:

        由于我们通过网络传输的任何数据包都会经过运营商的网络设备(路由器,交换机等),那么运营商的网络设备就可以解析出你传输的数据内容并进行篡改。在点击“下载按钮”之后,其实是给服务器发送了一个HTTP请求,获取到的HTTP响应就包含了该app的下载链接,当运营商劫持之后,发现这个链接是要下载“天天动听”,就自动的把交给用户的响应篡改为“qq浏览器”的下载地址。

🌷2、HTTPS的执行过程(重点)

需要知道几个基本概念:常见的加密形式


🍅HTTPS 执行流程如下:

(1)客户端使用HTTPS来访问服务器端;

(2)服务器端返回数字证书,以及使用非对称加密的公钥给客户端,私钥服务器端自己保留;

(3)客户端验证传过来的数字证书是否有效:如果是无效证书,则说明不是服务器端,直接终止访问;如果是有效的,则进行以下几个步骤:

  • 客户端使用对称加密来生成一个共享秘钥;
  • 使用对称加密的共享秘钥来加密一些初始数据;
  • 使用非对称加密的公钥来加密(对称加密生成的)共享秘钥;
  • 发送加密后的秘钥和数据给服务器端。

(4)服务器端可以使用私钥来解密出客户端(使用对称秘钥生成的)共享秘钥,再使用共享秘钥解密出数据的具体内容;

(5)之后客户端与服务器端就可以使用共享秘钥加密的内容进行交互了。


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

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

相关文章

常见面试题之垃圾收回

1. 简述Java垃圾回收机制?(GC是什么?为什么要GC?) 为了让程序员更专注于代码的实现,而不用过多的考虑内存释放的问题,所以,在Java语言中,有了自动的垃圾回收机制&#x…

权限管理系统后端实现1-SpringSecurity执行原理概述

spring security的简单原理: SpringSecurity有很多很多的拦截器,在执行流程里面主要有两个核心的拦截器 1,登陆验证拦截器AuthenticationProcessingFilter 2,资源管理拦截器AbstractSecurityInterceptor 但拦截器里面的实现需要…

Android Studio实现内容丰富的安卓公交线路查询平台

如需源码可以添加q-------3290510686,也有演示视频演示具体功能,源码不免费,尊重创作,尊重劳动。 项目编号084 1.开发环境 android stuido jdk1.8 eclipse mysql tomcat 开发语言:java 2.功能介绍 安卓端: …

前端:运用html+css+js实现虎牙直播上的轮播图效果

前端:运用htmlcssjs实现虎牙直播上的轮播图效果 1. 我的实现效果2. 前端界面设置3. 图片动画效果实现4. 总的代码 1. 我的实现效果 近段时间看虎牙直播看的多,发现这上面的一个轮播图效果不错,如是打算运用纯htmlcssjs实现一下上述那个运行效果&#xff…

spring boot项目如何自定义参数校验规则

spring boot项目对参数进行校验时,比如非空校验,可以直接用validation包里面自带的注解。但是对于一些复杂的参数校验,自带的校验规则无法满足要求,此时需要我们自定义参数校验规则。自定义校验规则和自带的规则实现方式一样&…

LangChain大型语言模型(LLM)应用开发(三):Chains

LangChain是一个基于大语言模型(如ChatGPT)用于构建端到端语言模型应用的 Python 框架。它提供了一套工具、组件和接口,可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互&#x…

IP 协议(网络层协议)

IP协议 IP 协议作用地址管理动态分配 IP 地址NAT 机制IPv6IP 地址的组成 路由选择 IP 协议作用 主要有两点 : 地址管理 为每个上网的设备分配一个唯一地址. 路由选择 两台主机间的信息交互, 具体走哪条线路. 地址管理 先来看看 IP协议 报文格式 : IP 协议最主要就是 32 位的…

香橙派4和树莓派4B构建K8S集群实践之七: Jenkins

目录 1. 说明 2. 步骤 2.1 准备工作 2.2 安装 2.2.1 用jenkins原站for k8s的安装仓方法安装 2.2.2 Helm 安装 3. 相关命令 4. 遇到的问题 5. 参考 1. 说明 在k8s上部署jenkins,并用 jenkins.k8s-t2.com访问在namespace为devops下安装在指定节点k8s-master-…

任天堂 Switch 六月销量破纪录,极有可能成为日本市场销量冠军

任天堂于2017年发布的游戏机Switch已进入第六个年头。虽然该游戏机在硬件性能和品控方面受到一些评价不佳,但销售数据表明绝大多数玩家仍然乐意购买Switch游戏机。 根据日本经济新闻报道,今年6月Switch在日本销售了380,000台机器,同比增长68%…

【KingbaseES】如何查看表结构

SELECT column_name, data_type, is_nullable, column_default FROM information_schema.columns WHERE table_name test_szie;

ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、农业、大气等领域数据分析

查看原文>>> ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、农业、大气等领域数据分析 【内容简述】: 注:请提前自行配置上课环境 【其它相关推荐】: GEE遥感云大数据林业应用典型案例实践及GPT模型应用 基…

TCP的十个核心机制

目录 前言一 到 三四. 滑动窗口五. 流量控制六. 拥塞控制七. 延时应答八. 捎带应答九. 面向字节流十. 异常处理总结 前言 TCP协议是传输层的重点协议, 负责将数据从发送端传输到接收端. TCP协议是传输控制协议, 顾名思义也就是对数据的传输进行控制的协议. TCP 协议有很多, 我…

云端安全由繁到简,亚马逊云科技护航业务创新新局面

数字化愿景与现实存在的差距困扰着诸多企业,但造成这种差距的一个重要因素却一直被很多管理者所忽视,那就是企业未能建立应有的数字安全与合规体系。应用迭代的速度加快、数据快速膨胀、企业云原生道路上遭遇的种种困境,与数字安全部门有限的…

Kubernetes的Pod中进行容器初始化

Kubernetes的Pod中进行容器初始化 在很多应用场景中,应用在启动之前都需要进行如下初始化操作: 等待其他关联组件正确运行(例如数据库或某个后台服务)。 基于环境变量或配置模板生成配置文件。 从远程数据库获取本地所需配置,或者将自身注…

【网络技术】计算机网络介绍

写在前面 计算机网络是指将多台计算机连接起来,使它们能够相互通信和共享资源的系统。 它是现代计算机科学中的重要分支之一,为全球范围内的信息交流和数据传输提供了基础。 本文将介绍计算机网络的基础概念、体系结构、协议、常见问题等的知识。 一、基…

[LeetCode]2178.拆分成最多数目的偶整数之和

2178.拆分成最多数目的偶整数之和 题目 思路 首先,奇数是不可拆分成多数目的偶整数,这种情况返回一个空数组。 累加2以组合一个最多不同数目偶整数,当拆分的最后一个偶整数,总和大于原数时,将差值累加到最后一位偶整…

flutter RepaintBoundary 截屏图片下载,保存图片不清晰的问题

flutter RepaintBoundary 截屏图片下载,保存图片不清晰的问题 前言一、什么是RepaintBoundary二、RepaintBoundary 能干什么三、RepaintBoundary 保存图片模糊的问题四、RepaintBoundary 使用小demo总结 前言 最近工作中,突然遇到截屏保存图片的问题&…

超细,设计一个“完美“的测试用例,用户登录模块实例...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 好的测试用例一定…

Vite按需引入自定义组件unplugin-vue-components

1.安装插件 npm i unplugin-vue-components -D 2.vite.config.ts文件加如下代码 plugins: [vue({reactivityTransform: true}),Components({extensions: [vue, md],include: [/\.vue$/, /\.vue\?vue/, /\.md$/],dts: src/components.d.ts,deep: true, // 搜索子目录dirs: [s…

RabbitMQ-基础学习

在虚拟机上安装Erlang的GCC环境,装erlong,然后安装rabbitmq 参考:安装说明链接 安装web端面板 创建交换机 先学习一下工作模式(详细介绍可见官网) 上代码 1.Hello Word模式 写在测试类中: Providucer T…