HTTP和HTTPS的区别及通信原理

文章目录

HTTP

何为http?

http是超文本传输协议,H yperT ext T ransfer Protocol

HyperText:超文本,意思是不仅限于文本。泛指图片、视频、音频等等。

Transfer:传输方法,指数据传输方法。也就是超文本的传输方法。

Protocol:协议,指双方遵守的规则。按照一定的规则来执行。

以上加起来就是,超文本按照某种特定的规则来进行信息传输交换。

举一个生动形象的🌰:人们的交流。我们通过语言来进行对话交流,那么语种就是协议,话就是超文本,声音传播就是传输方法,如果会的语种不同,那么就无法进行交流,就比如各个地区的方言,又或者不同国家的语言。

通俗来讲,http协议就是"计算机们"在网络上进行信息交流时要遵守的"游戏规则",如果不遵守就无法进行通信游戏。

特性

HTTP是【无连接的,无状态的,明文传输的】,且具有跨平台的优点

无连接 :限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接。 采用这种方式可以节省传输时间。这样做的好处就是尽快将资源释放出来服务其他客户端

无状态 :协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态,HTTP不会记录用户输入的任何操作

明文传输:http协议不会对信息做任何加密或映射的操作。


那么可能就会有一个疑惑,为什么平时的登入信息只需要一次登录,即可下次无需重新输入信息来登入?

这里就引出了cookie技术🍪

http解决无状态的问题

🍪cookie

在第一次登入某个网站时,客户端通过post方法发送请求给服务端,服务端会提取http请求中body内的用户信息并保存在cookie里,然后在发送回客户端,客户端就将cookie保存在本地里,下次发送请求登入时浏览器会自带cookie,这样用户就不用多次输入账户信息了

图片转载自: 小林coding

前文有提及到,http是明文传输的,用户信息保存在cookie里,在网络传输中,那岂不是"信息裸奔",他人很轻易就可以知道我们的所有信息了。考虑到这点就引入了session技术。

session

何为session?

session是依赖于cookie的,对cookie进行一种优化升级。

还是第一次通信,客户端发送请求给服务端,服务端中请求主体中提前用户信息,并形成唯一的sessionID(还有其他内容)保存起来,返回客户端的cookies中会携带sessionID,而不是裸露的用户信息数据,下次访问时,只需要校验sessionID即可验证身份。

session确保了他人获取不到我们真实的用户信息,但是仍有缺点,随着用户数量的增多,一台服务器上的sessionID数量也会随之增多,并且不同服务器不共享sessionID,这样其他服务器也就会保存sessionID,这样同一份sessionID在不同的服务器中都保存了一份,显然,服务器的资源得不到充分利用,为了解决种种问题,新的技术孕育而生------JWT(Json Web Token)

token

和session的通信过程类似,只不过服务器上不存储sessionID了,而是通过JWT技术生成JWT,并保留签名密文,将JWT存储在cookie或者storage中返回给客户端,客户端下次请求将JWT带上即可。

图片来源:B站技术蛋

JWT结构图

以上方法其实都还会存在安全问题,就是他人可以冒名顶替我,因为浏览器是只认sessionID/JWT的,只要sessionID/JWT符合,那就认为是曾经的用户,殊不知已经狸猫换太子了。关于安全问题,一会会在https里讲解。

常见状态码

常见状态码

状态码 含义
200 OK 成功状态码,表示一切正常
301 Moved Permanently 永久重定向
302 Found 临时重定向
403 Forbidden 服务器禁止访问资源,并不是客户端的请求出错
404 Not Found 请求的资源在服务器上不存在或未找到
500 Internal Server Error 服务器发生了什么错误,我们并不知道
502 Bad Gateway 表示服务器自身工作正常,访问后端服务器发生了错误

报文和字段

来自于B站的http报文

Content-Type: 数据类型(text/html等)

Content-Length: Body的长度

Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上

User-Agent: 声明用户的操作系统和浏览器版本信息

referer: 当前页面是从哪个页面跳转过来的

location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问

Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能

方法

HTTPS

https常用端口443,http常用端口80

补充知识

HTTPS = HTTP + SSL/TLS

  • 为什么要加密?

HTTP 由于是明文传输,所谓的明文,就是说客户端与服务端通信的信息都是肉眼可见的,随意使用一个抓包工具都可以截获通信的内容。

所以安全上存在以下三个风险:

  1. 窃听风险,比如通信链路上可以获取通信内容,用户号容易没。
  2. 篡改风险,比如强制植入垃圾广告,视觉污染,用户眼容易瞎。
  3. 冒充风险,比如冒充淘宝网站,用户钱容易没。

常见的加密方式

对称加密

  • 采⽤单钥密码系统的加密⽅法,同⼀个密钥可以同时⽤作信息的加密和解密,这种加密⽅法称为对称加密,也称为单密钥加密,特征:加密和解密所⽤的密钥是相同的
  • 常⻅对称加密算法:DES、3DES、AES、TDEA、Blowfish、RC2等
  • 特点:算法公开、计算量小、加密速度快、加密效率高

对称加密其实就是通过同⼀个"密钥",++把明⽂加密成密⽂,并且也能把密⽂解密成明⽂++。

非对称加密

数字摘要 (数字指纹) && 数字签名

  • 数字摘要(数字指纹):利⽤单向散列函数(Hash函数)对信息进⾏运算,⽣成⼀串固定⻓度的数字摘要。数字指纹并不是⼀种加密机制,但可以⽤来判断数据有没有被窜改。
  • 数字签名:数据签名是数字摘要经过加密得到的

加密过程

前文说道,http是明文传输的,具有安全隐患,而为了解决这个安全隐患,http在传输的过程中可能运用了各种加密方法。

下面打算从加密方法的采用一步一步

  • 对称

    采用对称加密显然不安全,因为是公钥,大家都知道,所有信息在传递过程中第三者也可以对数据进行解密
  • 非对称

非对称加密显然比对称加密更加安全些,但是仍有缺点,一是效率低下 ,二是还有安全问题

  • 对称+非对称

    这种加密方式也能达到相对安全,且相对于非对称加密提升了不少效率(因为只在第一次获得秘钥X采用了非对称加密),但是依旧存在安全问题

刚刚上述加密均存在安全问题,这个安全问题就是中间人攻击

狸猫换太子,得到秘钥X。有人会觉得奇怪,那为什么客户端、服务端不知道被换了,这个不奇怪,因为信息通信时无法确认身份

所以引进了数字证书,用来确认身份的。

  • 对称加密+非对称+数字证书

    这里补充一些,数字证书里面是包含服务端的公钥S的,此外里面还有浏览器的域名,ip地址,且数字证书自己有公钥和私钥。浏览器里一般也会保存数字证书的公钥。
    详细了解去这: 彻底搞懂HTTPS的加密原理
相关推荐
清尘沐歌2 小时前
有什么好用的 WebSocket 测试工具吗?
websocket·网络协议·测试工具
清尘沐歌2 小时前
有什么好用的 WebSocket 调试工具吗?
网络·websocket·网络协议
earthzhang20213 小时前
《深入浅出HTTPS》读书笔记(7):安全的密码学Hash算法
网络·网络协议·http·https·1024程序员节
杜杜的man4 小时前
【go从零单排】HTTP客户端和服务端
开发语言·http·golang
AI原吾4 小时前
探索 Python HTTP 的瑞士军刀:Requests 库
开发语言·python·http·requests
找藉口是失败者的习惯4 小时前
探索 HTTP 请求方法:GET、POST、PUT、DELETE 等的用法详解
网络·网络协议·http
vortex54 小时前
HTTP 协议及内外网划分详解
网络·网络协议·http·网络安全
莫轻言舞4 小时前
Java Http 接口对接太繁琐?试试 UniHttp 框架吧
网络·网络协议·http
流氓也是种气质 _Cookie4 小时前
鸿蒙HarmonyOS 网络请求获取数据Http
http·鸿蒙·鸿蒙系统
卜及中4 小时前
理解HTTP中的Cookie与Session:机制、安全性与报头响应
网络·网络协议·http