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

目录

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.hqwc.cn/news/124473.html

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

相关文章

GET 和 POST的区别

GET 和 POST 是 HTTP 请求的两种基本方法,要说它们的区别,接触过 WEB 开发的人都能说出一二。 最直观的区别就是 GET 把参数包含在 URL 中,POST 通过 request body 传递参数。 你可能自己写过无数个 GET 和 POST 请求,或者已经看…

【生物信息学】使用谱聚类(Spectral Clustering)算法进行聚类分析

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 3. IDE 三、实验内容 0. 导入必要的工具 1. 生成测试数据 2. 绘制初始数据分布图 3. 循环尝试不同的参数组合并计算聚类效果 4. 输出最佳参数组合 5. 绘制最佳聚类结果图 6. 代码整合 一、实验介绍…

黑马头条项目环境搭建

注册中心网关配置 spring:cloud:gateway:globalcors:add-to-simple-url-handler-mapping: truecorsConfigurations:[/**]:allowedHeaders: "*"allowedOrigins: "*"allowedMethods:- GET- POST- DELETE- PUT- OPTIONroutes:# 平台管理- id: useruri: lb://…

C++项目:【高并发内存池】

文章目录 一、项目介绍 二、什么是内存池 1.池化技术 2.内存池 3.内存池主要解决的问题 4.malloc 三、定长的内存池 四、高并发内存池整体框架设计 1.高并发内存池--thread cache 1.1申请内存: 1.2释放内存: 1.3用TLS实现thread cache无锁访…

HTTP协议,请求响应

、概述 二、HTTP请求协议 三、HTTP响应协议 四、请求数据 1.简单实体参数 RequestMapping("/simpleParam")public String simpleParam(RequestParam(name "name" ,required false ) String username, Integer age){System.out.println (username "…

Vue中如何进行日历展示与操作

在Vue中创建交互式日历应用 在Web开发中,创建一个交互式的日历应用是一项常见的任务。Vue.js作为一个流行的JavaScript框架,提供了许多便捷的工具和组件来简化日历的开发。本文将介绍如何使用Vue来创建一个简单但功能强大的日历应用,包括展示…

经典场的量子化

专栏目录: 高质量文章导航-持续更新中-CSDN博客 前置:复指数引起的思考 往指数函数e上丢一个复矢量出来的也是一个复矢量 其定义参考之前的文章群论-李代数_GZVIMMY的博客-CSDN博客 进一步了解下复矢量空间 首先了解下复球面(用一个球表示了所有的复数) 形如[x,y]的二维实…

Linux网络编程:详解https协议

目录 一. https协议概述 二. 中间人截获 三. 常见的加密方法 3.1 对称加密 3.2 非对称加密 四. 数据摘要和数据签名的概念 五. https不同加密方式的安全性的探究 5.1 使用对称加密 5.2 使用非对称加密 5.3 非对称加密和对称加密配合使用 六. CA认证 七. 总结 一.…

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

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

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…

扫雷小游戏(简单详细)(内附完整代码)

设计总体思路 实现游戏可以一直玩,先打印棋盘,玩家和电脑下棋,最后分出胜负。 如果编写较大的程序,我们可以分不同模块 例如这个扫雷,我们可以创建三个文件 分别为: game.h 函数的声明game.c 函数的…

激活函数介绍

介绍 神经网络当中的激活函数用来提升网络的非线性,以增强网络的表征能力。它有这样几个特点:有界,必须为非常数,单调递增且连续可求导。我们常用的有sigmoid或者tanh,但我们都知道这两个都存在一定的缺点&#xff0c…