HTTP协议对比HTTPS协议

news2024/11/27 15:32:40

HTTP协议对比HTTPS协议

  • 1. HTTP协议
    • 1.1 概述
    • 1.2 HTTP协议格式
    • 1.3 HTTP协议支持的方法
      • 1.3.1 GET方法
      • 1.3.2 POST方法
      • 1.3.3 其他HTTP方法
      • 1.3.4 GET对比POST
    • 1.4 请求报文
      • 1.4.1 Content-Type:请求体中数据格式
      • 1.4.2 Cookie:浏览器缓存
    • 1.5 响应报文
      • 1.5.1 状态码
      • 1.5.2 响应头
  • 2. HTTPS协议
    • 2.1 加密-解密
      • 2.1.1 对称加密
      • 2.1.2 非对称加密
    • 2.2 证书
    • 2.3 HTTPS工作流程

1. HTTP协议

1.1 概述

  • HTTP(Hyper Text Transfer Protocol):超文本传输协议,是一个基于请求和响应,无状态的,应用层协议;
  • HTTP 往往是基于传输层的 TCP 协议实现的. (HTTP1.0, HTTP1.1, HTTP2.0 均为TCP, HTTP3 基于 UDP实现);
  • 不光可进行文本内容传输(如txt、html、css等),还可进行如图片、音频等二进制数据传输;
    在这里插入图片描述
  • HTTP2.0使用多路复用技术使多个HTTP请求共用一个TCP连接,提高网络传输效率!!

1.2 HTTP协议格式

  • HTTP报文分为请求报文和响应报文两种,各自对应不同的协议格式;
  • 空行后面的内容都是正文,正文部分允许为空字符串。如果存在正文,则在头部中会有一个Content-Length属性来标识正文长度;
  • URL基本格式:协议名://主机地址:端口号/文件位置?查询字符串
    在这里插入图片描述

1.3 HTTP协议支持的方法

在这里插入图片描述

1.3.1 GET方法

  • 最常用的HTTP方法,用于获取服务器上的某个资源
  • GET请求可通过如下方式发送:
    1)浏览器地址栏直接输入URL地址;
    2)HTML中link、img、script等标签,也可触发GET请求;
    3)JavaScript中Ajax也可构造GET请求;
  • GET请求特点:
  • 首行的第一部分为 GET;
  • URL 的 query string 可以为空, 也可以不为空;
  • header 部分有若干个键值对结构;
  • body 部分为空;

1.3.2 POST方法

  • 较常用的HTTP方法,用于将用户输入的数据提交给服务器
  • POST请求可通过如下方式发送:
    1)HTML中form标签,也可构造POST请求;
    2)JavaScript中Ajax也可构造POST请求;
  • POST请求特点:
  • 首行的第一部分为 POST;
  • URL 的 query string 一般为空 (也可以不为空);
  • header 部分有若干个键值对结构;
  • body 部分一般不为空. body 内的数据格式通过 header 中的 Content-Type 指定. body 的长度由header 中的 Content-Length 指定;

1.3.3 其他HTTP方法

  • PUT 与 POST 相似,只是具有幂等特性,一般用于更新
  • DELETE 删除服务器指定资源
  • OPTIONS 返回服务器所支持的请求方法
  • HEAD 类似于GET,只不过响应体不返回,只返回响应头
  • TRACE 回显服务器端收到的请求,测试的时候会用到这个
  • CONNECT 预留,暂无使用

1.3.4 GET对比POST

  • 语义不同: GET 一般用于获取数据, POST 一般用于提交数据;
  • GET 的 body 一般为空, 需要传递的数据通过 query string 传递, POST 的 query string 一般为空, 需要传递的数据通过 body 传递;
  • GET 请求一般是幂等的, POST 请求一般是不幂等的. (如果多次请求得到的结果一样, 就视为请求是幂等的);
  • GET 可以被缓存, POST 不能被缓存. (这一点也是承接幂等性);

1.4 请求报文

  • 报头格式是 “键值对” 结构;
  • 报头中每个键值对占一行, 键和值之间使用分号分割;
  • 报头结束后有一个完整空行,用于分隔报头和正文;
  • 常见报头:
报头含义
Host表示目标主机的地址和端口
Content-Length请求体正文长度
Content-Type请求体中数据格式
User-Agent简称UA,表示浏览器/操作系统的属性
Referer表示这个页面是从哪个页面跳转过来的
Cookie浏览器缓存

1.4.1 Content-Type:请求体中数据格式

  • 该请求报文希望服务器按照什么格式处理请求体中的内容;
  • application/x-www-form-urlencoded: form 表单提交的数据格式;
  • multipart/form-data: form 表单提交的数据格式(在 form 标签中加上enctyped=“multipart/form-data” . 通常用于提交图片/文件;
  • application/json: 数据为 json 格式;

1.4.2 Cookie:浏览器缓存

  • Cookie 中存储了一个字符串;
  • 字符串数据可能是客户端(网页)自行通过 JS 写入的, 也可能来自于服务器(服务器在 HTTP 响应的 header 中通过 Set-Cookie 字段给浏览器返回数据);
  • 可通过该字段实现 “身份标识” 的功能(Cookie+Session机制);

1.5 响应报文

1.5.1 状态码

  • 状态码:表示一个HTTP请求对应的结果状况如何,是否成功,或是其他的一些状况。
    在这里插入图片描述
  • 常见状态码:
状态码含义
200OK,表示成功访问
404Not Found,表示URL指向的服务器资源未找到
403Forbidden,表示访问被拒绝,有些页面需要用户具有一定的权限才能访问
405Method Not Allowed,表示服务器不支持该请求所使用的的HTTP方法
500Internel Server Error,服务器内部处理代码逻辑出现问题
502Bad Gateway,网关找不到
504Gateway Timeout,服务器负载较大时,处理请求可能会发生超时情况
301Move Permanently
302Move Temporarily
303See Other
307Temporary Redirect
304Not Modified

1.5.2 响应头

  • 报头格式是 “键值对” 结构;
  • 报头中每个键值对占一行, 键和值之间使用分号分割;
  • 报头结束后有一个完整空行,用于分隔报头和正文;
  • 响应头与请求头格式基本一致;
  • 响应头中Content-Type的取值有如下类型:
    在这里插入图片描述

2. HTTPS协议

  • HTTPS协议是在HTTP 协议的基础上引入了一个加密层;
  • HTTP协议内容都是按照文本的方式明文传输的,导致在传输过程中出现一些被篡改的情况;
  • 具体做法:先使用非对称加密传输秘钥,后续操作可直接采用对称加密!!

2.1 加密-解密

  • 加密Encrypt:将明文(plain)内容进行转换,生成密文(cipher);
  • 解密Decrypt:将密文经过变换,生成原始明文;
  • 加密/解密操作均要使用秘钥key;

2.1.1 对称加密

  • 对称加密:加密和解密过程使用相同的秘钥;
  • cipher=Encrypt(plain,key);
    在这里插入图片描述
  • 对称加密的优点:加密速度较快!!
  • HTTPS仅引入对称加密操作,服务器需要维护每个客户端对应的秘钥,此操作比较麻烦且浪费资源;
  • HTTPS仅使用对称加密的缺点:无法保证秘钥传输的安全!!

2.1.2 非对称加密

  • 非对称加密:加密和解密过程使用不同的秘钥;
  • plain=Decrypt(cipher,key);
  • 非对称加密缺点:运算速度较慢;
  • 加密-解密过程:
    方式一:使用公钥加密,使用私钥解密;
    方式二:使用私钥加密,使用公钥解密;
  • 非对称加密需要使用的秘钥分为公钥和私钥,公钥和私钥是配对的,公钥可告知所有人(比如客户端),而私钥只有服务器自己知道!!
  • HTTPS要想客户端在每次请求服务器时才商定使用的具体秘钥,且对秘钥需加密传输,则需要使用非对称加密;
  • HTTPS使用非对称加密+对称机密的混合加密方式仍然存在问题:无法保证公钥的可靠性,以及公钥如何获取;

2.2 证书

  • 要想保证非对称加密使用的公钥是安全可靠的,那么则需要有一个权威机构对公钥进行发布认证,客户只要在获得公钥的时候,核验该公钥是否是权威机构发布的即可证明该公钥是安全的;
  • 证书颁发机构(CA,Certificate Authority)即上述的权威机构,操作系统中已经内置了一些受信任的证书颁发机构的公钥;
  • HTTPS网站建立时需要向CA申请一个证书,并获得该CA机构对应的私钥;
  • 客户端与服务器在建立连接之处,服务器会向客户端发送一个证书使用CA机构的私钥进行加密),该证书包含了该网站的身份信息,包括:证书发布机构、证书有效期、非对称加密需要使用的公钥、证书所有者、**数字签名(使用如MD5加密算法对整个证书进行加密得到hash值)**等信息;
  • 客户端收到证书后会进行一系列的核验:
    1)查看证书是否过期;
    2)查看证书发布机构是否被操作系统信任;
    3)查看证书是否被篡改过:①使用对应CA机构的公钥对证书进行解密得到证书信息,获取数字签名值hash1;②使用如MD5加密算法对整个证书进行加密得到hash2值;③对比hash1和hash2,如果二者相等,则说明证书是安全的的,未被篡改;
  • 如果核验过程证明证书是安全的,则从中获取后续数据传输需使用的非对称加密对应的公钥;

2.3 HTTPS工作流程

  • 1)通信双方建立TCP连接;
  • 2)通信双方进行四次握手,沟通正式进行数据通信需要的对称秘钥:
    (1)客户端发送连接建立请求;
    (2)服务器响应连接请求,并返回服务器证书;
    (3)客户端校验证书合法性,获取服务器对应公钥,并加密发送后续对称加密对应秘钥;
    (4)服务器收到对称加密对应秘钥,发送响应报文告知客户端已经收到秘钥;
  • 3)使用对称加密进行加密通信;
    在这里插入图片描述
    注意:HTTP/HTTPS协议目前均是基于TCP协议实现,所以HTTP/HTTPS应用报文在正式进行通信之前,必须先进行TCP连接的建立!!!

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

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

相关文章

LED驱动(原始架构优化:分层/分离)——STM32MP157

文章目录 优化思想:分层Demo的LED驱动程序led_opr.hboard_demo.cleddrv.cledtest.cMakefile编译测试 STM32MP157的LED驱动程序board_stm32mp157.cleddrv.cled_opr.hMakefiel编译测试 优化思想:分离Demo的LED驱动程序led_resource.hboard_A_led.cchip_dem…

MacOS系统(M1/M2)安装AI绘画StableDiffusion保姆级教程

TOC 安装完成后,推荐阅读这篇教程:AI绘画:Stable Diffusion 终极炼丹宝典:从入门到精通 实操环境: macOS 13 Arm64(建议12以上的系统使用) Apple M1 先来看几个样例: AI绘画S…

goland自定义代码模版

在 GoLand 中我们既可以修改已有代码模版,也可以新建属于我们自己的代码模版,按需配置。 一、修改已有代码模版 现在代码编辑页输入你想更改的代码模版,然后点击右下角的小灯泡按钮,接着选中编辑活动模版设置即可。 二、新建…

[机缘参悟-99] :关于局部最优与全局最优解的人生感悟

在没有获取全局信息之前,要获得全局最优解几乎是不可能的,最多是概率大一点而已,大多数时候,由于时空资源的限制,获得往往是局部最优解,局部最优解,放在全局,往往并非全局最优&#…

数学专题训练3 数论1

1. Problem - 27E - Codeforces 给定 n ( 1 ≤ n ≤ 1000 ) n(1 \le n \le 1000) n(1≤n≤1000)​​​,找到因子个数恰好为 n n n​​​ 个的最小正整数. 保证答案不大于 1 e 18 1e18 1e18. 和 反素数 的思路是一样的,深搜 这个是枚举当前数字可以…

Shiro反序列化漏洞(CVE-2016-4437)+docker靶场+工具利用

一、Shiro反序列化漏洞-CVE-2016-4437原理 将java对象转换为字节序列(json/xml)的过程叫序列化,将字节序列(json/xml)恢复为java对象的过程称为反序列化。 Shiro框架提供了“记住我”的功能,用户登陆成功…

JPA 概述及常用注解详解、SpringDataJpa 使用指南

JPA(Java Persistence API)是 Java 标准中的一套ORM规范(提供了一些编程的 API 接口,具体实现由 ORM 厂商实现,如Hiernate、TopLink 、Eclipselink等都是 JPA 的具体实现),借助 JPA 技术可以通过…

Unity3D 入门

文章目录 拖拽快捷键资源商店地形构建器 拖拽快捷键 首先看到Scene界面,我们布置游戏场景中的游戏对象基本是在这个界面完成的 鼠标滚轮键按住:能够拖拽平面,不移动对象鼠标右键按住:能够旋转我们观察界面的视角,不移…

快速理解并实现权限控制

什么是权限控制? 权限控制是指在一个系统或应用中对用户或角色的操作进行限制和管理的过程。它用于确保只有经过授权的用户或角色能够执行特定的操作或访问特定的资源。权限控制是信息安全和访问控制的重要组成部分。 权限控制的主要目的是保护系统的安全性和完整性&#xf…

GEE:支持向量机(SVM)分类参数说明和官方案例

作者:CSDN @ _养乐多_ 本文记录了在GEE平台上进行支持向量机(SVM)分类使用ee.Classifier.libsvm的说明和官方案例。 文章目录 一、函数介绍1.1 GEE上说明1.2 函数说明二、官方案例一、函数介绍 1.1 GEE上说明 ee.Classifier.libsvm(decisionProcedure, svmType, kernelTyp…

CentOS5678 repo源 地址 阿里云开源镜像站

CentOS5678 repo 地址 阿里云开源镜像站 https://mirrors.aliyun.com/repo/ CentOS-5.repo https://mirrors.aliyun.com/repo/Centos-5.repo [base] nameCentOS-$releasever - Base - mirrors.aliyun.com failovermethodpriority baseurlhttp://mirrors.aliyun.com/centos/$r…

Springboot JPA 集成多租户

背景: ​ iot-kit项目用的是jpa,不是mybatis,项目中需要引入多租户 参考文章: 【讲解多租户的实现与原理】 https://www.bilibili.com/video/BV1F84y1T7yf/?share_sourcecopy_web&vd_source981718c4abc87423399e43793a5d3…

pytest实现用例间参数传递的方式

pytest实现用例间参数传递的方式 一、通过conftest创建全局变量二、使用tmpdir_factory方法 我们在做接口自动化测试的时候,会经常遇到这种场景:接口A的返回结果中的某个字段,是接口B的某个字段的入参。如果是使用postman,那我们可…

前端精度丢失处理

前端操作数据时,如果数据超出一定范围会出现精度丢失的问题,这是因为,在传输过程中,数据类型被转换成Number,Number的精度范围在2^53之间,即 -9007199254740991 ~ 9007199254740991,超出范围就会…

Unity游戏源码分享-迷你高尔夫球游戏MiniGolfConstructionKitv1.1

Unity游戏源码分享-迷你高尔夫球游戏MiniGolfConstructionKitv1.1 有多个游戏关卡 工程地址:https://download.csdn.net/download/Highning0007/88052881

Unity游戏源码分享-射酒瓶游戏Demo

Unity游戏源码分享-射酒瓶游戏Demo 工程地址:https://download.csdn.net/download/Highning0007/88052883

财务报表制作:哪些软件值得推荐?

当今,企业需要准确、及时地制作各种会计报表,以便管理者更好地掌握财务状况。然而,使用传统的纸质方式进行制表常常会出现复杂、繁琐等问题,降低制表效率。因此,使用会 计软件成为了制表的首选。 传统制作财务报表的方…

前端理解的HTTP缓存(缓存的过程/策略/控制机制/作用和应用)

目录 一、HTTP缓存有什么作用? 二、 浏览器的缓存策略有哪些? 1、强缓存(Expires、Cache-control) 2、协商缓存(Last-Modified、ETag) 3、缓存过程是什么? 三、浏览器缓存控制机制有哪些&…

八股文(消息队列)

文章目录 1. RabbitMQ特点2. 如何保证消息的可靠性3. RabbitMQ消息的顺序性4. 实现RabbitMQ的高可用性5. 如何解决消息队列的延时以及过期失效问题?6. RabbitMQ死信队列7. RabbitMQ延迟队列8.RabbitMQ的工作模式9. RabbitMQ消息如何传输10. 核心概念10.1 生产者和消…

MATLAB 常用函数小结

文章目录 【 生成 】随机数零或一其他 【 提取 】【 统计 】【 算法 】【 文件 】 【 生成 】 随机数 rand() rand(a,b) 生成区间 (0,1) 内均匀分布的随机数字组成的 axb 列矩阵。 均值0.5,方差1/120.08333。k*rand(a,b) 生成区间 (0,k) 内服从均匀分布的随机数字组…