聊聊分布式架构——Http到Https

news2024/12/30 3:45:30

目录

HTTP通信协议

请求报文

响应报文

持久连接

状态管理

HTTPS通信协议

安全的HTTPS

HTTP到HTTPS的演变

对称加密

非对称加密

混合加密机制

证书机构

SSL到底是什么

HTTPS是身披SSL外壳的HTTP


HTTP通信协议

一次HTTP请求的通信流程:客户端浏览器通过域名访问网页资源,由DNS解析得到目标服务器的ip,在HTTP、TCP/IP协议的协助下,发送请求到达服务器,服务器返回对应的XML、HTML以及JSON格式的数据。

这段请求的内容是:请求访问某台HTTP服务器上的/index.html页面资源。

请求报文

请求报文是由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成的。

其中的POST是告知服务器意图的HTTP方法,在http协议的使用频率越来越高的趋势下,大家约定了REST风格的架构规则。常见的8种HTTP方法:

方法意图请求响应
GET获取资源GET /index.html HTTP/1.1 Host: www.hackr.jp返回 index.html 的页面资源
POST传输实体主体POST /submit.cgi HTTP/1.1 Host: www.hackr.jp Content-Length: 1560(1560字节的数据)返回 submit.cgi 接收数据的处理结果
PUT传输文件PUT /example.html HTTP/1.1 Host: www.hackr.jp Content-Type: text/html Content-Length: 1560(1560 字节的数据)响应返回状态码 204 No Content(比如 :该 html 已存在于服务器上)
HEAD获得报文首部HEAD /index.html HTTP/1.1 Host: www.hackr.jp返回index.html有关的响应首部
DELETE删除文件DELETE /example.html HTTP/1.1 Host: www.hackr.jp响应返回状态码 204 No Content(比如 :该 html 已从该服务器上删除)
OPTIONS询问支持的方法OPTIONS * HTTP/1.1 Host: www.hackr.jpHTTP/1.1 200 OK Allow: GET, POST, HEAD, OPTIONS (返回服务器支持的方法)
TRACE追踪路径TRACE / HTTP/1.1 Host: hackr.jp Max-Forwards: 2HTTP/1.1 200 OK Content-Type: message/http 响应 Content-Length: 1024 TRACE / HTTP/1.1 Host: hackr.jp Max-Forwards: 2(返回响应包含请求内容)
CONNECT要求用隧道协议连接代理CONNECT proxy.hackr.jp:8080 HTTP/1.1 Host: proxy.hackr.jpHTTP/1.1 200 OK(之后进入网络隧道)

在服务器上的资源类型有很多,比如图片类型、视频类型、 Js、Css、文本等。浏览器如何识别当前类型做不同的渲染呢?

MIME Type:是描述消息内容类型的因特网标准,常见的几种类型

  • 文本文件:text/html,text/plain,text/css,application/xhtml+xml,application/xml

  • 图片文件:image/jpeg,image/gif,image/png.

  • 视频文件:video/mpeg,video/quicktime

我们可以通过两种方式来设置文件的渲染类型,第一种是 Accept,第二种是 Content-Type

  1. Accept: 表示客户端希望接受的数据类型,即告诉服务器我需要什么媒体类型的数据,此时服务器应该根据 Accept 请求头生产指定媒体类型的数据

  2. Content-Type: 表 示 发 送 端 发 送 的 实 体 数 据 类 型 , 比 如 我 们 应 该 写 过 类 似 的 : resposne.setContentType(“application/json;charset=utf-8”)的代码,表示服务端返回的数据 格式是 json。 如果 Accept 和 Content-Type 不一致,假如说 Accept 要接收的类型是 image/gif,但是服务 端返回的数据是 text/html,那么浏览器将会无法解析。

响应报文

响应报文基本上由协议版本、状态码(表示请求成功或者失败的数字代码)、用以解释状态码的原因短语、可选的响应首部字段以及实体主题构成。

如果用户访问的地址有问题,或者服务端在解析用户请求以 及处理请求逻辑时出现问题,怎么办呢?HTTP状态码会给出具体的响应结果。

类别原因短语
1XXInformational(信息性状态码)接收的请求正在处理
2XXSuccess(成功状态码)请求正常处理完毕
3XXRedirection(重定向状态码)需要进行附加操作以完成请求
4XXClientError(客户端错误状态码)服务器无法处理请求
5XXServerError(服务器错误状态码)服务器处理请求出错

常见的HTTP状态码:

  1. 200 OK:表示请求成功,服务器已经成功处理了客户端的请求。

  2. 201 Created:表示请求已经被成功处理,服务器创建了新的资源。

  3. 202 Accepted:表示请求已被接受,但尚未被执行。

  4. 204 No Content:表示请求已成功处理,但响应没有包含实体的主体部分。通常用于没有响应主体的DELETE请求。

  5. 206 Partial Content:表示服务器已经成功处理了部分GET请求,通常用于分段下载或断点续传。

  6. 301 Moved Permanently:表示请求的资源已永久性地移动到新的位置,客户端应该使用新的URL进行请求。

  7. 302 Found:表示请求的资源临时移动到了新的位置,客户端应该使用新的URL进行请求,但以后可能还会改回旧的URL。

  8. 304 Not Modified:表示资源未修改,客户端可以使用本地缓存的副本。

  9. 400 Bad Request:表示客户端发送的请求存在语法错误或无法理解的请求。

  10. 401 Unauthorized:表示客户端请求需要进行身份验证,但提供的认证信息无效。

  11. 403 Forbidden:表示客户端没有权限访问请求的资源,服务器拒绝了请求。

  12. 404 Not Found:表示请求的资源未找到。

  13. 408 Request Timeout:表示客户端请求超时。

  14. 500 Internal Server Error:表示服务器在处理请求时发生了内部错误。

  15. 502 Bad Gateway:表示服务器作为网关或代理服务器时,从上游服务器接收到无效的响应。

  16. 503 Service Unavailable:表示服务器暂时不可用,通常是因为服务器过载或维护。

  17. 504 Gateway Timeout:表示服务器作为网关或代理服务器时,从上游服务器接收到超时响应。

持久连接

在最早的http协议中,每进行一次http通信,就需要做一次tcp的连接。而一次连接需要进行3次握手,这种通信方式会增加通信量的开销。

为了解决TCP连接问题,HTTP/1.1想出了持久连接的方法,通过Connection:Keep-Alive将连接作为持久连接。持久连接的特点是,只要任意一端没有明确提出断开连接,则保持TCP连接状态,HTTP/1.1持久连接在默认情况下是激活的。

状态管理

要知道,HTTP 是无状态协议,它不对之前发生过的请求和响应的状态进行管 理。也就是说,无法根据之前的状态进行本次的请求处理。保留无状态协议这个特征的同时又要解决类似的矛盾问题,于是引入 了 Cookie 技术。

客户端通过在请求和响应报文中写入Cookie信息来控制客户端的状态;Cookie会根据从服务器端发送的响应报文内的一 个叫做Set-Cookie的首部字段信息,通知客户端保存 Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。

  • 没有Cookie信息状态下的请求

  • 第2次以后(存有cookie信息状态)的请求

服务器端会提供session的机制来保存服务端的对象状态,服务器使用一种类似于散列表的结构来保存信 息,当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求是否包含了一个session标识- session id; 如果已包含一个session id则说明以前已经为客户端创建过session,服务器就按照 session id 把这个 session 检索出来使用(如果检索不到,会新建一个); 如果客户端请求不包含sessionid,则为此客户端创建一个 session 并且生成一个与此 session 相关联的 session id, session id 的值是一个既不会重复,又不容易被找到规律的仿造字符 串,这个 session id 将会返回给客户端保存。

HTTPS通信协议

HTTP协议可能存在信息窃听或者身份伪装等安全问题。关于未加密的协议有些明显的不足之处:

  • 通信使用明文(不加密),内容可能被窃听

  • 不验证通信方的身份,因此有可能遭遇伪装

  • 无法证明报文的完整性,所以有可能已遭篡改

安全的HTTPS

HTTPS(Hypertext Transfer Protocol Secure)是一种在HTTP基础上添加了安全性特性的通信协议。HTTPS之所以被认为是安全的,主要基于以下几个关键因素:

  1. 数据加密:HTTPS使用加密算法来保护数据的机密性。通信过程中传输的数据会被加密,使得恶意攻击者无法轻松窃取敏感信息。常见的加密算法包括TLS/SSL协议中使用的RSA、Diffie-Hellman、AES等。

  2. 身份验证:HTTPS使用SSL/TLS证书来验证服务器的身份。服务器必须获得由受信任的证书颁发机构(CA,Certificate Authority)签发的数字证书,这个数字证书包含了服务器的公钥,用于建立安全连接。这样,客户端可以确保它们正在与合法的服务器通信,而不是被劫持或伪装的服务器。

  3. 数据完整性:HTTPS还提供了数据完整性保护。通过使用消息摘要(Message Digest)和数字签名等技术,客户端可以确保在传输过程中数据没有被篡改或损坏。

  4. 防止中间人攻击:HTTPS的身份验证和加密机制可以防止中间人攻击(Man-in-the-Middle Attack)。中间人攻击是指攻击者通过篡改或窃听数据流量来窃取信息。HTTPS通过数字证书来验证通信双方的身份,从而降低了中间人攻击的风险。

  5. 强大的算法和协议:HTTPS使用强大的加密算法和协议来保护数据,这些算法和协议经过广泛的安全审查和测试,以确保它们的可靠性和安全性。

  6. 强制性:对于一些敏感信息的处理,如在线银行交易或个人身份验证,HTTPS通常是强制性的,网站必须使用HTTPS来保护用户的数据。

SSL(Secure Sockets Layer)是一种用于保护网络通信安全的协议。它最初由Netscape公司开发,后来发展为TLS(Transport Layer Security),TLS 1.0之后的版本不再称为SSL,而是TLS。SSL/TLS协议的主要目标是确保在网络上传输的数据隐私和完整性,同时提供身份验证机制。

以下是SSL/TLS的主要特点和功能:

  1. 加密:SSL/TLS使用加密算法来保护数据的机密性。数据在传输过程中会被加密,以防止未经授权的访问和窃取。

  2. 身份验证:SSL/TLS提供了服务器和客户端之间的身份验证机制。服务器需要提供数字证书,证明其身份是合法的,而客户端也可以提供证书进行双向身份验证。这确保了通信的双方都是合法的。

  3. 数据完整性:SSL/TLS通过使用消息摘要和数字签名等技术来确保数据在传输过程中没有被篡改或损坏,从而提供数据的完整性保护。

  4. 防止中间人攻击:SSL/TLS的身份验证和加密机制可以有效防止中间人攻击,确保通信双方的安全性。

  5. 支持多种加密算法:SSL/TLS支持多种加密算法,包括对称加密和非对称加密,以满足不同的安全需求。

  6. 版本升级:SSL/TLS有多个版本,每个版本都不断改进和加强安全性。TLS 1.2和TLS 1.3是目前广泛使用的版本,它们提供了更强的安全性和性能。

  7. 适用于各种应用:SSL/TLS不仅适用于Web浏览器和Web服务器之间的通信,还可以用于保护电子邮件、文件传输、即时通信等各种应用的通信。

  8. 广泛采用:SSL/TLS协议是互联网上广泛采用的安全协议,许多网站和服务都使用它来保护用户的数据和隐私。

HTTP到HTTPS的演变

按下SSL的实现设计暂时不表,我们看看HTTP演变到HTTPS的过程都发生了什么。

对称加密

为了保证通信过程不被篡改和窃听,最开始想到的就是对内容加密,同时,该消息还需要能被服务端解密。那么就需要客户端和服务端用相同的密钥进行加密解密。

加密和解密同用一个密钥的方式称为共享密钥加密(Common key crypto system),也被叫做对称密钥加密。

以共享密钥方式加密时必须将密钥也发给对方。在互联网上转发密钥时,如果通信被监听那么密钥就可会落入攻击者之手,同时也就失去了加密的意义。另外还得设法安全地保管接收到的密钥。

非对称加密

公开密钥加密方式很好地解决了共享密钥加密的困难。公开密钥加密使用一对非对称的密钥。一把叫做私有密钥 (private key),另一把叫做公开密钥(public key)。顾名思义,私有密钥不能让其他任何人知道,而公开密钥则可以随意发布,任何人都可以获得。

混合加密机制

HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密机制。若密钥能够实现安全交换,那么有可能会考虑仅使用公开密钥加密来通信。但是公开密钥加密与共享密钥加密相比,其处理速度要慢。所以选择了组合起来:在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式。

证书机构

混合加密的机制设计的确很巧妙,但是在公开密钥加密的环节中还是无法证明公开密钥本身就是货真价实的公开密钥。为了解决这个问题,我们可以借助数字证书机构和其颁发的公共密钥证书。

数字证书认证机构业务流程:

  • 服务器的运营人员向数字证书认证机构提出公开密钥的申请。

  • 数字证书认证机构在判明提出申请者的身份之后,会对已申请的公开密钥做数字签名,分配这个已签名的公开密钥,并将该公开密钥放入公钥证书后绑定在一起。

服务器会将这份由数字证书认证机构颁发的公钥证书发送给客户端,以进行公开密钥加密方式通信。公钥证书也叫数字证书或者证书。

接到证书的客户端可使用数字证书认证机构的公开密钥,对那张证书上的数字签名进行验证,一旦验证通过,客户端便可明确两件事: 一,认证服务器的公开密钥的是真实有效的数字证书认证机构。二, 服务器的公开密钥是值得信赖的。

此处认证机关的公开密钥必须安全地转交给客户端。使用通信方式时,如何安全转交是一件很困难的事,因此,多数浏览器开发商发布版本时,会事先在内部植入常用认证机关的公开密钥。

SSL到底是什么

SSL协议是Netscape公司率先采用的网络安全协议;它是在传输通信协议(TCP/IP)上实现的一种安全协议,采用公开密钥技术;SSL广泛支持各种类型的网络,后来发展为TLS(Transport Layer Security),TLS 1.0之后的版本不再称为SSL,而是TLS。SSL/TLS协议的主要目标是确保在网络上传输的数据隐私和完整性,同时提供身份验证机制。

以下是SSL/TLS的主要特点和功能:

  1. 加密:SSL/TLS使用加密算法来保护数据的机密性。数据在传输过程中会被加密,以防止未经授权的访问和窃取。

  2. 身份验证:SSL/TLS提供了服务器和客户端之间的身份验证机制。服务器需要提供数字证书,证明其身份是合法的,而客户端也可以提供证书进行双向身份验证。这确保了通信的双方都是合法的。

  3. 数据完整性:SSL/TLS通过使用消息摘要和数字签名等技术来确保数据在传输过程中没有被篡改或损坏,从而提供数据的完整性保护。

  4. 防止中间人攻击:SSL/TLS的身份验证和加密机制可以有效防止中间人攻击,确保通信双方的安全性。

  5. 支持多种加密算法:SSL/TLS支持多种加密算法,包括对称加密和非对称加密,以满足不同的安全需求。

  6. 版本升级:SSL/TLS有多个版本,每个版本都不断改进和加强安全性。TLS 1.2和TLS 1.3是目前广泛使用的版本,它们提供了更强的安全性和性能。

  7. 适用于各种应用:SSL/TLS不仅适用于Web浏览器和Web服务器之间的通信,还可以用于保护电子邮件、文件传输、即时通信等各种应用的通信。

  8. 广泛采用:SSL/TLS协议是互联网上广泛采用的安全协议,许多网站和服务都使用它来保护用户的数据和隐私。

总的来说,SSL/TLS协议是网络通信安全的重要组成部分,它通过加密、身份验证和数据完整性保护等多种机制来确保通信的安全性和可信性。这使得用户可以在互联网上安全地传输敏感信息,如密码、信用卡信息和个人数据。不过需要注意的是,为了保持安全性,SSL/TLS协议的配置和使用需要得到正确的实施。

HTTPS是身披SSL外壳的HTTP

HTTPS 并非是应用层的一种新协议。只是 HTTP 通信接口部分用 SSL(Secure Socket Layer)和 TLS(Transport Layer Security)协议代替而已。

通常,HTTP直接和TCP通信。当使用SSL时,则演变成先和SSL通 信,再由SSL和TCP通信了。简言之,所谓 HTTPS,其实就是身披SSL协议这层外壳的HTTP。

在采用SSL后,HTTP就拥有了HTTPS的加密、证书和完整性保护这些功能。

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

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

相关文章

【C++】STL简介(了解)

一、什么是STL STL (standard template libaray- 标准模板库 ) : 是 C 标准库的重要组成部分 ,不仅是一个可复用的组件库,而且 是一个包罗数据结构与算法的软件框架 。 二、STL的版本 原始版本 Alexander Stepanov 、 Meng Lee 在惠普实验…

swift加载h5页面空白

swift加载h5页面空白 problem 背景 xcode swift 项目,WebView方式加载h5页面本地h5地址是:http://localhost:5173/ 浏览器打开正常 Swift 加载h5: 百度官网 加载正常本地h5页面 加载空白,没有报错 override func viewDidLoad…

RabbitMQ-工作队列

接上文 RabbitMQ-死信队列 1 工作队列模式 xx模式只是一种设计思路,并不是指具体的某种实现,可理解为实现XX模式需要怎么去写业务代码。 之前的是简单的一个消费者一个生产者模式,下边是一个生产者多个消费者的情况: 这里先定义两…

想要精通算法和SQL的成长之路 - 最长连续序列

想要精通算法和SQL的成长之路 - 最长连续序列 前言一. 最长连续序列1.1 并查集数据结构创建1.2 find 查找1.3 union 合并操作1.4 最终代码 前言 想要精通算法和SQL的成长之路 - 系列导航 并查集的运用 一. 最长连续序列 原题链接 这个题目,如何使用并查集是一个小难…

带你10分钟学会红黑树

前言: 我们都知道二叉搜索树,是一种不错的用于搜索的数据结构,如果二叉搜索树越接近完全二叉树,那么它的效率就会也高,但是它也存在的致命的缺陷,在最坏的情况下,二叉搜索树会退化成为单链表&am…

Spring三大核心组件

Spring架构图 Spring三大核心组件分别为:Core、Beans和Context 1. Core(核心): 思想:Core组件的核心思想是控制反转(IoC)和依赖注入(DI)。它将对象的创建、组装和管理的…

【图像处理】使用各向异性滤波器和分割图像处理从MRI图像检测脑肿瘤(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

番外--Task2:

任务:root与普通用户的互切(区别),启动的多用户文本见面与图形界面的互切命令(区别)。 输入图示命令,重启后就由图形界面转成文本登录界面; 输入图示命令,重启后就由文本…

Netron【.pt转.torchscript模型展示】

Netron是一个模型的展示工具,它有网页版和app版: 网页版:Netron app版:GitHub - lutzroeder/netron: Visualizer for neural network, deep learning, and machine learning models 直接用网页版吧,还不用安装。 它可…

【kubernetes】CRI OCI

1 OCI OCI(Open Container Initiative):由Linux基金会主导,主要包含容器镜像规范和容器运行时规范: Image Specification(image-spec)Runtime Specification(runtime-spec)runC image-spec定义了镜像的格式,镜像的格式有以下几…

竞赛选题 机器视觉的试卷批改系统 - opencv python 视觉识别

文章目录 0 简介1 项目背景2 项目目的3 系统设计3.1 目标对象3.2 系统架构3.3 软件设计方案 4 图像预处理4.1 灰度二值化4.2 形态学处理4.3 算式提取4.4 倾斜校正4.5 字符分割 5 字符识别5.1 支持向量机原理5.2 基于SVM的字符识别5.3 SVM算法实现 6 算法测试7 系统实现8 最后 0…

【SpringBoot】配置文件详解

配置文件详解 一. 配置文件作用二. 配置文件的格式1. properties 配置文件说明①. properties 基本语法②. 读取配置⽂件③. properties 缺点 2. yml 配置⽂件说明①. yml 基本语法②. yml 使用进阶 3. properties VS yml 三. 设置不同环境的配置⽂件 一. 配置文件作用 整个项…

jsbridge实战1:xcode swift 构建iOS app

[[toc]] 环境安装 macOs: 10.15.5 xcode: 11.6 demo:app 创建 hello world iOS app 创建工程步骤 选择:Create a new Xcode project选择:iOS-> single View App填写: project name: swift-app-helloidentifer: smile 包名language: s…

基于Android的香格里拉美食分享APP/美食分享平台/基于android的美食平台

摘 要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的APP应运而生,各行各业相继进入信息管理时代&#x…

Youtube视频下载工具分享-油管视频,音乐,字幕下载方法汇总

YouTube视频下载方法简介 互联网上存在很多 YouTube 下载工具,但我们经常会发现自己收藏的工具没过多久就会失效,我们为大家整理的这几种方法,是存在时间较久并且亲测可用的。后续如果这些工具失效或者有更好的工具,我们也会分享…

【多线程进阶】死锁问题

文章目录 前言1. 什么是死锁1.1 死锁的三种典型情况 2. 死锁产生的必要条件3.如何解决死锁问题总结 前言 上文锁策略中, 当谈到可重入锁和不可重入锁时, 我们引入了一个 “死锁” 的概念, 当针对一把不可重入锁进行连续两次的加锁行为时, 就会产生死锁. 本文就重点来讲解一下…

QT调用python程序出现问题Failed to get function

问题描述: 1.python中程序运行正常但在QTC的配置中使用Python.h调用python程序时出现Failed to get function问题,去掉python中某个包的应用就可以,比如: python部分程序: import os.path import pandas as pd如果在…

第十二届2023软件杯国家二等奖赛后感想总结

一,相关链接 软件杯官网:软件杯大赛官网 (cnsoftbei.com) 金蝶赛道:金蝶云苍穹开发者门户 (kingdee.com) 二,个人介绍 首先我是个双非院校的学生,专业为计算机科学与技术,打这个比赛是在大二下的暑假开始的…

【10】c++设计模式——>依赖倒转原则

关于依赖倒转原则,对应的是两条非常抽象的描述: 1.高层模块不应该依赖低层模块,两个都应该依赖抽象。 2.抽象不应该依赖细节,细节应该依赖抽象。 先用人话解释一下这两句话中的一些抽象概念: 1.高层模块:可…

【算法练习Day11】滑动窗口最大值前 K 个高频元素

​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 滑动窗口最大值前 K 个高频…