网络基础-应用层协议-HTTP/HTTPS

HTTP/HTTPS

  • HTTP
    • 基本概念
    • 协议格式
      • 请求报文
        • 请求方法
        • 请求资源地址
        • 协议版本
      • 应答报文
    • 常见Header
    • 常见状态码与状态描述
    • Cookie&Session
    • http协议特点
  • HTTPS
    • 基本概念
    • 对称加密与非对称加密
    • 数据摘要&数据指纹
    • HTTPS工作过程探究
      • 只采用对称加密
      • 只采用非对称加密
      • 双方都采用非对称加密
      • 对称加密+非对称加密
      • 中间人攻击
      • 证书/CA认证
        • 数据签名
        • CA认证过程
      • 最终方案
      • 使用最终方案的一些问题
        • 中间人篡改证书怎么办?
        • 中间人掉包整个证书怎么办?
        • 为什么使用数据签名?
        • 为什么不直接加密,而是对摘要加密?
        • HTTPS协议使用到的密钥

HTTP

基本概念

🚀超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。
🚀HTTP协议默认使用的80号端口。
🚀什么是URL:

URL(Uniform Resource Locator)是指统一资源定位符,是用于完整地描述Internet上网页和其他资源的地址的一种标识方法,也被称为"网址"。

🚀URL中的encode与decode:

encode:
像/ ?# &等这种符号在url中有特殊的意义。如果某个参数中存在这些符号,就要对这些字符进行转义。转义规则:将字符转化为对应的16进制,然后从右往左取4位,每2位做一位,前面加上%->%AB%CD
decode:就是encode的逆过程

协议格式

请求报文

🚀请求报文主要分为四个部分:

  1. 请求行
  2. 请求头信息
  3. 空行(用于分割报头与有效载荷)
  4. 有效载荷

每一部分通过换行符分隔

🚀请求行的格式:请求方法 请求资源地址 协议版本

请求方法

其中请求方法包括GET/POST/PUT/DELETE等
GET:获取一个静态网页/也能用于提交参数
POST:创建新的资源/提交某种数据例如,登录注册都是用POST方法提交参数
PUT:用于更新服务器上的某种资源
DELETE:用于删除服务器上的某种资源

GET与POST的异同
相同点:二者都可以用于提交参数。
不同点:GET方法提交的参数是通过URL的方式,且提交的参数大小上限为1024字节。POST方法提交参数是放到报文的有效载荷中的,相比于GET方法POST提参的方式更加私密但是二者都是不安全的,至少要经过加密处理。

请求资源地址

请求资源地址:/a/b/c/d.html
本质就是Web服务器下的某种资源的路径,其中第一个/,并不是我们服务器的根目录,而是Web根目录。

协议版本

协议的版本通常为HTTP1.0或者HTTP1.1

应答报文

🚀应答报文主要分为四个部分

  1. 状态行
  2. 响应头信息
  3. 空行(由于报头与有效载荷分离)
  4. 有效载荷

每一部分通过换行符分隔

🚀状态行的格式:协议版本 状态码 状态描述

常见Header

🚀无论是请求头信息还是响应头信息,其格式都是采用Key:Value的形式进行组织的。
🚀下面展示一些常见的头信息字段:

Content-Type:正文数据类型(text/html…) — 根据需要进行查询即可
Content-Length:正文的长度
Host:ip地址+端口号 — 客户端告诉服务器,它所请求的是哪个主机的哪个端口
User-Agent:声明客户端的操作系统和浏览器版本
Location:通常与状态码3XX搭配使用,告诉客户端接下来去哪里访问
Cookie:将用户的信息告诉客户端,客户端将信息临时存储在本地,通常与Session搭配使用。
Set-Cookie:在响应报文中服务器设置Cookie信息返回给客户端
Etag:将请求资源的唯一标识返回给客户端

断点续传功能的实现
所谓断点续传就是客户端从服务器上下载某种资源时,由于网络出现问题导致下载终止,那么网络恢复时只需接上上次下载的位置继续下载即可,不用从头开始下载。
🚀实现逻辑:

服务器设置Etag字段,告诉客户端它请求资源的唯一标识
当遇到突发情况下载中断,然后恢复时,继续下载
客户端设置If-Range字段,内容就是下载资源的唯一标识
客户端还会设置Range字段,Range字段的格式:bytes=xxx-yyy/文件总大小
xxx和yyy:请求资源的开始字节位置和结束字节位置
服务器收到If-Range字段时,会去检查客户端传来的If-Range对应的value内容与其请求的资源的唯一标识是否一致,如果一致那么再读取其Range字段,知晓具体请求的部分,返回即可,并设置状态码206。

常见状态码与状态描述

1XX:信息性状态码:通常表示请求正在处理
2XX:成功状态码

200:OK 表示请求成功。
202:Accepted 服务器已经接收到请求但是尚未处理完成

3XX:重定向状态码

301:Moved Permanently:永久重定向表示请求的资源已经重新分配URL,以后使用资源现有的URL去访问
302:Found:表示资源分配了新的URL,希望客户端本次使用新的URL去访问
307:Temporary Redirect :与302相同都是临时重定向,下次客户端还是使用老的URL进行访问,但是302可能会使老的请求方法POST重定向为GET方法,但是307会禁止将POST方法重定向为GET方法。

4XX:客户端错误状态码

404:Not Found:表示请求的资源不存在
403:Forbidden:表示请求的资源被拒绝

5XX:服务器错误状态码:

500:Internal Server Error:表示请求时服务器内部发生错误

Cookie&Session

🚀Http本身是无状态的,但是用户希望有会话保持的功能。Cookie实现原理:用户在第一次访问服务器时,服务器会通过设置Set-Cookie字段的方式将用户的信息,返回给客户端,浏览器会将用户的信息进行本地保存(可能是内存,也可能是文件级),当再次访问服务器时,浏览器会在本地读取用户信息,将用户信息提交给服务器,免去了用户再次认证的工作。
🚀Cookie&Session:单纯使用Cookie的方式可能中途被黑客劫持信息的情况,那么黑客就能获取用户的账号密码等信息,如果用户的其他应用使用的也是同样的账号密码,那么造成用户的损失是较大的,进而产生了Cookie+Session的方式,用户在第一次访问服务器的时候,在服务器端会创建一个Session对象(用于存储用户信息)存储在服务器端(内存级或者是文件级),并且产生与Session对象一一对应的Sessionid,通过设置Set-Cookie字段将Sessionid返回给客户端,这样在客户端存储就是一个Sessionid并没有直接存储用户的信息。

http协议特点

1.Http协议是明文传送,是不安全的,后面的Https协议就是对Http协议进行加密处理
2.Http是无连接的:指的是只有当客户端请求时才会建立连接,请求完毕后就是释放连接。这样可以把资源尽快的释放出来,服务于其他客户端。Http及时的释放连接可以大大提高服务器的执行效率
3.Http是无状态的:Http协议本身是无状态的,即服务器不会保留与客户端交易时的任何状态信息,每一次请求都是独立的。这样能够减轻服务器的记忆负担,提高响应速度。

HTTPS

基本概念

🚀HTTPS (全称:Hypertext Transfer Protocol Secure ),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面 。

🚀HTTPS协议默认使用的是443端口。

对称加密与非对称加密

🚀对称加密:同一个密钥可以同时作用于信息的加密和解密。
🚀对称加密的特点:计算量小,速度快,效率高。常见算法:DES。

例如,客户端发送一个数字6,使用对称加密算法,加密后的密文为6^8,服务器得到这个密文后,用同样的密钥进行解密,6 ^ 8 ^ 8 = 6.通过异或来加密就是典型的对称加密。
🚀非对称加密:用两个密钥进行加密和解密:公钥和私钥。并且用公钥加密的密文只能用私钥来解密,反之通过私钥加密的数据只能通过公钥来解密。
🚀非对称加密的特点:算法强度复杂,加密速度没有对称加密速度快。常见算法:RSA

数据摘要&数据指纹

🚀数据摘要&数据指纹:原理就是通过单项的散列函数对数据进行运算,生成一段固定长度的数据摘要。但是这并不是一种加密机制,因为没有解密,但是可以用来判断一份数据有没有被篡改,一份数据中只要有一个字母被修改那么形成的数据摘要就有很大的差距。常见算法:MD5。

🚀数据摘要的应用场景举例:

1.账号的登录注册,用户的密码是存储在公司的数据库中的,但是一定不是明文保存,因为一旦数据库泄漏那么产生的影响较大,所以一般在公司数据库中存储的都是用户密码的数据摘要,当用户登陆时,通过对用户输入的密钥进行摘要然后与数据库中存储的数据进行对比。

2.百度网盘的秒传原理:用户在百度网盘上传一份资源后,这份资源会被存储在百度的某个数据库中,并且会给这份资源生成一份数据摘要。例如:用户1在百度网盘中上传了一部电影,用户2上传了一部与用户1同样的电影,百度网盘会先将用户2上传的电影做一次摘要,与数据库中已上传的资源做对比,如果相同证明数据库中已经存在这个数据了,直接建立一个软连接即可。

HTTPS工作过程探究

🚀既然HTTPS协议是对HTTP协议的改进,对数据进行了加密,下面来探究以下HTTPS工作过程。

只采用对称加密

🚀这总方式存在明显的安全漏洞:客户端与服务器如何做到使用同一个密钥?先通过发送一个报文告诉对方使用的密钥是什么?这种方式过于简单,一旦被报文被黑客劫持,那么加密就没有意义。

只采用非对称加密

🚀服务器产生一对密钥,将公钥发送给客户端,客户端以后发送的数据都要先通过公钥加密,这样只有服务器端才能够,对报文解密,同样服务器端发送的数据只有客户端才能解密。这种方式同样存在安全漏洞,无法保证服务器将密钥发送到客户端过程的安全性。

双方都采用非对称加密

🚀客户端与服务器都生成一对密钥,然后交换公钥,这样服务器发送的数据只有客户端能够解密,客户端发送的数据只有服务器能够解密。但是无法避免中间人攻击行为,且都才用对称加密的效率过低。

对称加密+非对称加密

🚀服务器端生成一对密钥,将公钥发送给客户端,客户端在本地生成对称加密密钥,将客户端生成的密钥通过服务器的公钥进行加密发送给服务器,以后双方都采用对称加密的方式进行加密通信,效率对比上一种方式有所提升,但是仍然无法避免中间人攻击的行为。

双方都采用非对称加密&对称加密+非对称加密-共同的弱点

两种方式都存在同样且致命的问题:客户端无法判断收到的公钥确实是来自服务器的,如果这个公钥是来自中间人的,那么这种加密方式就毫无意义。

中间人攻击

🚀以对称加密+非对称加密收到中间人攻击的过程:
🚀服务器生成一对密钥S/S’,服务器将S’密钥发送给客户端,但是不幸报文被黑客截获,这个黑客产生一对密钥R/R’,将R’公钥发送给客户端,这时客户端不能区分这个公钥是否来自于服务器,客户端会生成对称加密密钥,通过R’发送给服务器,实际上是发给了中间人,这时,中间人再生成一个对称加密密钥X,将X发送给服务器,这样这个中间人就夹在了客户端与服务器之间,既可以得到服务器发送给客户端的数据,也可以得到客户端发送给服务器的数据。

受到中间人攻击的本质:客户端无法辨认收到的公钥是否真正的来自服务器端。

在这里插入图片描述

证书/CA认证

数据签名

🚀数据签名是基于非对称加密,对数据摘要进行加密后的结果就叫做数据签名。
🚀CA证书签名形成过程:CA机构有自己的公钥和私钥,私钥是不对外公布的,CA机构的公钥在浏览器中是内置的,CA机构会对服务端申请的证书内容进行Hash运算得到的数据摘要通过CA机构的私钥进行加密,得到数据简明。

CA认证过程

🚀服务端在使用HTTPS协议之前要先向CA机构发送一份CSR文件,来申请证书,证书内容包括,签发机构,有效期,服务端使用的域名,公钥,等信息。证书还需要一个数据签名,数据签名=对证书内容进行摘要后使用CA机构的私钥进行加密后的结果。

最终方案

🚀客户端在访问服务器时,服务器会首先将证书发送给客户端,其中就包括服务端的公钥。
🚀客户端识别证书的过程:1.判断证书是否还在有效期内。2.判断证书的签发机构是否受信任(操作系统中已经内置了受信任的证书签发机构)3.对证书的数据签名使用CA机构的公钥解密得到证书内容的数据摘要,然后通过同样的Hash算法对本证书的内容做数据摘要,比对两份摘要是否一致。4.还要比对证书上的域名与之前访问的域名是否一致以防中间人掉包整个证书。

使用最终方案的一些问题

中间人篡改证书怎么办?

🚀1.篡改证书内容:客户端收到证书后,会对证书的内容做Hash得到数据摘要,与数据签名解密后的摘要做对比,如果篡改了证书内容,两个摘要就会匹配不成功的。
🚀2.篡改整个证书的内容:中间人将证书的内容修改后,并且对内容做一次摘要,并且对摘要做数据签名,发送给客户端。这样做客户端也是能察觉出来的,因为客户端使用的是CA机构的公钥对数据签名解密的,如果中间人篡改了证书的数据签名的话,是解密不成功的。

中间人掉包整个证书怎么办?

🚀首先中间人没有能力制造假的证书,因为浏览器都是使用的CA机构的公钥对数据签名做解密的,如果使用假的证书,浏览器会解密失败的。那么中间人就要申请真的CA证书,那么中间人就要向CA机构提供自己的各种信息,相信他也不会这么做,即使这么做了之后,同样会出现问题,浏览器识别到证书中的域名与自己想访问的域名不一致,也会识别证书失败的。

为什么使用数据签名?

🚀防止中间人改掉证书的内容,然后重新生成一份摘要。

为什么不直接加密,而是对摘要加密?

🚀缩小密文的长度,加速密文的加密和机密提高效率。

HTTPS协议使用到的密钥

🚀一共设计到三组密钥:1.CA机构的公钥和私钥。2.服务器端生成的一对非对称加密密钥。3.客户端生成的对称加密密钥。 最终服务器与客户端之间使用的是客户端生成的对称加密密钥进行通信的,前两个密钥都是为了保证这个对称加密密钥的可靠性。

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

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

相关文章

office mac苹果办公软件安装包安装教程详解

软件下载 软件:mac office版本:2021语言:简体中文大小:4.27G安装环境:mac硬件要求:CPU2.0GHz 内存4G(或更高)下载通道 百度网盘 https://pan.baidu.com/s/1WGSB-icELUxweFkI8iIbzA 首先&#…

CocosCreator3.8研究笔记(十九)CocosCreator UI组件(三)

前面的文章已经介绍了Layout 组件 、ScrollView 组件 、PageView 组件 。 想了解的朋友,请查看 CocosCreator3.8研究笔记(十八)CocosCreator UI组件(二)。 今天我们主要介绍CocosCreator 常用组件:Butt…

【AIGC】Stable Diffusion Prompt 每日一练0915

一、前言 1.1 写在前面 本文是一个系列,有点类似随笔,每天一次更新,重点就Stable Diffusion Prompt进行专项训练,本文是第一篇《Stable Diffusion Prompt 每日一练0915》。 1.2 项目背景 stable diffusion提示词(prompt)是用于…

第 113 场 LeetCode 双周赛题解

A 使数组成为递增数组的最少右移次数 数据范围小直接模拟… class Solution { public:int minimumRightShifts(vector<int> &nums) {for (int op 0; op < nums.size(); op) {if (is_sorted(nums.begin(), nums.end()))//nums是否已经有序return op;rotate(nums.b…

Hive参数与性能调优-V2.0

Hive作为大数据平台举足轻重的框架&#xff0c;以其稳定性和简单易用性也成为当前构建企业级数据仓库时使用最多的框架之一。 但是如果我们只局限于会使用Hive&#xff0c;而不考虑性能问题&#xff0c;就难搭建出一个完美的数仓&#xff0c;所以Hive性能调优是我们大数据从业…

开源库源码分析:OkHttp源码分析(二)

开源库源码分析&#xff1a;OkHttp源码分析&#xff08;二&#xff09; 导言 上一篇文章中我们已经分析到了OkHttp对于网络请求采取了责任链模式&#xff0c;所谓责任链模式就是有多个对象都有机会处理请求&#xff0c;从而避免请求发送者和接收者之间的紧密耦合关系。这篇文章…

vue学习之element-ui组件集成

1. element-ui 链接 https://element.eleme.cn/#/zh-CN 2. element-ui 安装 cnpm install element-ui3. 创建项目 https://blog.csdn.net/qq_36940806/article/details/132921688?spm=1001.2014.3001.5502 4. 引入element库 /src/main.js 引入 element-uiimport Vue from…

基于SSM+Vue的汽车售票网站的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

Java————栈

一 、栈 Stack继承了Vector&#xff0c;Vector和ArrayList类似&#xff0c;都是动态的顺序表&#xff0c;不同的是Vector是线程安全的。 是一种特殊的线性表&#xff0c; 其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端称为栈顶&#xff0c;另…

【数据结构】ArrayList和顺序表

文章目录 1.线性表2.顺序表2.1 接口的实现 3. ArrayList简介4. ArrayList使用4.1 ArrayList的构造4.2 ArrayList常见操作4.3 ArrayList的遍历4.4 ArrayList的扩容机制 5. ArrayList的具体使用5.1 简单的洗牌算法5.2 杨辉三角 6. ArrayList的问题及思考 1.线性表 线性表&#x…

Angular变更检测机制

前段时间遇到这样一个 bug&#xff0c;通过一个 click 事件跳转到一个新页面&#xff0c;新页面迟迟不加载&#xff1b; 经过多次测试发现&#xff0c;将鼠标移入某个 tab &#xff0c;页面就加载出来了。 举个例子&#xff0c;页面内容无法加载&#xff0c;但是将鼠标移入下图…

C语言编程题(二)运算符与位运算符优先级

#include <stdio.h>int main() { unsigned char a0xa5; unsigned char b~a>>41; printf("b%d",b); return 0;} 错误思路&#xff1a; unsigned char占一个字节&#xff0c;即8bit&#xff0c;将a写入内存中的形式为&#xff1a; 1010 0101 按照常规来…

Matlab之并行程序设计实战教程

在本教程中&#xff0c;我们将介绍如何使用Matlab进行并行程序设计。我们将通过一个简单的示例来演示如何将串行代码转换为并行代码&#xff0c;以提高程序的执行效率。 示例&#xff1a;计算一个数组的平方和 假设我们有一个包含10000个元素的数组&#xff0c;我们想计算该数…

OkHttp 根据服务器返回的的过期时间设置缓存

据返回的缓存时间来缓存响应&#xff0c;可以通过使用OkHttp的CacheControl和ResponseCacheInterceptor来实现。以下是一个示例代码&#xff1a; // 创建缓存目录和缓存对象 File cacheDirectory new File(context.getCacheDir(), "http-cache"); int cacheSize 1…

[运维|数据库] 在 PostgreSQL 中使用正则表达式进行模式匹配

以下是如何在 PostgreSQL 中使用正则表达式进行模式匹配&#xff1a; SELECT column_name FROM your_table WHERE column_name ~ your_pattern;在上面的查询中&#xff1a; column_name 是您要搜索的列名。 your_table 是包含数据的表名。 ‘your_pattern’ 是您的正则表达式…

【面试刷题】——堆栈窗口

“堆栈窗口”&#xff08;Stack Window&#xff09;通常不是一个特定的编程术语&#xff0c;但可以用来描述在编程和计算机科学领域中一些相关的概念。这些概念涉及到堆栈&#xff08;stack&#xff09;和窗口&#xff08;window&#xff09;等术语的组合。以下是一些可能涉及到…

JVM——3.StringTable字符串常量池

这篇文章我们来讲一下StringTable字符串常量池 目录 1.引例 2.StringTable的特性 3.StringTable的位置 4.StringTable的垃圾回收、 5.StringTable性能调优 6.总结 1.引例 首先&#xff0c;我们来看下面的这段程序&#xff0c;请思考最终的输出结果。 输出结果&#xff…

Multitor:一款带有负载均衡功能的多Tor实例创建工具

关于Multitor Multitor是一款带有负载均衡功能的多Tor实例创建工具&#xff0c;Multitor的主要目的是以最快的速度完成大量Tor进程的初始化&#xff0c;并将大量实例应用到我们日常使用的程序中&#xff0c;例如Web浏览器和聊天工具等等。除此之外&#xff0c;在该工具的帮助下…

常用设计模式总结 + 实例

工厂模式 工厂函数通常是指一个函数&#xff0c;它用来创建和返回其他函数或对象的实例。 人话&#xff1a; 当new Class 或 Function 时&#xff0c;根据传入的参数&#xff0c;而返回不同的值&#xff0c;这就是工厂模式。 &#xff08;所以可以说&#xff0c;这是我们开…

vscode如何设置文件折叠

随着项目的不断迭代开发&#xff0c;复杂度越来越高&#xff0c;配置文件越来越多&#xff0c;导致vscode左侧文件列表展示非常不直观&#xff0c;幸好可以通过文件折叠来简化展示效果&#xff0c;把同类相关的文件折叠在一块展示&#xff0c;方便查看配置文件。配置好后的效果…