浅谈HTTP

2023-11-19

HTTP(Hyper-Text Transfer Protocol,超文本传输协议),完成从客户端到服务器的一系列运作流程。是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。

HTTP的发展历程:

HTTP 的最早版本诞生在 1990 年,这个最早版本和现在比起来极其简单,没有 HTTP 头,没有状态码,甚至版本号也没有。并没有作为正式的标准被建立。HTTP/0.9 包含了1.0以前的所有版本。只支持一种方法—— Get,请求只有一行。get/hello.html 响应也是非常简单的,只包含 html 文档本身。

当 TCP 建立连接之后,服务器向客户端返回 HTML 格式的字符串。发送完毕后,就关闭 TCP 连接。由于没有状态码和错误代码,如果服务器处理的时候发生错误,只会传回一个特殊的包含问题描述信息的 HTML 文件。这就是最早的 HTTP/0.9 版本。

1996年5月http 1.0协议:所有信息明文公开。无状态,每次发送数据都要建立起tcp连接,且只能发送一个数据包,接收方只能接受一个数据包,只能发送文字,耗时长,效率低。

1997年http1.1协议:设计了一种长连接(persistent connection),在一次通信中,可以保持tcp连接不断开。可以收发多个数据包,内容可以是文字,图片,视频等。

2015年,http2发布,实现了“多工”方式,双方可以同时实时向对方发生那个数据。同时,将所有的信息格式都定义为2进制,为了将来能直接发送更高级的应用二方便解码。

HTTP的工作原理:

HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。

HTTP 请求/响应的步骤:

1、客户端连接到Web服务器

一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,http://www.oakcms.cn。

2、发送HTTP请求

通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。

3、服务器接受请求并返回HTTP响应

Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。

4、释放连接TCP连接

若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;

5、客户端浏览器解析HTML内容

客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

HTTP的缺点:

1、http协议发送的数据都是明文发送,信息容易被窃取和篡改。互联网上的任何角落都存在着通信内容被窃听的风险。HTTP本身不具备加密的功能,无法做到对通信整体进行加密。

目前,最为普及的保护信息的手段就是加密技术,加密的对象可以是:

1)通信加密,通过SSL(Secure Socket Layer,安全套接层)或TLS(Transport Layer Security,安全传输层协议)的组合使用,加密HTTP的通信内容。用SSL建立安全通信线路之后,就可以在这条线路上进行HTTP通信了。与SSL组合适用的HTTP被称为HTTPS(HTTP Secure,超文本传输安全协议)或HTTP over SSL。

2)内容的加密。客户端需要对HTTP报文进行加密处理后再发送请求。

2、不验证通信方的身份,可能遭遇伪装。

HTTP协议中的请求和响应不会对通信方进行确认。不论是谁发送过来的请求都会返回响应。会造成以下隐患:

● 无法确定请求发送至目标的Web服务器是否是按真实意图返回响应的那台服务器。有可能是已伪装的Web服务器。
● 无法确定响应返回到的客户端是否是按真实意图接收响应的那个客户端。有可能是已伪装的客户端。
无法确定正在通信的对方是否具备访问权限。因为某些Web服务器上保存着重要的信息,只想发给特定用户通信的权限。
● 无法判定请求是来自何方、出自谁手。
● 即使是无意义的请求也会照单全收。无法阻止海量请求下的DoS攻击(Denial of Service,拒绝服务攻击)。

SSL使用了证书手段用于确定通信方。

3、无法证明报文的完整性。请求或响应在传输途中,遭攻击者拦截并篡改内容的攻击称为中间人攻击(Man-in-the-Middle attack,MITM)。

加密方法:

加密方式有两种,对称加密和非对称加密。

对称加密:也称为单密钥加密,即加密解密是使用同一把密钥。速度较快,使用的CPU资源少。

非对称加密:使用一对密钥:公钥和私钥。私钥与公钥是一对多的关系,公钥用于签名,私钥用于验证。私钥需要私自保管在本地,不能泄露,公钥可以随意在网上传输发送。

密钥使用改进过程:

只要有人截获KEY,发送伪造的KEY,那么之后的所有消息都将被监听。

因而,直接传输密钥是不安全的,需要对密钥进行加密。

如果使用对称加密来加密密钥,那么密钥的密钥在传输过程中仍然是不安全的,需要再对密钥的密钥加密。这将无限叠加,最终仍是不安全的,而且显然不合理。

如果使用非对称加密,首先服务器生成一对公钥和私钥,将公钥发送出去;对方收到公钥后,本地使用对称加密生成一个密钥KEY,然后使用公钥加密这个密钥KEY,发送;服务器收到公钥加密的数据后,使用私钥解密,得到KEY。这时,双方可以使用KEY来加密数据,开始安全地交流。 (即使中间人截获了公钥加密的数据,但是由于没有私钥(私钥只有签发公钥的服务器保管,不会用于传输)所以无法解密出KEY。)

设想图如下:

假如服务器在传输公钥给客户端时,公钥被截获,中间人自己生成一对公钥私钥,并将伪造的公钥传到客户端,这样一来,又被完全监听了。

此时,产生了这种情况:客户端使用的是KEY1,服务器使用的是中间人伪造的KEY2,而中间人拥有KEY1,KEY2。所以中间人可以无限篡改数据。

SSL提供证书机制,通信方可以向第三方申请证书,证书验证通信双方,也可以对公钥进行加密传输。首先,第三方机构颁发给服务器公钥A,这个公钥A是绝对可信任的。以后,客户端如果想和服务器通信,就会想第三方申请证书,证书将用于对客户端的公钥B进行加密,然后服务器将公钥B加密后传输给客户端,因为客户端已经收到了第三方颁发的公钥A,只要用这个公钥A来解密数据,若能解开,便能取出客户端的公钥B。

但若是中间人截获了证书,客户端收到的将是伪造的公钥。

可以发现有可能出现两个问题:

证书被中间人截获,使用CA公钥篡改

中间人将自己的证书伪造成源服务器发送的

数字签名用来解决这个问题1。

对于可能出现的问题2,由于证书B也是第三方机构签发,所以数字签名可以通过验证,但是证书中包含了host信息,假如客户端正在访问的host和证书中的host不一样,浏览器会发出警告。

至此,基本实现了加密传输。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

浅谈HTTP 的相关文章

  • uni-app开发微信小程序,在onShow()中获取onLoad(option)中的option页面路径值

    onShow 获取当前小程序的页面栈 let pages getCurrentPages 数组中索引最大的页面 当前页面 let currentPage pages pages length 1 打印出当前页面中的 options cons
  • DAY1:leetcode704二分查找 27移除元素

    目录 一 二分查找 注意区间与循环中的边界点取值 二 移除元素 双指针写法 一 二分查找 注意区间与循环中的边界点取值 class Solution public int search vector
  • 实验十四:Wireshark数据抓包分析之ARP协议

    实验十四 Wireshark数据抓包分析之ARP协议 目录 一 实验目的及要求 二 实验原理 1 什么是ARP 2 ARP工作流程 3 ARP缓存表 三 实验环境 四 实验步骤及内容 实验步骤一 1 使用netsh绑定IP和MAC地址 2
  • Air780E

    目录 基础资料 探讨重点 实现功能 硬件准备 软件版本 一 创建产品 1 1在onenet上创建产品 1 2创建设备 查看onenet接入协议 二 设备安全认证 1 鉴权参数 2 Token算法 3 sign算法 示例如下 4 参数编码 5
  • Mybatis与Spring的集成

    目录 一 Mybatis与spring集成 1 导入pom依赖 2 创建spring配置文件applicationContext 3 注解式开发 二 Aop整合pagehelper插件 4 Spring Test junit完美组合 一 M
  • 哈希表设计思想及实现

    哈希表设计思想及实现 定义 哈希表在 算法4 这本书中是这么介绍的 哈希表其实又叫散列表 是算法在时间和空间上做出权衡的经典例子 如果一个表所有的键都是小整数 我们就可以用一个数组来实现无序的符号表 将键作为数组的索引而数组中i出存储的值就
  • Python打印各种图形

    一 打印直角三角形 for i in range 1 6 print i end n 二 打印矩形 num 5 for i in range 1 6 print 5 for n in range 5 for i in range 5 pri
  • SpringBoot打成的jar和普通的jar有什么区别?

    SpringBoot项目最终打包成的jar是可执行jar 这种jar可一天通过java jar xxx jar命令来运行 这种jar不可以作为普通jar被其他项目依赖 即使依赖了也无法使用其中的类 SoringBoot项目打包的jar无法被
  • Mybaits源码学习(七):动态参数

    一 前文回顾 在前文中我们分析了Mybatis是如何替我们实现了我们所编写的Mapper接口 采用JDK动态代理 在获取Mapper的时候创建Mapper的实现类 本文将继续学习Mybatis中其他的知识 今天索要研究的是Mybatis是如
  • 阿里云mysql数据库修改密码问题小记。

    场景描述 一台阿里云服务器 上面有装mysql数据库 但是不知道数据库的密码 怎么办 改密码呗 下面一系列故事就围绕改密码展开来了 整个过程 1 一顿操作猛如虎 感觉自己不是新手 得有追求 得看看系统的版本 等一系列的参数 其实然并卵 2
  • 全国失信被执行人黑名单信息查询API接口

    接口地址 https api hackeus cn api shixin 请求协议 HTTP HTTPS 请求方式 GET POST 返回格式 JSON 请求示例 https api hackeus cn api shixin api ke
  • RT-Thread通过SDIO接口使用SD卡,使用ulog保存日志到sd卡

    开发环境 野火的stm32f407 rt thread studio版本是版本 2 2 6 stm32f4的资源包为0 2 2 rt thread版本为4 0 3 开发板原理图 引脚分配 PC8 SDIO D0 PC9 SDIO D1 PC
  • 【JavaSpring】Aop案例

    测定接口执行效率 描述 在接口执行前输出当前系统时间 开发模式 XML or 注解 思路分析 1 导入坐标 pom xml
  • python变量的作用域及生命周期_Python——变量的作用域

    原创声明 本文系博主原创文章 转载及引用请注明出处 1 在编程语言中 变量都有一定的作用域 用来限定其生命周期 且不同类型的变量作用域不同 在Python中解释器引用变量的顺序 优先级 为 当前作用域局部变量 gt 外层作用域变量 gt 当
  • python frame用法_Pandas Series.to_frame()用法介绍

    系列被定义为可以容纳整数 字符串 双精度值等的列表类型 它以列表的形式返回对象 该列表的索引从0到n开始 其中n表示系列中值的长度 系列和数据框架之间的主要区别在于 系列只能包含具有特定索引的单个列表 而数据框架是可以分析数据的多个系列的组
  • CentOS8基础篇11:CentOS8挂载本地ISO,配置本地yum源

    1 创建ISO镜像挂在目录 第一种方法 VMware用户可以直接用镜像挂载 2 挂载镜像 第一种方法测试成功 第二种方法 采用ISO镜像文件方式挂载 把ISO文件复制到 opt目录下 这也是最好的方式 将Centos8的ISO镜像上传到IS
  • Linux大文件查看利器:掌握Less命令的使用和技巧

    文章目录 简介 1 1 less命令的作用和功能 1 2 less命令与more命令的对比 安装和基本用法 2 1 Linux系统中less命令的安装方法 2 2 使用less命令打开文件 2 3 基本导航和浏览文件 2 4 在文件中搜索关
  • 三层交换机实现不同vlan间通信

    1 器材 二层交换机为神州数码DCS 3950 路由交换机为神州数码DCRS 5650 路由器为神州数码DCR 2600 2 原理 2 1交换机的带外管理和带内管理 交换机的管理方式可以分为带内管理和带外管理两种管理模式 所谓带内管理 是指
  • 输出整数m中删除n位之后的最大(小)数(保持各位顺序不变)

    这个题不知道ac没有 因为是随便看到的一个题 没办法测 如果有错误请帮我指出来 看到很多复杂度很高的暴力破解方法 有三层循环的那种 我这个复杂度应该会低一点 思路 先将结果初始化最后m n个字符 放在res中 从res的第一位开始 在它前面
  • C# ADSL自动拨号实现代码

随机推荐

  • docker安装mysql8

    docker 默认mysql版本为8 0 docker pull mysql 启动mysql8 首先需要新建目录及文件 文件 F mydocker mysql8 config my cnf 目录 F mydocker mysql8 data
  • java数组专题

    下文笔者讲述求数组并集的方法分享 如下所示 实现思路 1 定义一个set集合 2 将数组中的元素都放入set中 则可实现数组并集 例 package com java265 other import java util HashSet im
  • QT 切换界面时候布局错乱

    偶然发现 在win下 全屏显示 showFullScreen 时候 label 如果开启 自动换行功能会出现 布局错乱QLabelt gt setWordWrap true
  • 机器学习里的 kernel 是指什么?

    转自我的知乎回答 机器学习里的 kernel 是指什么 我换个角度来解释这个问题 机器学习在做回归或者分类时有一个很朴实的想法 预测 x 的值 那就在训练集 X 中寻找那些与 x 相似的样本 再把这些样本的值加权作为预测值 这里有两个问题
  • Unity 导出XCode工程运行报错: ‘UnityFramework/UnityFramework.h‘ file not found

    简介 近期项目升级到2019 4 10f1版本 在用自动化打包的时候 遇到了一些问题 其中一个是 在导出XCode工程之后 运行工程的时候 编译报错 UnityFramework UnityFramework h file not foun
  • ​CVPR 2023

    论文链接 https arxiv org pdf 2306 02763 pdf 代码链接 https github com ZhenglinZhou STAR 要解决的问题 人脸关键点检测标注中存在语义歧义问题 语义歧义是指不同的标注者对同
  • x86 32位机的特权保护

    优先级划分 指令的权限检查和超出权限访问的异常处理等是构成特权保护的基础 本文将试图讲解为大家解决两大问题 win32汇编中为什么找不到中断指令的应用 比如int 7ch windows错误的 蓝屏 是从哪里来的 保护模式下 中断或异常往往
  • idea2021如何开启RunDashboard

    一般来说如果你的微服务项目中拥有多个子模块 idea会自动识别 不需要进行以下操作 只要你一运行多个子模块就会自动出现 如果没有出现 那就只有手动添加了 1 找到workspace xml项目所在的磁盘路径 idea gt workspac
  • CTF图片隐写题

    1 隐藏在图片属性里的信息或者以文本形式打开能直接获取的信息 例如实验吧里的一道题 这个背影我给满分 就是将信息隐藏在属性里 又或者文本形式能直接看到的 分别是黑客榜中榜游戏和南邮平台的两道题
  • 按键控制数码管0-99显示,十位不跳,用定时器T0中断

    如果直接在主函数中写按键控制数码管0 99显示 不管怎么延时数码管十位上的数都会闪 原因就是单片机的机器周器太快 人的按键速度是ms级的 所以等你人操作完了 单片机早就执行了不知道多少遍 解决方法就是用中断 这里采用定时器T0溢出中断 工作
  • 单目标应用:基于蛇群优化算法(SO)的无人机(UAV)三维路径规划(提供MATLAB代码)

    一 蛇群优化算法SO 蛇群优化算法 Snake Optimizer SO 由Fatma A Hashim和Abdelazim G Hussien于2022年提出 该算法思路新颖 快速高效 模拟了蛇的觅食和繁殖行为 SO具体原理参考如下链接
  • PyQt5 组件之QMenuBar

    QMenuBar简介 在QMainWindow对象的标题栏下方 水平的QMenuBar被保留显示QMenu对象 QMenuBar类提供了一个可以包含一个或多个QAction对象或 级联的QMenu对象 要创建一个弹出菜单 Pyqt提供了cr
  • FM33G0X之上电过程引脚配置

    八 FM33G0X之上电过程引脚配置 使用官方例程的代码初始化 在实际测试中会出现 配置成输出的引脚在上电过程中会将电平拉高 12v的输入电压 引脚可能会拉到3v 并持续一段时间 这对于实际应用中 是不应该出现的 比如一开始在io口配置中配
  • Visual C++ Redistributable 一键安装All In One Runtimes

    老版本的程序需要在客户端安装低版本的VC运行库Visual Studio 但网上第三方找到的软件要么无法下载 要么版本低 或者要求付费 而且常常有病毒 或者根本就是垃圾广告 因此从微软厂商下载 并编写了一个非常简单的脚本一键安装 右键以管理
  • webpack

    一 背景 随着我们的项目涉及到页面越来越多 功能和业务代码也会随着越多 相应的 webpack 的构建时间也会越来越久 构建时间与我们日常开发效率密切相关 当我们本地开发启动 devServer 或者 build 的时候 如果时间过长 会大
  • simcse模型

    一个对比学习的框架 作者在这里通过将一句话分两次过同一个模型 但使用两种不同的dropout 这样得到的两个sentence embedding就作为模型的正例 而同一个batch中的其他embedding就变为了负例 第二个代理任务就更加
  • linux虚拟机BIOS禁用Intel VT-x,电脑重启开启CPU虚拟化

    安装虚拟机centOS64的时候出现下面这个问题 通过 任务管理器 查看性能 CPU 发现是 已禁用 解决办法 重启电脑 修改BIOS中CPU 的配置 重点是 重启电脑 重点是 重启电脑 重点是 重启电脑 重启的过程中才能修改 重启的时候
  • vue3中使用pinia(大菠萝)状态管理仓库

    在Vue 3中 状态管理是非常重要的一部分 而Pinia 大菠萝 作为一个全新的状态管理库 在Vue 3中提供了更好的状态管理方案 可以方便地实现任意组件之间数据共享 与VueX不同的是 Pinia并不依赖于Vue 3的响应式系统 而是通过
  • scikit-learn学习笔记

    数据划分 from sklearn model selection import train test split 数据预处理 数据标准化 归一化 from sklearn preprocessing import StandardScal
  • 浅谈HTTP

    HTTP Hyper Text Transfer Protocol 超文本传输协议 完成从客户端到服务器的一系列运作流程 是用于从万维网 WWW World Wide Web 服务器传输超文本到本地浏览器的传送协议 HTTP的发展历程 HT