HTTP面试题
HTTP面试题总结。
一 什么是HTTP
HTTP的全称是超文本传输协议(HyperText Transfer Protocol),是用于客户端和服务器之间传输超文本数据的协议。
二 什么是超文本
超文本(Hypertext)是一种文本形式,它不仅是顺序的文字排列,还可以包含链接(称为超链接)到其他文本或多媒体内容,从本质上说它是一个内容文本,我们对网站的浏览,实际上是对内容的浏览。
三 HTTP是否可靠
HTTP协议(超文本传输协议)本身是不可靠的,它是一种无状态、无连接的协议,但可以通过结合其它机制或协议,能够实现较为可靠的数据传输。
无状态:服务器不会记录先前的请求状态,每次请求都必须包含所有必要的信息,服务器无法“记住”客户端的历史操作。
无连接:HTTP并不保证数据传输的可靠性,客户端和服务器之间的连接在每次请求完成后就会断开,并不保证数据的完整性。
四 如何使它变得可靠
可通过下述方法中的任意一种或多种。
1. TCP协议(传输控制协议):它的优点是确保数据的完整性和正确性,它的机制是数据分段与重组、确认应答、流量控制与拥塞控制。
2. SSL/TLS协议(安全传输协议):它的优点和机制是提供了加密、身份验证、数据完整性。
3. DNS协议(域名系统):DNS协议并不直接影响HTTP的可靠性,但它对HTTP的成功执行至关重要,作用是域名解析、缓存机制。
4. CDN(内容分发网络):HTTP请求涉及到大规模的数据传输时,CDN网络可以提高访问的可靠性和速度,作用是缓存静态内容、负载均衡、容灾与冗余。
5. HTTP2:引入了多路复用技术,多个请求和响应可以共享一个TCP连接,能有效避免队头阻塞(Head-of-Line Blocking),同时它还支持请求头压缩和优先机制。
6. HTTP3:基于QUIC协议(传输层协议),而QUIC本身是基于UDP的,这意味着它克服了TCP的某些局限性(如慢启动、队头阻塞等),HTTP/3通过QUIC进一步提高了可靠性和低延迟。

五 HTTP和HTTPS的区别。
HTTP和HTTPS的区别主要在于协议的安全性和可靠性,HTTP协议无加密数据明文传输,而HTTPS则有加密和身份验证。
它们的具体区别参考下方表格:
| 特性 | HTTP | HTTPS |
|---|---|---|
| 加密 | 无加密,数据明文传输 | 使用SSL/TLS加密,确保数据安全 |
| 安全性 | 易受中间人攻击、窃听、篡改等风险 | 提供安全保护,防止数据泄露和篡改 |
| 身份验证 | 无身份验证 | 通过SSL证书验证服务器身份,防止钓鱼攻击 |
| 端口号 | 80端口 | 443端口 |
| 性能 | 较快(无加密过程) | 较慢(加密解密需要时间) |
| SEO排名 | 排名较低,可能受限 | 排名较高,搜索引擎倾向于优先展示HTTPS网站 |
| 浏览器警告 | 浏览器显示“不安全”警告 | 浏览器显示“安全”标记 |
| 适用场景 | 非敏感信息网站 | 需要保护隐私和安全的网站 |
六 三次握手
作用:它是在建立一个TCP连接时的三次交互称为三次握手(Three-Way Handshake)。主要是确认双方收发能力是否正常,指定自己的初始化序列号为后面的可靠性传输做准备。
第一次:客户端向服务器发送一个SYN(同步)包,表示客户端希望建立连接。这个包中会带有一个初始的序列号(Sequence Number),发送完成后,客户端进入SYN_SEND状态,等待服务器的响应。
第二次:服务器响应像客户端发送一个SYN-ACK(同步确认)包,表示同意建立连接,这个包中也会携带一个序列号,并确认客户端的序列号,发送完成后服务端进入SYN_RECEIVED状态,等待客户端响应。
第三次:客户端收到服务器的SYN-ACK后,向服务器发送一个ACK(确认)包,表示客户端收到了,并已准备好进行数据传输,此时客户端进入ESTABLISHED状态表示连接成功,而服务器在收到后进入ESTABLISHED表示建立完成。

七:四次挥手
建立一个连接需要三次握手,而终止一个连接要经过四次挥手。这由TCP的半关闭(half-close)造成的。所谓的半关闭,其实就是TCP提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。
第一次挥手︰主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送﹐也就是主动关闭方告诉被动关闭方,我已经不会再给你发数据了,需要注意的是此时主动关闭方还可以接受数据。
第二次挥手:被动关闭方收到FIN包后﹐发送一个ACK给对方﹐确认序号为收到序号+1,意思是告诉主动发我知道了。
第三次挥手∶被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送﹐也就是告诉主动关闭方﹐我的数据也发送完了﹐不会再给你发数据了。
第四次挥手:主动关闭方收到FIN后﹐发送一个ACK给被动关闭方﹐确认序号为收到序号+1,至此﹐完成四次挥手。
总结:
1. 客户端 → 服务器:发送FIN包,请求断开连接。
2. 服务器 → 客户端:发送ACK包,确认收到断开请求。
3. 服务器 → 客户端:发送FIN包,表示服务器也没有数据要发送了。
4. 客户端 → 服务器:发送ACK包,确认收到服务器的断开请求,连接关闭。

八 常用的HTTP请求方法有哪些
| HTTP 方法 | 作用 | 特点 |
|---|---|---|
| GET | 请求获取资源 | 主要用于获取数据,不会修改服务器上的资源。请求不会有请求体。 |
| POST | 提交数据到服务器 | 用于创建或提交数据,通常有请求体,数据通过请求体发送。 |
| PUT | 更新资源 | 用于更新现有资源,如果资源不存在,可能会创建资源。请求体包含完整资源数据。 |
| DELETE | 删除资源 | 删除指定资源。请求体通常为空。 |
| PATCH | 部分更新资源 | 用于部分更新资源,只提交需要更新的数据,不是完整资源。 |
| HEAD | 获取资源的头信息 | 与GET类似,但只返回响应头,不返回响应体,通常用于测试链接有效性。 |
| OPTIONS | 查询服务器支持的HTTP方法 | 查询服务器允许客户端使用的HTTP方法。通常用于CORS请求前。 |
| TRACE | 诊断请求路径 | 回显客户端发送的请求,用于调试和跟踪请求。 |
| CONNECT | 建立隧道连接 | 用于通过代理服务器建立隧道连接,常用于HTTPS请求。 |
九 常见的请求状态码有哪些
| 状态码 | 类别 | 说明 |
|---|---|---|
| 200 | 成功 | 请求成功,服务器已成功处理请求。 |
| 201 | 成功 | 请求成功,服务器已创建资源(通常用于POST请求)。 |
| 204 | 成功 | 请求成功,但没有返回内容(通常用于DELETE请求)。 |
| 301 | 重定向 | 资源已被永久移动到新位置,响应包含新位置的URL。 |
| 302 | 重定向 | 资源临时移动,客户端应继续使用原始URL进行后续请求。 |
| 304 | 重定向 | 资源未修改,客户端可以使用缓存的版本。 |
| 400 | 客户端错误 | 请求无效,通常是客户端提交的请求存在语法错误。 |
| 401 | 客户端错误 | 未授权,表示请求需要身份验证。 |
| 403 | 客户端错误 | 禁止访问,服务器理解请求但拒绝执行。 |
| 404 | 客户端错误 | 找不到资源,请求的资源在服务器上不存在。 |
| 405 | 客户端错误 | 请求方法不被允许,客户端使用了不支持的HTTP方法。 |
| 408 | 客户端错误 | 请求超时,服务器未能在规定时间内收到请求。 |
| 500 | 服务器错误 | 服务器内部错误,表示服务器遇到未预料的情况。 |
| 501 | 服务器错误 | 服务器不支持请求的功能,无法处理该请求。 |
| 502 | 服务器错误 | 错误网关,服务器作为网关或代理时接收到无效响应。 |
| 503 | 服务器错误 | 服务不可用,服务器当前无法处理请求(可能是过载或维护中)。 |
| 504 | 服务器错误 | 网关超时,服务器作为网关或代理时未及时接收到请求。 |
十 HTTPS的工作原理
客户端发起请求:客户端输入HTTPS地址,浏览器通过DNS解析获取服务器IP地址,并建立TCP连接。
SSL/TLS握手:客户端与服务器交换加密参数,验证服务器身份,并生成共享的对称密钥。
加密通信:客户端和服务器使用共享的对称密钥加密数据,确保数据的机密性和完整性。
安全关闭连接:数据传输完毕后,双方通过SSL/TLS协议安全地关闭连接。
总结:HTTPS通过SSL/TLS协议对HTTP协议进行加密,确保了数据在客户端与服务器之间的传输是安全的。它通过身份验证、数据加密、和完整性检查,保护用户的隐私和数据安全。

十一 从输入地址到看到页面发生了什么
1. HTTP请求服务端生成证书,客户端对证书的有效期、合法性、域名是否与请求的域名一致、证书的公钥(RSA加密)等进行校验。
2. 客户端如果校验通过后,就根据证书的公钥的有效, 生成随机数,随机数使用公钥进行加密(RSA加密)。
3. 消息体产生的后,对它的摘要进行MD5(或者SHA1)算法加密,此时就得到了RSA签名;
4. 发送给服务端,此时只有服务端(RSA私钥)能解密。
5. 解密得到的随机数,再用AES加密,作为密钥(此时的密钥只有客户端和服务端知道)。
未完待续....
