HTTP 1.0/1.1/2.0、HTTPS
Peng's Blog 只记录和技术相关的东西

HTTP 1.0/1.1/2.0、HTTPS


计网的五层模型

所谓五层协议的网络体系结构是为便于学习计算机网络原理而采用的综合了OSI七层模型TCP/IP的四层模型而得到的五层模型。

internet

HTTP属于最高的一层- - -应用层。

HTTP的全称是HyperText Transfer Protocol,超文本传输协议。设计的最初目的是为了提供一种发布和接收HTML页面的方法。

HTTP使用的是TCP而不是UDP,原因在于:打开一个页面需要传送很多数据,而TCP协议提供传输控制,按顺序组织数据和纠正错误。需要是有状态的连接。

HTTP连接使用的是“请求-响应的”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器才能回复数据。


HTTP1.0

发布时间

1996年诞生的,比我大一岁。

介绍

面试的时候问到这个,最关键的一句话就是:

HTTP1.0规定浏览器与服务器只保持短暂的连接,连接无法复用

存在的两个很大的问题,一个是连接无法复用,一个是head of line blocking。

理解这两个问题有一个十分重要的前提:客户端是依据域名来向服务器建立连接,一般PC端浏览器会针对单个域名的server同时建立6~8个连接,手机端的连接数则一般控制在4~6个。显然连接数并不是越多越好,资源开销和整体延迟都会随之增大。

连接无法复用会导致每次请求都经历三次握手和慢启动。三次握手在高延迟的场景下影响较明显,慢启动则对文件类大请求影响较大。head of line blocking会导致带宽无法被充分利用,以及后续健康请求被阻塞。


HTTP1.1

发布时间

1999年诞生

介绍

1、支持持久连接2、支持请求头字段(GET、POST那些)

所谓的持久连接就是:在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。

在http1.1,request和reponse头中都有可能出现一个connection的头,此header的含义是当client和server通信时对于长链接如何进行处理。 默认是长链接,如果不想用就改成close。

常用的请求方式

HTTP/1.1协议敏感词定义了八种方法(有时也叫“动作”),来表明Request-URL指定的资源不同的操作方式

1、OPTIONS

查询服务器的性能,或者查询与资源相关的选项和需求。

2、HEAD

获取包含在响应小消息头中的元信息。

3、GET

向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在Web Application中,其中一个原因是GET可能会被网络蜘蛛等随意访问。Loadrunner中对应get请求函数:web_link和web_url

4、POST

向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form

5、PUT

向指定资源位置上传其最新内容

6、DELETE

请求服务器删除Request-URL所标识的资源

7、TRACE

请求服务器回送收到的请求信息,主要用于测试或诊断

8、CONNECT

HTTP/1.1协议中 预留能够将连接改为管道方式的代理服务器

响应码

状态代码由三位数字组成,第一个数字定义了响应的类别,有五种可能的取值:

1xx:提示信息,表示请求已经接收,继续处理

2xx:成功,表示请求已被成功接收、理解等

3xx:重定向,要完成请求必须进行更进一步的操作

4xx:客户端错误,请求有语法错误或请求无法实现

5xx:服务端错误,服务端未能实现合法的请求

具体:

关键是哪个301和302

301,302 都是HTTP状态的编码,都代表着某个URL发生了转移,不同之处在于:

301 redirect: 301 代表永久性转移(Permanently Moved),

302 redirect: 302 代表暂时性转移(Temporarily Moved ),

403 (禁止)服务器拒绝请求

403.6 : IP address rejected

500 :服务器内部错误

501 :服务器不支持实现请求所需的功能

502:Bad Gateway,服务器返回给代理的时候出错

503:服务器负载过高,无法正常响应

504:代理连接服务器出现超时

区别

HTTP1.1和HTTP1.0的区别主要有:

1、缓存处理

2、带宽优化以及网络连接的使用

3、错误通知的管理

4、安全性及完整性

关于请求字段、响应码那些之后再介绍。


HTTP2.0

发布时间

2013年8月才进行首次合作共事性测试,而且只用于https://上面。

介绍

全部http/2的网站有:Google、YouTube、知乎、淘宝、V2EX 部分http/2的网站有:豆瓣、segmentfault。

总的来说,用HTTP/2的不多,但也并非少的无法接受。等基础设施慢慢发展吧。

特性

一、多路复用

多路复用允许同时通过单一的HTTP/2.0连接发起多重的请求-响应消息。在HTTP1.1协议中,浏览器客户端在同一时间,针对同一域名下的请求有一定数量的限制,超过了这个限制的请求就会被阻塞。

而在HTTP2.0里面,多路复用允许同时通过单一的HTTP/2连接发起多重的请求-响应消息。所以,很容易实现多流并行而不用依赖建立多个TCP连接。

HTTP/2 把 HTTP 协议通信的基本单位缩小为一个一个的帧,这些帧对应着逻辑流中的消息。并行地在同一个 TCP 连接上双向交换消息。

二、二进制分帧

在应用层(HTTP2.0)和传输层(TCP或者UDP)之间加了一层:二进制分帧层。

在不改变HTTP1.1的语义、方法、状态码的情况下,解决了1.1的性能限制,提高了性能,实现了低延迟和高吞吐量。

在二进制分帧层中, HTTP/2 会将所有传输的信息分割为更小的消息和帧(frame),并对它们采用二进制格式的编码。

这种单连接多资源的方式,减少了服务端的压力,使得内存占用更少,连接吞吐量更大。而且,TCP连接数的减少使得网络拥塞状况得以改善,同时慢启动时间的减少,使拥塞和丢包恢复速度更快。

三、首部压缩

在之前是没有这东西的,这东西用的HPACK 算法。

四、服务端推送

服务器端推送是一种在客户端请求之前发送数据的机制。

有个很重要的优势是可以缓存。


HTTPS

介绍

它的全称是:HyperText Transfer Protocol over Secure Socket Layer。超文本传输安全协议。网景公司1994年创建的,现在普及度极高。

为什么又叫SSL呢,因为Secure Socket Layer(安全套接层)。所以SSL和HTTPS其实是一个东西的不同缩写罢了。其实是同一个东西。为啥又有个TLS呢?标准化之后的名称改为 TLS(是“Transport Layer Security”的缩写)

简单的说,HTTPS就是安全增强版的HTTP。HTTP协议与加密协议的结合,使HTTP的协议数据在传输过程中更加安全。在此HTTP1.1之前,协议是明文的,存在传输内容可能被嗅探(偷窥)和篡改。

SSL

简单来说,就是在HTTP应用层和TCP传输层之间加了一层:安全套接层。

HTTPS将HTTP协议数据包放到SSL/TSL层加密之后,在TCP/IP层组成IP数据报去传输,以此保证传输数据的安全。对于接收端,在SSL/TLS层加密之后,将数据传给HTTP协议层,就是普通的HTTP数据。

加密方法

对称加密和非对称加密:

对称加密指的是,将你要传输的内容用一个秘钥加密起来,发送方和接收方都要知道这个秘钥,用它来加密解密。但是使用对称机密需要给对方传这个密钥,这个很容易在传输过程中被人窃取。

非对称加密是指生产一堆密钥(k1,k2)。凡是k1加密的数据,k1自身不能解密,需要k2解密;凡是k2加密的数据,k2不能解密,需要k1才能解密。

SSL/TLS协议的做法是将两者结合起来:

1、加入A、B需要传输信息,那么A可以使用非对称加密生成一对密钥(k1,k2),然后将k1发送给B,k2自己保留;

2、B收到k1后先自己使用对称加密生成一个key,然后使用k1将这个key加密传给A;

3、A收到密文后使用k2将其解密,至此,A和B已经完成了key的传输,之后他们就可以使用这个key按对称加密的方式传输信息。

为什么这样就安全了呢?因为在传输过程中值暴露了k1,要解密需要知道k2,所以就算有人窃取到了传输的信息,也无法解密。

扩展

这样就安全了吗?不存在的,怎么破解呢?有种方法叫“中间人攻击”,它分别欺骗A和B,让对方误认为自己是B(或者A),这样它就可以自己定义一个key,然后欺骗A和B,让他们误以为已经完成了key的传输,然后使用这个key来传输信息。

为了防止这种攻击,所以有了一个叫CA的东西。

CA(Certificate Authority) 是一些非常权威的专门用于认证一个网站合法性的组织。这样A和B在传输密钥的时候就可以通过CA来判断对方是否合法,这样“中间人攻击”也就无法实施。

HTTPS把对称加密、非对称加密和CA结合起来以保证数据安全。


参考资料

1、《HTTP协议简介》。2014.8。http://www.360doc.com/content/14/0808/14/17799864_400329626.shtml

2、《面试时如何优雅的谈论HTTP/1.0/1.1/2.0》。2016.8。http://www.jianshu.com/p/52d86558ca57

3、《了解http、https、http2.0相关概念》。2016.6。http://www.jianshu.com/p/551d05b0cbee


下一篇 分布式和集群

Comments

评论功能暂停使用,如需跟作者讨论请联系底部的GitHub