面试题:HTTP和HTTPS相关
目录
1. HTTP请求的步骤?
以向 www.baidu.com 发送HTTP请求为例:
- 客户端浏览器通过DNS析到www.baidu.com的IP地址220.181.27.48,通过这个IP地址找到客户端到服务器的路径。客户端浏览器发起个HTTP会话到220.161.27.48 ,然后通过TCP进行封装数据包,输入到网络层。
- 在客户端的传输层把HTTP会话请求分成报文段 ,添加源和目的端口, 并进行交换。然后使用网络层的IP地址查找目的端。
- 客户端的网络层,主要做的是通过点找路由表确定如何到达服务器,期间可能经过多个路由器
- 客户端的链路层,包通过链路层发送到路由器,通过邻居协议查找给定IP地址的MAC地址,然后发送ARP请求查找目的地址,如果得到回应后就可以使用ARP的请求应答交换的IP数据包现在就可以传输了,然后发送P数据包到达服务器的地址。
2. HTTPS请求的步骤(握手的过程)?
HTTPS的请求过程如下:
-
客户端发起HTTPS请求
-
服务端的配置: 采用HTTPS协议的服务器必须要有一套数字证书,可以是自己制作或者CA证书。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用CA证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥。公钥给别人加密使用,私钥给自己解密使用。
-
服务端向客户端传送证书,这个证书其实就是公钥
-
客户端解析证书: 这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随即值,然后用证书对该随机值进行加密。
-
客户端向服务端传送加密信息: 这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。
-
服务端解密信息: 服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密。
-
传输加密后的信息: 这部分信息是服务段用私钥加密后的信息,可以在客户端被被解密。
-
客户端解密信息: 客户端用之前生成的私钥解密服务端传过来的信息,于是获取了解密后的内容。
3. HTTPS为什么是安全的?
HTTPS相对于HTTP协议,加入了TLS/SSL,它的全称为安全传输层协议,是介于TCP和HTTP之间的一层安全协议。
TLS/SSL的功能实现主要依赖三类基本算法:散列函数hash、对称加密、非对称加密。这三类算法的作用如下:
- 基于散列函数验证信息的完整性
- 对称加密算法采用协商的秘钥对数据加密
- 非对称加密实现身份认证和秘钥协商
详见文章:《一文读懂 HTTPS协议》
4. HTTP和HTTPS协议的区别?
HTTP和HTTPS协议的主要区别如下:
- HTTPS协议需要CA证书,费用较高;HTTP协议不需要
- HTTP协议是超文本传输协议,信息是明文传输的,HTTPS则是具有安全性的SSL加密传输协议
- 使用不同的连接方式,端口也不同,HTTP协议端口是80,HTTPS的协议端口是443
- HTTP协议连接很简单,是无状态的;HTTPS协议是有SSL和HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP更加安全
5. 一个TCP连接可以同时发送几个HTTP请求?
- HTTP1.1中,单个TCP连接,在同一时间只能处理一个http请求
- HTTP2提供了多路传输功能,多个http请求,可以同时在同一个TCP连接中进行传输。
6. HTTP状态码有哪些?
HTTP状态码分为以下五类:
状态码 | 类别 | 描述 |
---|---|---|
1xx | Informational(信息性状态码) | 请求正在被处理 |
2xx | Success(成功状态码) | 请求处理成功 |
3xx | Redirection(重定向状态码) | 需要进行重定向,重新请求 |
4xx | Client Error(客户端状态码) | 服务器无法处理请求 |
5xx | Server Error(服务端状态码) | 服务器处理请求时出错 |
常见的状态码:
7. 建立TCP连接后,什么条件下会断开?
- 在HTTP/1.0中,一个HTTP请求收到服务器响应后,会断开对应的TCP连接。这样每次请求,都需要重新建立TCP连接,这样一直重复建立和断开的过程,比较耗时。所以为了充分利用TCP连接,可以设置头字段
Connection: keep-alive
,这样http请求完成后,就不会断开当前的TCP连接,后续的HTTP请求可以使用当前TCP连接进行通信 - HTTP/1.1将Connection写入了标准,默认值为
keep-alive
。除非强制设置为Connection: close
,才会在请求后断开TCP连接。所以,默认情况下建立的TCP连接不会断开,只有在请求头中设置Connection: close才会在请求后关闭TCP连接。
8. 页面有多张图片,HTTP是怎样的加载表现,如何解决?
- 在
HTTP1
下,浏览器对一个域名下最大TCP连接数为6,所以会请求多次。可以用多域名部署解决。 这样可以提高同时请求的数目,加快页面图片的获取速度。 - 在
HTTP2
下,可以一瞬间加载出来所有的资源,因为,HTTP2支持多路复用,可以在一个TCP连接中发送多个HTTP请求。
9. HTTP缓存机制是什么?介绍一下HTTP不同版本?
详见文章:《HTTP协议(二):HTTP版本、HTTP缓存》
10. HTTP2的头部压缩算法是怎样的?
HTTP2的头部压缩是HPACK算法。在客户端和服务器两端建立“字典”,用索引号表示重复的字符串,采用哈夫曼编码来压缩整数和字符串,可以达到50%~90%的高压缩率。
具体来说:
-
在客户端和服务器端使用“首部表”来跟踪和存储之前发送的键值对,对于相同的数据,不再通过每次请求和响应发送;
-
首部表在HTTP/2的连接存续期内始终存在,由客户端和服务器共同渐进地更新;
-
每个新的首部键值对要么被追加到当前表的末尾,要么替换表中之前的值。
例如下图中的两个请求, 请求一发送了所有的头部字段,第二个请求则只需要发送差异数据,这样可以减少冗余数据,降低开销。
11. HTTP的options请求方法及使用场景?
OPTIONS是除了GET和POST之外的其中一种 HTTP请求方法。
OPTIONS方法是用于请求获得由Request-URI
标识的资源在请求/响应的通信过程中可以使用的功能选项。通过这个方法,客户端可以在采取具体资源请求之前,决定对该资源采取何种必要措施,或者了解服务器的性能。该请求方法的响应不能缓存。
OPTIONS请求方法的主要用途有两个:
-
获取服务器支持的HTTP请求方法;
-
用来检查服务器的性能。例如:AJAX进行跨域请求时的预检,需要向另外一个域名的资源发送一个HTTP OPTIONS请求头,用以判断实际发送的请求是否安全。
12. HTTPS相对于HTTP的缺陷?
- HTTPS需要做服务器和客户端双方的加密个解密处理,耗费更多服务器资源,过程复杂
- HTTPS协议握手阶段比较费时,增加页面的加载时间
- SSL证书是收费的,功能越强大的证书费用越高
- HTTPS连接服务器端资源占用高很多,支持访客稍多的网站需要投入更大的成本