一、什么是Http协议
1.基本概念:
Http(Hyper Text Transfer Protocol):
超文本传输协议,是基于TCP/IP协议的应用层协议。
2.相关名词:
URI
: 统一资源标志符(Uniform Resource Identifier)URL
: 统一资源定位符(Uniform Resource Location)
3.发展历程:
HTTP
协议到目前为止全部的版本可以分为HTTP 0.9
、HTTP 1.0
、HTTP 1.1
、HTTP 2.0
、HTTP 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-Since
、Expires
等控制更新或使用本地缓存。- 引入了
Content-Type
头,使HTTP
具备了传输除纯文本HTML
文件以外其他类型文档的能力。
HTTP 1.1
概述
HTTP 1.1
是标准化的协议,HTTP 1.1
消除了大量歧义内容并引入了多项改进。特点
- 缓存处理,
HTTP 1.1
引入了更多的缓存控制策略,例如Entity tag
、If-Unmodified-Since
、If-Match
、If-None-Match
等更多可供选择的缓存头来控制缓存策略。- 带宽优化以及网络连接的使用,在请求头中引入了
range
,它允许只请求资源的某一个部分,即返回206
状态码,这样方便了开发者自由选择以便充分利用带宽和链接,并且可以使用Range
和Content-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
中顺序和阻塞的约束。- 压缩
header
,header
在一系列请求中常常是相似的,其移除了重复和传输重复数据的成本。- 服务端推送,服务器可以主动地向客户端推送资源,而无需客户端明确的请求。
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报文组成
- 请求报文构成
- 请求行:包括请求方法、URL、协议/版本>
- 请求头(Request Header)>
- 请求正文
- 响应报文构成
- 状态行
- 响应头
- 响应正文
响应报文组成
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.数据传输流程:
- 首先客户端通过URL访问服务器建立SSL连接。
- 服务端收到客户端请求后,会将网站支持的证书信息(证书中包含公钥)传送一份给客户端。
- 客户端的服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
- 客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
- 服务器利用自己的私钥解密出会话密钥。
- 服务器利用会话密钥加密与客户端之间的通信。
4. Http协议的缺点:
- 请求信息明文传输,容易被窃听截取。
- 数据的完整性未校验,容易被篡改
- 没有验证对方身份,存在冒充危险
5.Https协议的缺点
- HTTPS协议多次握手,导致页面的加载时间延长近50%;
- HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗;
- 申请SSL证书需要钱,功能越强大的证书费用越高。
- SSL涉及到的安全算法会消耗 CPU 资源,对服务器资源消耗较大。