Appearance
HTTP
超文本传输协议,是客户端和服务器通信的规则。
- 无连接:每次的请求都是独立的,响应结果与之前或之后的请求是无关的,也不会影响到之后的请求,通过session或cookie进行状态管理。
- 明文传输:
- 不验证通信方身份:
- 不验证请求/响应内容的完整性
HTTPS
在http的基础上加入SSL/TLS,即一个安全套接层,http是直接和TCP通信的,而https则是让http和tls通信,再由tls和tcp通信,通过身份认证+数据加密+数据完整性保护从而保证传输过程的安全性。
HTTPS的缺点:
HTTPS必须进行SSL通信,会增加网络负载。
SSL加密处理时,客户端和服务器都需要进行加密和解密的运算,会消耗更多的CPU及内存资源,因此可以在包含敏感信息时才进行HTTPS加密通信,也可以使用SSL加速器硬件来改善。
证书开销
HTTP的工作原理
- 点击超链接,客户端与服务器建立TCP连接
- 客户端发送请求给服务器
- 服务器返回响应内容
- 客户端将渲染响应内容
- 客户端与服务器断开连接
HTTPS的工作原理
点击超链接,客户端与服务器建立TCP连接
TLSv1.2四次握手
第一次握手
客户端通过发送 Client Hello 报文开始 SSL通信。报文中包含客户端 TSL 的版本号(Version)、客户端支持的加密套件列表(Copher Suites)、客户端生成的随机数(Random)。

第二次握手
服务器可进行 TSL 通信并且支持客户端的TSL版本时时,会以 Server Hello 报文作为应答,和客户端一样,报文中包含服务器 TSL 的版本号(Version)、服务器支持的加密套件列表(Copher Suite)(会从客户端发来的加密套件列表中选出一个最合适的加密套件)、服务器生成的随机数(Random)。

之后服务器为了证明身份,会像客户端发送 数字证书,即 Certificate 报文。报文中包含CA机构签名、服务器信息、CA机构为服务器颁发的公钥等信息,服务器信息、CA为服务器颁发的公钥是明文的,CA机构签名则是加密得来的,具体做法是先对证书的明文部分计算哈希值得到摘要后,再用CA机构本身的私钥对摘要进行RAS加密,得到CA机构的签名。因为RSA加密效率低,所有先对明文计算哈希得到摘到,再对摘要进行加密,这样运算量会减少很多。

最后服务器发送 Server Hello Done 报文给客户端,报文中没有其他有价值的信息,仅仅是为了通知客户端第二次握手服务器的所有报文都已发送完毕。
第三次握手
客户端在收到服务器返回的 Server Hello 和 Certificate 报文后,会使用操作系统内置的CA机构的公钥对证书中的CA机构签名进行解密,如果解密成功,得到摘要值 H1,然后客户端使用与CA机构相同的摘要算法对明文计算哈希值得到摘要值 H2,比较 H1 与 H2,若完全相同则说明证书合法且未被其他人篡改,从而拿到CA机构为服务器的颁发的公钥。
随后,客户端生成随机数 PreMaster 并用CA机构为服务器颁发的公钥对其加密,通过 Client Key Exchange 报文发送给服务器

接着,客户端使用它得到的三个随机数 Client Random、Server Radnom、PreMaster 去生成商定好的对称加密方法的对称密钥:Master Secret,即“会话密钥”,客户端通过 Change Cipher Spec 报文将会话密钥发送给服务器,表示随后的报文都采用双方商定的对称加密方法和会话密钥进行发送。

最后,客户端发送 Encrypted Handshake Message 报文,表示客户端的握手已经结束,将之前发送过的所有数据进行哈希运算得到摘要,使用会话密钥对报文内容进行对称加密,供服务器验证之前握手过程中的数据是否被人篡改

第四次握手
服务器在收到客户端的 Client Key Exchange消息后,使用RAS私钥解密得到随机数 PreMaster,至此服务器也有了和客户端相同的三个随机数 Client Random、Server Raddom、PreMaster,服务器也用这三个随机数去生成会话密钥,通过 Change Cipher Spec 报文将会话密钥发送给客户端,,表示随后的报文都采用双方商定的对称加密方法和会话密钥进行发送
最后,服务器发送 Encrypted Handshake Message 报文,表示服务器的握手已经结束,将之前发送过的所有数据进行哈希运算得到摘要,使用会话密钥对报文内容进行对称加密,供客户端验证之前握手过程中的数据是否被人篡改
客户端和服务器进行加密通信,就完全是普通的HTTP协议,只不过用会话密钥加密内容
断开连接
http和https的区别
- HTTP的URL以 http://开头,HTTPS的URL以 https://开头
- http是明文传输,不验证通信方身份和请求/响应内容完整性;https则是基于SSL/TLS的安全加密传输,会验证通信方身份和请求/响应内容完整性。
- http端口是80,https端口是443。
- HTTP无需认证证书, https需要认证证书
如何将网站从HTTP切换到HTTPS
将页面中所有的链接,如js,css,图片等链接都由http改为https。 http://www.baidu.com => https://www.baidu.com http和https的兼容实现方式,去掉页面链接中的http头部,会自动匹配http头和https头。 http://www.baidu.com => //www.baidu.com
ajax请求与一般HTTP请求的区别
Ajax请求与一般HTTP请求的区别
Ajax请求是一种特殊的HTTP请求,只有通过XMLHttpRequest对象或fetch API发出的请求才被称为Ajax请求,其他通过表单提交、超链接等方式发出的请求则属于一般HTTP请求。
Ajax请求的主要特点是:
通过XMLHttpRequest或fetch对象向服务器发送请求,获取数据后不会导致页面整体刷新或跳转,而是通过回调函数处理返回的数据,实现页面的局部更新。 Ajax请求通常在请求头中包含X-Requested-With: XMLHttpRequest字段,用于让服务器端识别该请求为Ajax请求,从而进行相应的处理。 一般HTTP请求的特点是:
通过表单提交、超链接点击等方式向服务器发送请求,服务器返回响应后,浏览器会整体刷新或跳转页面。 一般HTTP请求的请求头中通常没有X-Requested-With字段。 简而言之,Ajax请求实现了页面的无刷新局部更新,而一般HTTP请求则会导致页面整体刷新或跳转。