Http/Https协议详解

一、什么是Http协议

1.基本概念:

  • Http(Hyper Text Transfer Protocol):超文本传输协议,是基于TCP/IP协议的应用层协议。

2.相关名词:

  • URI: 统一资源标志符(Uniform Resource Identifier)
  • URL: 统一资源定位符(Uniform Resource Location)

3.发展历程:

  • HTTP协议到目前为止全部的版本可以分为HTTP 0.9HTTP 1.0HTTP 1.1HTTP 2.0HTTP 3.0,其中现在普遍应用的版本是HTTP 1.1版本,正在推进HTTP 2.0版本,以及未来的HTTP 3.0版本。

HTTP 0.9

概述

HTTP 0.9也被称为单行协议,于1991年发布,最初版本的HTTP协议并没有版本号,后来它的版本号被定位在0.9 以区分后来的版本,HTTP 0.9极其简单,请求由单行指令构成,以唯一可用方法GET开头,其后跟目标资源的路径。HTTP 0.9的响应内容并不包含HTTP头,这意味着只有HTML文件可以传送,无法传输其他类型的文件,也没有状态码或错误代码,出现异常时一个特殊的包含问题描述信息的HTML文件将被响应返回。

特点

  • 只有一个请求行,并没有HTTP请求头和请求体。
  • 服务器没有返回头信息,只返回数据信息。
  • 第三个是返回的文件内容是以ASCII 字符流来传输的,因为都是HTML 格式的文件,所以使用ASCII 字节码来传输是最合适的。

HTTP 1.0

概述

HTTP 1.0构建了可扩展性,为了满足传输多种类型文件的需求,为了让客户端和服务器能更深入地交流,HTTP 1.0引入了请求头和响应头,它们都是以为Key-Value形式保存的,在HTTP发送请求时,会带上请求头信息,服务器返回数据时,会先返回响应头信息。

特点

  • 协议版本信息会随着每个请求发送,即HTTP 1.0被追加到了GET行。
  • 引入请求头,在发起请求时候会通过HTTP请求头告诉服务器它期待服务器返回什么类型的文件、采取什么形式的压缩、提供什么语言的文件以及文件的具体编码。
  • 引入响应头,服务器以请求头中信息准备数据,并以响应头的信息告诉客户端数据采用何种格式返回,倘若遇到不支持的格式,只能返回服务器支持的格式,并在响应头中体现,也就是说最终浏览器是以响应头的信息解析数据。
  • 引入状态码,状态码会在响应开始时发送,使浏览器能了解请求执行成功或失败,并相应调整行为。
  • 引入了缓存机制,通过状态码与If-Modified-SinceExpires等控制更新或使用本地缓存。
  • 引入了Content-Type头,使HTTP具备了传输除纯文本HTML文件以外其他类型文档的能力。

HTTP 1.1

概述

HTTP 1.1是标准化的协议,HTTP 1.1消除了大量歧义内容并引入了多项改进。

特点

  • 缓存处理,HTTP 1.1引入了更多的缓存控制策略,例如Entity tagIf-Unmodified-SinceIf-MatchIf-None-Match等更多可供选择的缓存头来控制缓存策略。
  • 带宽优化以及网络连接的使用,在请求头中引入了range,它允许只请求资源的某一个部分,即返回206状态码,这样方便了开发者自由选择以便充分利用带宽和链接,并且可以使用RangeContent-Range制作断点续传功能。
  • 错误通知的管理,在HTTP 1.1中新增了24个错误状态码。
  • 增加Host请求头,能够使不同域名配置在同一个IP地址的服务器上。
  • 支持长连接,HTTP 1.1支持长连接,在一个TCP连接上可以传输多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP 1.1中默认开启Connection:keep-alive,一般浏览器对于同一个域名允许同时建立6个长链接。
  • 增加管线化技术,允许在第一个应答被完全发送之前就发送第二个请求,以改善队头阻塞问题,但响应的顺序还是会按照请求的顺序返回。
  • 支持响应分块,通过设置Transfer-Encoding: chunked进行分块响应,允许响应的数据可以分成多个部分,配合服务端尽早释放缓冲可以获得更快的响应速度。

HTTP 2.0

概述

HTTP 2.0拥有更优异的表现,现网页愈渐变得的复杂,甚至演变成了独有的应用,媒体的播放量,增进交互的脚本大小也增加了许多,更多的数据通过HTTP请求被传输,由此HTTP 2.0为网络效率做了大量的优化。

特点

  • 二进制分帧,HTTP 2.0是二进制协议而不是文本协议,将所有传输的信息分割为更小的消息和帧,并对它们采用二进制格式的编码。
  • 多路复用,并行的请求能在同一个链接中处理,在同一域名下所有访问都是从同一个TCP连接中走,HTTP消息被分解为独立的帧,服务端根据标识符和首部将消息重新组装起来,移除了HTTP 1.1中顺序和阻塞的约束。
  • 压缩headerheader在一系列请求中常常是相似的,其移除了重复和传输重复数据的成本。
  • 服务端推送,服务器可以主动地向客户端推送资源,而无需客户端明确的请求。

HTTP 3.0

概述

HTTP 3.0目前处于制订和测试阶段,是未来的全新的HTTP协议,HTTP 3.0协议运行在QUIC协议之上,是在UDP的基础上实现了可靠传输,权衡传输速度与传输可靠性并加以优化,使用UDP将避免TCP的队头阻塞问题,并加快网络传输速度,但同样需要实现可靠传输的机制,HTTP 3.0不是HTTP 2.0的拓展,HTTP 3.0将会是一个全新的协议。

4.HTTP报文组成

  • 请求报文构成
  1. 请求行:包括请求方法、URL、协议/版本>
  2. 请求头(Request Header)>
  3. 请求正文

  • 响应报文构成
  1. 状态行
  2. 响应头
  3. 响应正文

响应报文组成

5.常见请求方法

  • GET:请求指定的页面信息,并返回实体主体。
  • POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
  • HEAD:类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
  • PUT:从客户端向服务器传送的数据取代指定的文档的内容。
  • DELETE:请求服务器删除指定的页面。

get请求

post请求

post和get的区别:

  • 都包含请求头请求行,post多了请求body。
  • get多用来查询,请求参数放在url中,不会对服务器上的内容产生作用。post用来提交,如把账号密码放入body中。
  • GET是直接添加到URL后面的,直接就可以在URL中看到内容,而POST是放在报文内部的,用户无法直接看到。
  • GET提交的数据长度是有限制的,因为URL长度有限制,具体的长度限制视浏览器而定。而POST没有。

6.响应状态码

访问一个网页时,浏览器会向web服务器发出请求。此网页所在的服务器会返回一个包含HTTP状态码的信息头用以响应浏览器的请求。

状态码分类

  • 1XX- 信息型,服务器收到请求,需要请求者继续操作。
  • 2XX- 成功型,请求成功收到,理解并处理。
  • 3XX - 重定向,需要进一步的操作以完成请求。
  • 4XX - 客户端错误,请求包含语法错误或无法完成请求。
  • 5XX - 服务器错误,服务器在处理请求的过程中发生了错误。

常见状态码

  • 200 OK - 客户端请求成功
  • 301 - 资源(网页等)被永久转移到其它URL
  • 302 - 临时跳转
  • 400 - Bad Request - 客户端请求有语法错误,不能被服务器所理解
  • 401 - Unauthorized - 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
  • 404 - 请求资源不存在,可能是输入了错误的URL
  • 500 - 服务器内部发生了不可预期的错误
  • 503 - Server Unavailable - 服务器当前不能处理客户端的请求,一段时间后可能恢复正常。

二、什么是Https协议

1.基本概念:

  • Https(HyperText Transfer Protocol over Secure Socket Layer):一般理解为HTTP+SSL/TLS,通过 SSL证书来验证服务器的身份,并为浏览器和服务器之间的通信进行加密。

2.相关名词:

  • SSL: 安全套接字层(Secure Socket Layer)
  • TLS: 传输层安全(Transport Layer Security)

3.数据传输流程:

  1. 首先客户端通过URL访问服务器建立SSL连接。
  2. 服务端收到客户端请求后,会将网站支持的证书信息(证书中包含公钥)传送一份给客户端。
  3. 客户端的服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
  4. 客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
  5. 服务器利用自己的私钥解密出会话密钥。
  6. 服务器利用会话密钥加密与客户端之间的通信。

4. Http协议的缺点:

  • 请求信息明文传输,容易被窃听截取。
  • 数据的完整性未校验,容易被篡改
  • 没有验证对方身份,存在冒充危险

5.Https协议的缺点

  • HTTPS协议多次握手,导致页面的加载时间延长近50%;
  • HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗;
  • 申请SSL证书需要钱,功能越强大的证书费用越高。
  • SSL涉及到的安全算法会消耗 CPU 资源,对服务器资源消耗较大。

Guess you like

Origin juejin.im/post/7077449111535878151