前言

本文主要简单介绍http协议发展的历史版本以及https的安全机制,对于更多深入协议内层及网络通信相关的知识,在此暂不做总结。

何谓Http协议

超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,俗称HTTP协议。

网络传输的层级

在网络传输中,Http协议在网络传输中位于应用层,在一次http请求中,从我们输入请求地址之后,数据传输要经历不同层次的包装,添加对应的响应头,中间涉及各种协议,具体如下:

层级 协议/技术
应用层 http、ftp、smtp(简单邮件传输协议)
传输层 TCP(传输控制协议)、UDP(用户数据报协议)
网络层 IP协议(ARP、RARP、ICMP、IGMP)、路由
数据链路层 ARP、MTU
物理层 0/1光电信号

经历不同层级的处理之后,将请求的报头及请求数据发送给服务器,再有服务器逐层解析,最终获取对应的资源并返回。

http请求

在我们使用http协议去发送请求时,这个请求会包含一个请求头以及一个正文信息,大致的结构如下:

其中,一个http请求头中所包含的主要信息如下:

Header 解释 示例
Accept 指定客户端能够接收的内容类型 Accept: text/plain, text/html
Accept-Charset 浏览器可以接受的字符编码集。 Accept-Charset: iso-8859-5
Accept-Encoding 指定浏览器可以支持的web服务器返回内容压缩编码类型。 Accept-Encoding: compress, gzip
Accept-Language 浏览器可接受的语言 Accept-Language: en,zh
Accept-Ranges 可以请求网页实体的一个或者多个子范围字段 Accept-Ranges: bytes
Authorization HTTP授权的授权证书 Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Cache-Control 指定请求和响应遵循的缓存机制 Cache-Control: no-cache
Connection 表示是否需要持久连接。(HTTP 1.1默认进行持久连接) Connection: close
Cookie HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。 Cookie: $Version=1; Skin=new;
Content-Length 请求的内容长度 Content-Length: 348
Content-Type 请求的与实体对应的MIME信息 Content-Type: application/x-www-form-urlencoded
Date 请求发送的日期和时间 Date: Tue, 15 Nov 2010 08:12:31 GMT
Expect 请求的特定的服务器行为 Expect: 100-continue
From 发出请求的用户的Email From: user@email.com
Host 指定请求的服务器的域名和端口号 Host: www.zcmhi.com
If-Match 只有请求内容与实体相匹配才有效 If-Match: “737060cd8c284d8af7ad3082f209582d”
If-Modified-Since 如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码 If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT
If-None-Match 如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变 If-None-Match: “737060cd8c284d8af7ad3082f209582d”
If-Range 如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。参数也为Etag If-Range: “737060cd8c284d8af7ad3082f209582d”
If-Unmodified-Since 只在实体在指定时间之后未被修改才请求成功 If-Unmodified-Since: Sat, 29 Oct 2010 19:43:31 GMT
Max-Forwards 限制信息通过代理和网关传送的时间 Max-Forwards: 10
Pragma 用来包含实现特定的指令 Pragma: no-cache
Proxy-Authorization 连接到代理的授权证书 Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Range 只请求实体的一部分,指定范围 Range: bytes=500-999
Referer 先前网页的地址,当前请求网页紧随其后,即来路 Referer: http://www.zcmhi.com/archives/71.html
TE 客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息 TE: trailers,deflate;q=0.5
Upgrade 向服务器指定某种传输协议以便服务器进行转换(如果支持) Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
User-Agent User-Agent的内容包含发出请求的用户信息 User-Agent: Mozilla/5.0 (Linux; X11)
Via 通知中间网关或代理服务器地址,通信协议 Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
Warning 关于消息实体的警告信息 Warn: 199 Miscellaneous warning

HTTP版本

http1.0

http1.0版本是相对较落后的版本,在功能上支持如下:

  1. TCP连接不可复用,且一个TCP连接只能发送一次请求,当服务器响应后,就会关闭这次连接。这样导致每次请求都需要重新建立TCP连接(三次握手),影响发送速率,后面提供了一个非标准字段Connection字段来实现长连接,但是由于非标准字段,所以不同实现的行为可能不一致;
  2. 支持发送的http请求方式有get、post、head;

http1.1

  1. 实现长连接,即TCP连接默认不关闭,允许被多个请求复用,不用申明Connection: keep-alive。
  2. 提供管道机制,即一个TCP连接中,允许多个请求同时发送,增加并发性,但是服务器还是根据得到请求的先后顺序去进行响应,这种机制容易造成队头阻塞。
  3. 请求方式增加put、patch、options、delete等。
  4. 请求头新增host字段,用来处理服务器存在多个虚拟主机的情况。
  5. 提供身份认真机制,许多web站点要求用户提供一个用户名—口令对才能访问存放在其服务器中的文档,这种要求称为身份认证(authentication)。HTTP提供特殊的状态码和头部来帮助Web站点执行身份认证。

http2.0

  1. 增加双工模式,即不仅客户端能够同时发送多个请求,服务端也能同时处理多个请求,解决了队头堵塞的问题;
  2. 服务器推送功能,当我们对支持HTTP2.0的web server请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。这种方式非常合适加载静态资源
  3. 支持二进制帧的格式来传递报头和数据。
  4. 头信息压缩机制,头信息使用gzip或compress压缩后再发送;另一方面,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。

https的加密机制

http协议传输的数据是明文数据,在传输过程中容易被篡改和监听,对于一些重要数据的传输,采用http协议显然是不安全的,因此就有了https协议。在讲述https协议的加密机制之前,需要先了解两种加密算法:对称加密、非对称加密

对称加密:加密解密使用同一个密钥,这种加密方式的有点是加密解密效率高,但是当密钥被窃取时,就会存在安全问题。常见的算法有:AES、DES。
非对称加密:密钥分为公钥和私钥,使用公钥来加密数据,使用私钥来解密数据。安全性相对较高,但是加解密的效率会更低。代表算法:RSA等。

对称加密效率高,所以适合在平时的数据传输过程中采用对称加密,但是对称加密需要浏览器和服务器都是用相同的密钥,这个密钥一般都是浏览器自动生成,然后告知给服务器的。如果采取明文的方式传输密钥,则容易被不法者监听和篡改,所以在浏览器告知服务器密钥的这个传输过程中,对密钥也进行加密。

对密钥加密仍然采用对称加密的方式,显然是不行的,所以这里采用非对称加密的方式。具体流程如下:

  1. 网站管理员先将自己的公钥及网站域名等信息发给CA机构,向CA机构申请一个安全证书,CA机构使用自己的私钥对公钥进行加密,制作成一个安全证书返回给网站管理人,管理员将安全证书配置到网站服务器上。
  2. 在浏览器访问服务器时,服务器返回包含公钥的安全证书。我们操作系统会内置CA机构的公钥,浏览器从操作系统拿获取公钥,然后对证书进行解密从而获得公钥。
  3. 浏览器生成一个专门用于对数据进行传输加密的私钥key2,并用公钥对齐进行加密,然后传给服务器,服务器根据公钥对应的私钥进行解密,获取了私钥key2。

完成上面步骤后,浏览器和服务器就都有一个相同的私钥了,也就可以进行加密传输了。具体的流程如下图:

参考资料:
知乎-深入理解HTTP协议

Http协议及各版本对比相关推荐

  1. Matlab各版本对比

    官方文档主页 文档主页 - MathWorks 中国 各版本对比 MathWorks - Archived MathWorks Documentation - MathWorks 中国 ​​​​​​发 ...

  2. NMEA1803协议3.0版本及以上说明

    NMEA1803 协议3.0版本及以上说明 一. NMEA1803协议格式: 二.标准信息发送器标识说明: 1.GNSS7种卫星系统说明 2.NMEA1803协议3.01与4.1版本标识符区别 三.常 ...

  3. 【存储】SCSI、iSCSI协议详解及对比

    作        者:  @NGDCN 原文链接:[存储]SCSI.iSCSI协议详解及对比 - NGDCN 版        权: 本文由 @NGDCN 于2022-11-11原创发布在 NGDCN ...

  4. windows 2008 server R2 按服务器角色的版本对比

    按服务器角色的版本对比 关键词: = 不可用 = 部分/限制 = 完全 服务器角色 企业版 数据中心 标准版 Itanium Web Foundation HPC Active Directory证书 ...

  5. 《Windows 8 权威指南》——1.5 版本对比

    本节书摘来自异步社区<Windows 8 权威指南>一书中的第1章,第1.5节,作者:胡耀文 , 尹成 , 李贝贝 , 卢磊 , 曹珍著,更多章节内容可以访问云栖社区"异步社区& ...

  6. TortoiseGit 单文件版本对比_入门试炼_09

    文章目录 一.单文件版本数据模拟 二.单文件版本对比 2.1. 查询单文件提交记录 2.2. 单文件版本之间差异对比 案例场景: 依次提交5次,推送远程,同一个文件5个版本之间的相互对比 一.单文件版 ...

  7. netty 基于 protobuf 协议 实现 websocket 版本的简易客服系统

    https://segmentfault.com/a/1190000017464313 netty 基于 protobuf 协议 实现 websocket 版本的简易客服系统 结构 netty 作为服 ...

  8. “知识共享”国际许可协议4.0版本

    "知识共享"国际许可协议4.0版本 近年来,鲁宾逊非标准分析高举"知识共享"许可协议大旗,如虎添翼,在我国高校迅速推开. 国人对"知识共享" ...

  9. EasyRecovery 15 mac中文免费密钥数据恢复 安装软件的方法教程及版本对比

    为了方便果粉们的使用,EasyRecovery 15 For Mac已经率先上线,那么在使用之前需要在Mac电脑上安装,小编在此说明EasyRecovery 详细介绍安装软件的方法教程及版本对比. 准 ...

最新文章

  1. 如果不被吐槽,那我还是程序员吗
  2. oracle dump函数
  3. partial equation lecture first order pde lecture 1
  4. 使用for及递归求 1-100的和
  5. mysql-5.6.17-win32的安装?
  6. ajax遍历递归树数据,怎么用JS递归发送AJAX请求
  7. 回望2019,展望2020
  8. 使用嵌套循环,打印四行五列星星矩形(每次只能打印一个*)
  9. SQL 之后,GQL 成为 ISO/IEC 国际标准数据库语言项目
  10. iPhone 大降价;谷歌再爆丑闻;京东云金山云回应合并传闻 | 极客头条
  11. mysql 索引建立标准_mysql索引规范
  12. 如何用python计算圆周率_使用MicroPython计算任意位数圆周率
  13. Idea终端中无法使用maven命令问题解决
  14. 《缠中说禅108课》56:530 印花税当日行情图解
  15. avc 转 hevc
  16. 4199 公约数(求解约数 + 最大公约数 + 二分)
  17. java中怎么保留小数_java怎么保留小数
  18. ElasticSearch系列——Kibana,核心概念
  19. Parameter specified as non-null is null method kotlin.jvm.internal.Intrinsics.checkNotNullParameter
  20. 罗永浩2011年保利剧院演讲(一个理想主义者的创业故事II)

热门文章

  1. CreateThread()函数使用
  2. 5g服务器网站,5G与云服务器
  3. jQuery层叠式视频列表播放
  4. 景联文科技:语音识别技术有哪些应用场景?
  5. 定时器Timer--追赶可执行性
  6. 有趣的正则表达式:中英文互换位置
  7. display与transition动画冲突问题
  8. 记录使用log4cpp析构报错
  9. WCH CH582M 蓝牙例程 RF_PHY记录
  10. 关系数据库中的关系指什么