HTTP/HTTPS详解

HTTP/HTTPS详解

  • 1. HTTP
    • 1.1 HTTP基础知识
    • 1.2 HTTP建立和断开连接
  • 2. HTTPS

1. HTTP

1.1 HTTP基础知识

HTTP是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用
于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。

HTTP/0.9作用是传输传输超文本内容 HTML。
协议定义了客户端发起请求、服务端响应请求的通信模式。

HTTP1.1和HTTP1.0的区别

  1. 连接
    • HTTP1.1 持长连接,每个TCP连接上可以传送多个HTTP请求和响应,默认开启Connection:Keep-Alive
    • HTTP1.0默认为短连接,每次请求都需要建一个TCP连接。
  2. 缓存
    • HTTP1.0主要使 If-Modified-Since/Expires来做为缓存判断的标准
    • HTTP1.1则引入了更多的缓存控制策略例如Entity tag / If-None-Match等更多可供选择的缓存头来控制缓存策略。
  3. 管道化
    • 基于HTTP1.1的连接,使得请求管线化成为可能。管线化使得请求能够“并行”传输,但是响应必须按照请求发出的顺序依次返回,性能在一定程度上得到了改善。
  4. 增加Host字段
    • 使得一个服务器能够来创建多个 Web站点。
  5. 状态码
    • 新增了24个错误状态响应码
  6. 带宽优化
    • HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分, 服务器却将整个对象送过来了,并且不 持断点续传功能
    • HTTP1.1则在请求头引 了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content)

HTTP2.0与HTTP1.1的区别

  1. 二进制分帧
    在应用层(HTTP/2.0)和传输层(TCP or UDP)之间增加一个二进制分帧层,从而突破HTTP1.1的性能限制,改进传输性能,实现低延迟和高吞吐量。
  2. 多路复用(MultiPlexing)
    允许同时通过单一的HTTP/2连接发起多重的请求-响应消息,这个强大的功能则是基于“二进制分帧”的特性。
  3. 首部压缩
    HTTP1.1不支持header数据的压缩,HTTP/2.0使 HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快。高效的压缩算法可以很大的压缩header,减少发送包的数量从而降低延迟。
  4. 服务端推送(server push)
    HTTP/2中,服务器可以对客户端的一个请求发送多个响应,即服务器可以额外的向客户端推送资源,而无需客户端明确的请求。

1.2 HTTP建立和断开连接

建立连接:

  1. 先通过域名系统(Domain Name System,DNS)查询将域名转换为 IP 地址。即将 xxx.com 转换为 xxx.xxx.xxx.xx这一过程。
  2. 通过三次握手建立 TCP 连接。
  3. 发起 HTTP 请求。
  4. 目标服务器接收到 HTTP 请求并处理。
  5. 目标服务器往浏览器发回 HTTP 响应。
  6. 浏览器解析并渲染页面。

断开连接:
所有 HTTP 客户端(浏览器)、服务器都可在任意时刻关闭 TCP 连接。通常会在一条报文结束时关闭连接,但出错的时候,也可能在首部行的中间或其他任意位置关闭连接。

HTTP的常见请求方式

  1. get:向服务端获取资源,所以查询操作一般用get。
  2. post:向服务端提交请求字段,创建操作使用 post,该操作不是幂等的,多次执行会导致多条数据被创建。
  3. put:修改指定URL的资源,如果资源不存在,则进行创建,修改操作一般使用 put,在http中,
    put 被定义成幂等的,多次操作会导致前面的数据被覆盖。
  4. patch:局部修改URL所在资源的数据,是对put的补充。
  5. delete:删除指定URL的资源。
  6. head:获取响应报文的首部,即获得URL资源的头部。
  7. options:询问服务器支持哪些方法,响应头中返回 Allow: GET、POST、HEAD。
  8. trace:追踪路径,主要用于测试或诊断;在请求头中在Max-Forwards字段设置数字,每经过一个
    服务器该数字就减一,当到0的时候就直接返回,一般通过该方法检查请求发送出去是否被篡改。

2. HTTPS

HTTPS工作原理(怎么建立连接):

  1. 首先,客户端向服务器端发送请求报文,请求与服务端建立连接。
  2. 服务端产生一对公私钥,然后将自己的公钥发送给CA机构,CA机构也有一对公私钥,然后CA机构使用自己的私钥将服务端发送过来的公钥进行加密,产生CA数字证书。
  3. 服务端响应客户端的请求,将CA机构生成的数字证书发送给客户端。
  4. 客户端将服务端发送过来的数字证书进行解析,验证这个数字证书是否合法,如果不合法,会发送警告。如果合法,取出服务端生成的公钥。
  5. 客户端取出公钥并生成一个随机码key(其实就是对称加密中的密钥)
  6. 客户端将加密后的随机码key发送给服务端,作为接下来的对称加密的密钥
  7. 服务端接收到随机码key后,使用自己的私钥对它进行解密,然后获得到随机码key。
  8. 服务端使用随机码key对传输的数据进行加密,在传输加密后的内容给客户端
  9. 客户端使用自己生成的随机码key解密服务端发送过来的数据,之后,客户端和服务端通过对称加密传输数据,将随机码Key作为传输的密钥。

HTTP 常见的状态码有哪些?
在这里插入图片描述

HTTPS与HTTP的区别:
HTTP 是明文传输,HTTPS通过SSL\TLS进行了加密
HTTP 的端号是80,HTTPS 是 443
HTTPS 需要到CA申请证书
HTTP 的连接简单,是无状态的;HTTPS协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比HTTP 协议安全。

SSL与TLS

  1. SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议。
  2. TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议。TLS是HTTP与TCP协议之间的一层,通常TLS发生在TCP三次握手之后,此时进行TLS四次握手,然后再进行HTTP通信。

HTTPS 解决了 HTTP 的哪些问题?
HTTP 由于是明文传输,存在以下三个风险:

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

对称加密与非对称加密
HTTPS 采用的是对称加密和非对称加密结合的「混合加密」方式。
对称加密只使用一个密钥,运算速度快,密钥必须保密,无法做到安全的密钥交换。
非对称加密使用两个密钥:公钥和私钥,公钥可以任意分发而私钥保密,解决了密钥交换问题但速度慢。

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

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

相关文章

学习一下选择排序,快速排序

1.选择排序 我们可以根据这动图看到,就是在这个数组里面我们选出最小的放进第一个位置,然后再选除了第一个位置最小的,剩下的数里面最小的放到第二个位置,是不是非常简单呢。 void SelectSort2(int* arr, int n) {int begin 0;…

Stable Diffusion 3 API 发布!超越Midjourney v6和DALL-E 3

Stable Diffusion 3 于 2 月首次宣布作为预览版发布。而今天,StabilityAI 正式推出了 Stable Diffusion 3 和 Stable Diffusion 3 Turbo API 的API接口服务。 Stability AI 称仍在持续改进该模型,并没有说明发布日期。模型还没发布,但API先来…

安装importlib_resources库的方法最终解答!_Python库

安装Python库importlib_resources 我的环境:Window10,Python3.7,Anaconda3,Pycharm2023.1.3 importlib_resources importlib_resources是一个用于访问Python包中非代码资源(如文本、图片等)的库&#xff…

neo4j使用详解(终章、neo4j的java driver使用模板及工具类——<可用于生产>)

Neo4j系列导航: neo4j安装及简单实践 cypher语法基础 cypher插入语法 cypher插入语法 cypher查询语法 cypher通用语法 cypher函数语法 neo4j索引及调优 neo4j java Driver等更多 1. 简介 本文主要是java使用neo4j driver操作neo4j的模板项目及非常有用的工具类,主要包括: 图…

yolov7模型输出层预测方法解读

本文从代码的角度分析模型训练阶段输出层的预测包括以下几个方面: 标注数据(下文统称targets)的正样本分配策略,代码实现位于find_3_positive。候选框的生成,会介绍输出层的预测值、GT、grid、 anchor之间的联系损失函…

【原创】springboot+mysql疫苗预约管理系统设计与实现

个人主页:程序猿小小杨 个人简介:从事开发多年,Java、Php、Python、前端开发均有涉猎 博客内容:Java项目实战、项目演示、技术分享 文末有作者名片,希望和大家一起共同进步,你只管努力,剩下的交…

《Kubernetes部署篇:基于Kylin V10+ARM架构CPU+外部etcd使用containerd部署K8S 1.26.15容器版集群(多主多从)》

总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:企业级K8s集群运维实战 1、在当前实验环境中安装K8S1.25.14版本,出现了一个问题,就是在pod中访问百度网站,大…

ollama大语言模型

查看已经安装的大语言模型 ollama list运行大语言模型 ollama run llama2:latest

【EI会议征稿通知】2024年图像处理、机器学习与模式识别国际学术会议(IPMLP 2024)

2024年图像处理、机器学习与模式识别国际学术会议(IPMLP 2024) 2024 International Conference on Image Processing, Machine Learning and Pattern Recognition 重要信息 大会官网:www.ipmlp.net(点击参会/投稿/了解会议详情)…

Elasticsearch:简化 KNN 搜索

作者:来自 Elastic Panagiotis Bailis 在这篇博客文章中,我们将深入探讨我们为了使 KNN 搜索的入门体验变得更加简单而做出的努力! 向量搜索 向量搜索通过在 Elasticsearch 中引入一种新的专有的 KNN 搜索类型,已经可以使用一段…

蓝桥杯2024年第十五届省赛真题-数字接龙

思路:DFS,因为输入的i,j的顺序导致,方向向量中x是行编号,y是列编号。方向向量可能和直觉上不同。 错的 //int dx[8]{0,1,1,1,0,-1,-1,-1}; //int dy[8]{1,1,0,-1,-1,-1,0,1}; 对的 int dx[]{-1,-1,0,1,1,1,0,-1}; int…

论文复现《SplaTAM: Splat, Track Map 3D Gaussians for Dense RGB-D SLAM》

前言 SplaTAM算法是首个开源的基于RGB-D数据,生成高质量密集3D重建的SLAM技术。 通过结合3DGS技术和SLAM框架,在保持高效性的同时,提供精确的相机定位和场景重建。 代码仓库:spla-tam/SplaTAM: SplaTAM: Splat, Track & Map 3…

算法一:数字 - 两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 来源:力扣(LeetCode) 链接&#xf…

政安晨:【Keras机器学习示例演绎】(一)—— 利用类 U-Net 架构进行图像分割

目录 下载数据 准备输入图像的路径和目标分割掩码 一幅输入图像和相应的分割掩码是什么样子的? 准备数据集,以加载和矢量化成批数据 准备 U-Net Xception 风格模型 预留验证分割 训练模型 可视化预测 政安晨的个人主页:政安晨 欢迎 &…

4.18学习总结

多线程补充 等待唤醒机制 现在有两条线程在运行,其中一条线程可以创造一个特殊的数据供另一条线程使用,但这个数据的创建也有要求:在同一时间只允许有一个这样的特殊数据,那么我们要怎样去完成呢?如果用普通的多线程…

FTP客户端Transmit 5 for Mac中文激活版

Transmit 5是一款功能强大的Mac FTP客户端软件,它由Panic公司开发,为用户提供简单、高效的文件传输体验。 Transmit 5 for Mac中文激活版下载 Transmit 5支持多种传输协议,如FTP、SFTP、WebDAV和Amazon S3等,满足用户不同的文件传…

eCongnition 获取特征(shp)

目录 1、加载数据和分割的shp文件 2、将专题(导入的shp)转换为对象 3、导出特征 1、加载数据和分割的shp文件 我们加载数据,在第二个框(Thematic La..)里加载矢量shp 导入的.shp文件称为专题层(Thematic Layer), 显示方式如下所示&#x…

深入探索:Facebook如何重塑社交互动

在当代社会中,社交互动已成为日常生活的核心组成部分。而在众多的社交媒体平台中,Facebook凭借其卓越的用户基础和创新的功能,已经成为了全球最大的社交媒体平台。本文将深入探讨Facebook如何通过其独特的特性和功能,重塑了人们的…

Python 字符串 Base64

因消息传输的需要,我们需要对大量文本的字符串进行一下 Base64 转换。 这样的好处是因为在传输的字符串中可能有存在一些特殊字符,这些特殊在经过网络传输的时候会出现编码的问题,并且会影响传输稳定性。 使用 Base64 可以避免这个问题。 方…

数据库--Sqlite3

1、思维导图 2sqlite3在linux中是实现数据的增删&#xff0c;改 #include<myhead.h> int main(int argc, const char *argv[]) { //1、定义一个数据库句柄指针 sqlite3* ppDb NULL; //2、创建或打开数据库 if(sqlite3_open("./mydb…