HTTP/HTTPS协议详解

2023-10-27

目录

 一. HTTP详解

✅1.1 概念

✅1.2 HTTP的协议格式

1.2.1 HTTP请求体格式:

1.2.2 HTTP响应体格式:

✅1.3 HTTP请求方法

✅1.4 认识请求报头

✅1.5 HTTP请求过程 

✅1.6 认识状态码

二. HTTPS详解

✅2.1 HTTPS简介

✅2.2 HTTPS加密过程


TCP/UDP是位于传输层的一种协议,而HTTP/HTTPS是位于应用层的的一中协议;


 一. HTTP详解

✅1.1 概念

HTTP 协议一般指 HTTP(超文本传输协议),超文本传输协议(英语:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议,是因特网上应用最为广泛的一种网络传输协议,所有的 WWW 文件都必须遵守这个标准。HTTP 是为 Web 浏览器与 Web 服务器之间的通信而设计的,但也可以用于其他目的,HTTP 是一个基于 TCP/IP 通信协议来传递数据的(HTML 文件、图片文件、查询结果等)。


✅1.2 HTTP的协议格式

想要更好的看清HTTP的格式,我们可以通过抓包工具来解析,这里我推荐大家使用Fiddler进行抓包,亲测好用,下载链接:

Fiddler | Web Debugging Proxy and Troubleshooting Solutions (telerik.com)https://www.telerik.com/fiddler我们通过访问百度来进行抓包,打开 Fiddler 我们可以看到:


1.2.1 HTTP请求体格式:

 我们通过 Fiddler 来打开请求体可以看到:


1.2.2 HTTP响应体格式:

 我们通过 Fiddler 来打开响应体可以看到:

其实我们不难发现,HTTP响应的Body里就是HTML的本体,浏览器拿到了这个响应,也就拿到了HTML里面的所以信息,就可以显示了;


✅1.3 HTTP请求方法

根据 HTTP 标准,HTTP 请求可以使用多种请求方法;

序号 方法 描述
1 GET 请求指定的页面信息,并返回实体主体。
2 HEAD 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
3 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
4 PUT 从客户端向服务器传送的数据取代指定的文档的内容。
5 DELETE 请求服务器删除指定的页面。
6 CONNECT HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
7 OPTIONS 允许客户端查看服务器的性能。
8 TRACE 回显服务器收到的请求,主要用于测试或诊断。
9 PATCH 是对 PUT 方法的补充,用来对已知资源进行局部更新 。
这里最常用的就是 GET 和 POST 方法了;通俗点说 GET 就是从服务器里拿了什么数据,POST 就是往服务器里提交了什么数据,在我们日常使用中,绝大部分情况下我们都是GET,只有少部分会 POST ,举一个最常见的例子,我们登录或者上传文件的时候就是最常见的 POST 请求,GET 的 Body 一般为空,而 POST 的 Body 一般不为空,但是这个也不是绝对的;GET 是可缓存的,而 POST 不能;

✅1.4 认识请求报头

1)Host:表示服务器主机的地址和端口.


2)Content-Length:表示 body 中的数据长度.

 

3)Content-Type:表示请求的 body 中的数据格式


4)User-Agent (简称 UA):表示浏览器/操作系统的属性

5)Referer:表示这个页面是从哪个页面跳转过来的.

6)Cookie:Cookie 中存储了一个字符串, 这个数据可能是客户端(网页)自行通过 JS 写入的, 也可能来自于服务器(服务器在 HTTP 响应的 header 中通过 Set-Cookie 字段给浏览器返回数据);

关于Cookie的几个点:

1. Cookie 从哪里来?

是从服务器来的,当我们的浏览器访问服务器的时候,服务器就会在HTTP响应中,通过 Set-Cookie 字段,把Cookie的键值对返回给浏览器,浏览器收到这个数据,就会保存到浏览器的本地存储;

2. Cookie到哪里去?

会在下次请求的时候把Cookie再带给服务器;

3. Cookie有什么用?

是浏览器本地存储数据的机制;


✅1.5 HTTP请求过程 

HTTP请求过程实际上是一问一答的方式,就是浏览器向服务器发起请求,服务器会返回请求对应的数据包给浏览器;


✅1.6 认识状态码

1)200 OK

这是一个最常见的状态码, 表示访问成功,这里通过抓包可以看见;

 2)404 Not Found
404表示没有找到资源,比如我们在百度的网址后面加个abc子目录,这里就会提示没有找到资源,因为百度的服务器上面没有你想要的东西,所以服务器不能返回给你想要的数据;

3) 403 Forbidden

表示访问被拒绝. 有的页面通常需要用户具有一定的权限才能访问(登陆后才能访问). 如果用户没有登陆,直接访问, 就容易见到 403,通俗点来说就是你没有访问的权限;

4)500 Internal Server Error
服务器出现内部错误. 一般是服务器的代码执行过程中遇到了一些特殊情况(服务器异常崩溃)会产生这个状态码;

5)504 Gateway Timeout
当服务器负载比较大的时候, 服务器处理单条请求的时候消耗的时间就会很长, 就可能会导致出现超时的情况;

6)302 Move temporarily

临时重定向(下次要不要继续重定向,这是不确定的)

重定向:就是访问旧的地址,被自动引导到一个新的地址上;

举个例子:假设我有一个用了好长时间的手机号码,我现在想换个新的号码,但是别人不知道我换了新的号码,所以就设置了一下,别人拨打我的旧手机号码时候,我让他自动跳转到新的号码,这样我就可以接到电话了;
 

7)301 Moved Permanently

永久重定向(一直都重定向了,以后都重定向了)


二. HTTPS详解

✅2.1 HTTPS简介

其实 HTTP 和 HTTPS 没有太大的本质区别,他们可以说是一对孪生兄弟,只不过 HTTPS在 HTTP 的基础上进行了加密;


✅2.2 HTTPS加密过程

 1)对称加密

首先,客户端生成一个密钥key,通过key对所发送的数据进行加密,然后发送到服务器端,服务器端接收到之后,进行解密,再返回响应的响应给客户端,这一切看似平静祥和,但是如果中间出现一个黑客,在你转发的路由节点对这个key进行截获,也是轻而易举的事情,那么数据的安全性就得不到保障了;所以这里又引入了非对称加密;

2)非对称加密

非对称加密要用到两个密钥, 一个叫做 "公钥", 一个叫做 "私钥";

公钥和私钥是配对的. 最大的缺点就是运算速度非常慢,比对称加密要慢很多;
通过公钥对明文加密, 变成密文
通过私钥对密文解密, 变成明文

对于非对称加密的工作流程是这样的:

1.客户端的目的的是想要自己的对称密钥key安全的传输给服务器;

2.首先客户端向服务器端索要公钥,然后服务器端把公钥返回给客户端,此时如果中间有黑客劫持的话,他也得到了公钥pub;

3.客户端使用pub对key进行加密,再发送给服务器端,但是此时黑客并不能截获这个key,因为这个key是被pub加密过的,只有服务器的私密pri才可以解开;

4.服务器端使用私密pri进行解密,得到了客户端发来的key;

3)证书加密

对于上述的非对称加密,看似是安全了,其实还是存在漏洞的,假设中间有黑客想要拦截数据,在第一步的过程中,服务器端返回公钥给客户端,黑客通过自己生成一对非对称密钥,把自己的公钥返回给客户端,这样一来,数据的安全性又得不到保障了;这里也就引入了证书加密进行安全的保障;证书这个东西是具有权威的官方机构下发的,黑客对此也束手无策,因此这样保证了安全性;

4)总结整个过程:

步骤1:客户端向服务器发送 HTTPS 请求

当客户端需要从服务器获取数据时,它会向服务器发送一个 HTTPS 请求。这个请求包括请求的 URL、HTTP 请求头和请求体;

步骤2:服务器将公钥证书发送给客户端

当服务器接收到 HTTPS 请求后,它会将公钥证书发送给客户端,公钥证书中包含了服务器的公钥、服务器的域名、证书颁发机构、证书有效期等信息,客户端接收到证书后,会从中提取出服务器的公钥;

步骤3:客户端验证服务器的证书

客户端接收到服务器的证书后,会对其进行验证,以确保该证书是由可信任的证书颁发机构颁发的,并且证书中的域名和服务器的实际域名一致,如果证书验证失败,客户端会中断连接。如果验证通过,客户端会生成一个用于会话的对称密钥;

步骤4:客户端生成一个用于会话的对称密钥

客户端生成一个用于会话的对称密钥。对称密钥是一种加密方式,它使用相同的密钥进行加密和解密。这个密钥只存在于客户端和服务器之间,因此被称为“对称”。

步骤5:客户端使用服务器的公钥对对称密钥进行加密,并将加密后的密钥发送给服务器

客户端使用服务器的公钥对对称密钥进行加密,并将加密后的密钥发送给服务器。在这个过程中,客户端和服务器都知道对称密钥,但是只有客户端知道对称密钥的值。

步骤6:服务器使用私钥对客户端发送的加密密钥进行解密,得到对称密钥

服务器使用私钥对客户端发送的加密密钥进行解密,得到对称密钥。由于私钥只在服务器端保存,因此只有服务器才能解密客户端发送的加密密钥,并得到对称密钥的值;

步骤7:服务器和客户端使用对称密钥进行加密和解密数据传输

服务器和客户端使用对称密钥进行加密和解密数据传输。这个对称密钥只存在于客户端和服务器之间,因此对数据的加密和解密只有客户端和服务器可以进行;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTTP/HTTPS协议详解 的相关文章

  • 如何找出数据包的HTTP头长度?

    我知道如何手动执行此操作 通过查看十六进制转储 我怎样才能自动获得相同的信息 我必须使用 API 吗 我有wireshark 和Microsoft 网络监视器 这可以通过简单地实现Lua解析器 http wiki wireshark org
  • https登录的安全性?

    我正在编写一个 Apple iOS 应用程序 用于登录帐户并获取一些余额 它使用纯 html 链接进行登录 用户名和密码在运行时动态加载到登录链接 我使用 Wireshark 嗅探了流量 但在发送的任何包中都找不到用户名或密码 我猜 htt
  • Nitrous.IO 上的 HTTPS (TLS/SSL) 服务器

    请问如何在 Nitrous IO Boxes 上创建 TLS 服务器 我认为我至少必须获得 cert pem 和 key pem 或类似的东西 根据您所在的区域 您可以自动获得 SSL 身份验证 这样就够了吗 http help nitro
  • 使用:text/plain; 有什么缺点吗?字符集=“UTF-8”

    我的网络服务器提供的内容在 95 的情况下只是简单的 ascii 但在极少数情况下 内容包含一些德语非 ASCII 字符 现在我可以设置content type通过检测内容是否包含任何非 ASCII 字符来响应标头 或者我可以始终设置响应标
  • 如何在 G-WAN 中添加 HTTP/2

    我想知道是否可以通过使用解决方案 nghttp2 https nghttp2 org https nghttp2 org 很抱歉这么晚才回答 出于某种原因 Stackoverflow 没有通知我们这个问题 我之所以找到它只是因为收到了更新的
  • 当支持 SPDY 的浏览器收到 HTTP2 (H2) 响应时会发生什么?

    我的直觉是 支持 SPDY 的浏览器会将其视为 SPDY 响应 然而 我能找到的最多的是 H2 响应将优雅地降级到 HTTP1 1 的保证 我正在考虑以面向 H2 的方式提供资产 多个请求 无域分片等 但我确实需要支持一些非 H2 浏览器
  • RESt api:根据身份验证对资源和内容进行识别

    我正在设计一个遵循 HATEOAS REST 原则的 API 但我不确定这个基本点 资源识别 假设这个网址 images它公开了用户 向该用户 上传的所有图像 假设我使用 oauth 访问令牌进行身份验证 images 的内容将根据授权标头
  • 对于较大的请求正文,Nginx proxy_cache_key $request_body 将被忽略

    我使用 nginx 作为反向代理 我希望它能够缓存 POST 请求 我的后端已正确配置为为 POST 请求返回适当的缓存控制标头 在 nginx 中我配置了 proxy cache methods POST proxy cache key
  • Java Junit 测试 HTTP POST 请求

    我需要测试以下方法而不改变方法本身 该方法向服务器发出 POST 方法 但我需要制作一个独立于服务器的测试用例 在将其重定向到本地文件之前 我测试了类似的方法 但为此我将协议指定为文件 主机名指定为 localhost 端口指定为 1 我的
  • 为什么我在 Firefox 中突然遇到“阻止加载混合活动内容”问题?

    今天早上 在将我的 Firefox 浏览器升级到最新版本 从 22 到 23 后 我的后台 网站 的一些关键功能停止工作 查看Firebug日志 报告了以下错误 Blocked loading mixed active content ht
  • 使用带有 HTTPS 证书的 System.Net.WebClient

    在我的 C Windows 客户端中 我向 母舰 进行了 POST 提交 当然 我希望提交的数据受到保护 因此我付费让 HostGator 向我颁发 SSL 证书 我保存了 CER 文件 并且正在构建请求 如下所示 wrapper for
  • 如何在PHP中完成http响应并进行进一步处理?

    就我而言 我需要向客户端回显一个标志并发送一封电子邮件 现在客户端需要等待电子邮件发送 但我想把这两个步骤分开 该怎么做呢 你可以看一下异步运行 PHP 任务 https stackoverflow com questions 858883
  • 读取 GetResponseStream() 的最佳方式是什么?

    从 GetResponseStream 读取 HTTP 响应的最佳方法是什么 目前我正在使用以下方法 Using SReader As StreamReader New StreamReader HttpRes GetResponseStr
  • 在 grails 中编写代理

    我正在使用 Gralis 1 3 7 我正在编写一个控制器 需要从另一台服务器获取 PDF 文件并将其返回给客户端 我想以某种相当有效的方式来做到这一点 例如 class DocController def view URL source
  • 我需要编写什么代码才能使用 HTTPS?

    在标准的 小册子 站点中 我有一个子系统 其中私人数据在一系列页面中来回传递 该网站已完成 现在可以在没有 HTTPS 的情况下运行 有人可以向我指出在网站的安全部分实施 HTTPS 所需执行的步骤列表吗 作为程序员 您唯一需要做的就是检查
  • 如何在 ASP.NET MVC 中获取参数数组作为 GET / POST?

    如何最好地获取数组 item gt value 对作为 GET POST 参数 在 PHP 中 我可以这样做 网址 这得到的参数为 Array a gt Array one gt 100 two gt 200 有什么方法可以在 ASP NE
  • Inno 安装脚本中的 HTTP POST 请求

    我想通过 POST 将 Inno 安装过程中从用户收集的一些信息提交到我们的服务器 明显的解决方案是包含一个 exe 文件 安装程序会将其提取到临时位置并使用参数启动 但是 我想知道 有没有更简单 更好的方法 基于 jsobo 使用建议Wi
  • python中的编码检测库[重复]

    这个问题在这里已经有答案了 这在某种程度上与我的问题有关here https stackoverflow com questions 2305997 unicodedecodeerror problem with mechanize 我处理
  • 如何在纯 HTML 页面中返回特定的 HTTP 状态代码

    Google 建议当网站暂时不可用时返回 503 HTTP 响应 我有一些纯 HTML 网站 如何在纯 HTML 网站中返回 503 状态 我使用的是带有 Apache 的 Linux 机器 您必须在服务器上而不是在 HTML 文件中设置状
  • AddressAccessDeniedException :无需 netsh 即可解决它?

    我遇到了异常AddressAccessDeniedException因为我的processus没有注册URL的权限 我首先以管理员身份运行我的程序 好的 它成功了 但我现在想要分发我的应用程序 并且我希望每个用户都能够运行它 而不必成为管理

随机推荐

  • PCIE专题学习——1.0

    PCIE基础概念 一 1 PCIe的概念 PCIe是一种全双工 差分 端对端 串行告诉接口协议 PCI是并行处理的机制 差分可以提高传输的稳定性 全双工意味着发送端在发送的同时 也可以接收 问题在于串行会比并行处理快吗 当然不一定 这和系统
  • RuntimeError: The Session graph is empty. 和no Attribute““解决方法

    问题产生的原因 无法执行sess run 的原因是tensorflow版本不同导致的 tensorflow版本2 0无法兼容版本1 0 解决办法 添加行 tf compat v1 disable eager execution 无法执行se
  • JAVA 通过POI实现Excel从单元格选择下拉选项

    发生情景 最近使用到了模板导出功能 最开始使用的是hutool的POI工具 但是做下拉列表的时候 addSelect方法报错 问题 Excel在添加自定义下拉数据的时候 输入内容不能大于255个字符 这在做一些简单的下拉选项时没有问题 但是
  • 数论整理之算数基本定理de变形

    D Sigma Function 这道题一看到就和上一道题很像 以为也是算数基本定理的考查 做了一下 发现能过样例 tle tle的思路 经过多次验算 就是发现幂的规律吧 只要存在一个pi ei都为奇数的pi ei 就能使sum为偶数 素因
  • R语言中的quantile()函数

    在R语言中取百分位比用quantile 函数 下面举几个简单的示例 1 求某个百分位比 gt data lt c 1 2 3 4 5 6 7 8 9 10 gt quantile data 0 5 50 5 5 gt quantile da
  • 【ES】原生es的复杂查询

    原生es的复杂查询 相关依赖 复杂查询概述 外层查询 SearchSourceBuilder 类 外层查询概述 对查询结果进行分页 对查询结果进行排序 对查询结果字段进行过滤 对查询结果进行聚合 求年龄的最大值 根据年龄进行分组 内层查询
  • 关于两个页面用params传数据,刷新后数据消失的解决

    通常我们在两个页面传数据时 一般会采用params query 或者将数据用vuex localStorage sessionStorage存储起来 然后方便其他页面调用数据 但是params和vuex有一个不好的地方就是只要我们在接受数据
  • R6-1 给定两个均不超过9的正整数a和n,要求编写函数fn(a,n) 求a+aa+aaa++⋯+aa⋯aa(n个a)之和,fn须返回的是数列和函数接口定义:fn(a,n)其中 a 和 n 都是用户传

    给定两个均不超过9的正整数a和n 要求编写函数fn a n 求a aa aaa aa aa n个a 之和 fn须返回的是数列和 函数接口定义 fn a n 其中 a 和 n 都是用户传入的参数 a 的值在 1 9 范围 n 是 1 9 区间
  • python学习笔记---函数【廖雪峰】

    函数 调用函数 函数名其实就是指向一个函数对象的引用 完全可以把函数名赋给一个变量 相当于给这个函数起了一个 别名 gt gt gt a abs 变量a指向abs函数 gt gt gt a 1 所以也可以通过a调用abs函数 1 定义函数
  • UE4内置浏览器支持h264 mp4 视频 编译cef3 3071源码

    转载 原文链接 UE4内置浏览器支持h264 mp4 视频 编译cef3 3071源码 ue4 cef 鸿蒙老道的博客 CSDN博客首先ue4内置的CEF3 浏览器是不支持h264视频的 所以需要我们重新编译CEF内核 然后覆盖旧的版本一
  • 空闲时间不要接私活,要提升自己

    这个话题很纠结 现在社会 有很多人都在利用个人时间兼职赚钱 程序员俗称 接私活 其他行业称作兼职 比如下了班出去跑滴滴 周末兼职抢单送外卖等等 都是普通人很常见的兼职方式 甚至很多技术同行 我听说也有周末去跑滴滴和送外卖的 我觉得很不可思议
  • JVM-对象内存分配与回收细节问题

    对象内存分配与回收细节问题 1 禁用System gc System gc 会显示直接触发Full GC 同时触发老年代和新生代进行回收 而一般情况是我们认为 垃圾回收时自动进行的 无需手动触发 频繁的垃圾回收对系统性能造成较大影响 可以使
  • [数据分析与可视化] 基于matplotlib-scalebar库绘制比例尺

    matplotlib scalebar是一个Python库 用于在matplotlib图形中添加比例尺 它允许用户指定比例尺的大小 位置 字体和颜色 以及比例尺的单位 该库支持不同的比例尺单位 例如米 英尺 英寸等 matplotlib s
  • 一个51单片机矩阵键盘的扫描,消抖和键号显示程序

    51单片机的按键判断是一项很重要的功能 在蓝桥杯的比赛中必不可少 下面介绍一个稳定性比较好的矩阵键盘程序 首先介绍一下该矩阵键盘的基本原理 1 扫描 四条列线 接单片机的P2 4 P2 7口 电平都为1 四条行线 接P2 0 P2 3口 先
  • 交叉熵、信息熵、KL散度、互信息与Information Bottleneck【信息瓶颈IB】之间的关系

    Information Bottleneck IB 预备知识 交叉熵损失函数 CrossEntropy Loss 在DL中 交叉熵损失函数用作分类问题 使用它作为Loss Function时 在模型的输出层总会接一个softmax函数 交叉
  • js制作css滚动条,css、js实现自定义滚动条的两种方式

    一般默认的滚动条会比较丑 我们可以利用css或者js来实现实现自定义滚动条的功能 下面就整理2种实现方式 1 css自定义滚动条 需要在WebKit平台上才支持 代码如下 webkit scrollbar width 8px webkit
  • Python编程练习:翻转数字

    coding utf 8 10 翻转数字 难度 中等 通过键盘输入一个数字 若 1 该数字位各个位上的数字和为奇数 则将该数各位数倒叙打印 如122 各个位上的数字之和为1 2 2 5 打印221 2 若该数字各个位数之和为偶数 则直接打印
  • python中[::-1]是什么意思

    c 1 2 3 4 5 6 c 1 6 5 4 3 2 1 反转列表顺序 扩展 a 0 1 2 3 4 5 6 7 8 9 b a i j 表示复制a i 到a j 1 以生成新的list对象 b a 1 3 那么 b的内容是 1 2 当i
  • CMake Error: The source “xxx“ does not match the source “yyy“ used to generate cache. Re-run cmake

    目录 场景复现 解决方案 找到我们的编译路径 重新使用CMake编译 场景复现 今天使用CMake再次编译fmt源码时 cmake抛出一个错误 告诉我找不到一个路径 但我这个电脑本就没有这个路径 仔细一看这个路径是我在另一个电脑编译的路径
  • HTTP/HTTPS协议详解

    目录 一 HTTP详解 1 1 概念 1 2 HTTP的协议格式 1 2 1 HTTP请求体格式 1 2 2 HTTP响应体格式 1 3 HTTP请求方法 1 4 认识请求报头 1 5 HTTP请求过程 1 6 认识状态码 二 HTTPS详