在这次技术面试中,面试官通过多个问题考察了我对HTTP协议及相关技术的理解。以下是我对面试过程中遇到的一些关键问题和答案的总结:
1. 输入URL到浏览器发生了什么?都用到了哪些协议?
当输入URL并按下回车时,浏览器会通过以下步骤处理:
-
DNS解析 :浏览器通过DNS查询域名对应的IP地址。
-
建立TCP连接 :浏览器通过TCP协议与服务器建立连接。
-
发送HTTP请求 :浏览器通过HTTP协议向服务器发送请求。
-
等待响应 :服务器处理请求后返回HTTP响应。
-
渲染页面 :浏览器解析HTML、CSS、JavaScript等内容,并呈现网页。
所涉及的协议包括:DNS、TCP、IP、HTTP。
2. DNS基于TCP还是UDP,为什么?
DNS通常使用UDP协议 。原因是DNS查询非常短小且要求响应快速,UDP协议在低开销下能高效地完成查询任务。然而,当DNS响应的数据包过大(如超过512字节)时,它会自动切换到TCP协议 ,以保证数据完整性。
3. 域名解析的流程
-
浏览器缓存 :首先检查浏览器的DNS缓存,看看是否有该域名的IP地址。
-
操作系统缓存 :如果浏览器没有缓存,操作系统会查询本地缓存。
-
DNS查询 :若操作系统也没有缓存,会向本地DNS服务器发送请求。
-
递归查询 :如果本地DNS服务器没有答案,它会向根DNS服务器或其他DNS服务器递归查询。
-
返回结果:最终DNS服务器返回域名的IP地址,浏览器通过这个IP地址建立TCP连接。

4. 描述HTTP状态码,401, 301, 302, 201代表什么
-
401 Unauthorized :请求需要用户身份验证,通常表示身份验证失败。
-
301 Moved Permanently :资源永久性移动到新位置。
-
302 Found :资源暂时移动到新位置(临时重定向)。
-
201 Created :请求成功并创建了新的资源。
5. 描述Session和Cookie,Cookie是怎么传输的
-
Session :服务器存储用户状态信息(如登录状态),通过Session ID在用户和服务器之间传递。
-
Cookie:客户端存储的键值对数据,每次请求时会随请求头一起发送到服务器,直到Cookie过期或被删除。Cookie通过**HTTP请求头(Cookie字段)**传输。
6. 如何告诉客户端,响应的是什么数据类型?
通过Content-Type 响应头,告诉客户端响应数据的类型。例如,Content-Type: text/html
表示返回的是HTML数据,Content-Type: application/json
表示返回的是JSON数据。
7. HTTP2.0的优点和QUIC的实现
-
HTTP2.0的优点 :
-
多路复用:允许在一个连接上同时发送多个请求和响应,避免了HTTP1.x中的队头阻塞问题。
-
头部压缩:通过HPACK压缩减少头部数据的传输。
-
服务器推送:服务器可以主动推送资源到客户端,减少延迟。
-
QUIC的实现:QUIC是基于UDP的传输协议,旨在减少TCP连接的延迟。QUIC通过0-RTT连接建立和集成加密,进一步提高了性能和安全性。
8. HTTP2.0和1.x的区别,1.x如何保证高并发
-
HTTP2.0与1.x的区别 :
-
HTTP2.0使用二进制协议,而HTTP1.x是文本协议。
-
HTTP2.0支持多路复用,HTTP1.x是串行的。
-
HTTP2.0支持头部压缩,而HTTP1.x不支持。
-
HTTP1.x高并发处理:通过多个TCP连接来模拟并行请求,但这会增加开销。浏览器通过开多个连接来应对高并发,但也会造成资源浪费。
9. HTTPS握手过程,证书如何验证?为什么不用非对称加密通信?
- HTTPS握手过程 :
-
客户端发起SSL/TLS连接请求。
-
服务器返回公钥证书(包含公钥、签名等信息)。
-
客户端验证服务器证书的合法性(通过CA根证书)。
-
客户端生成预主密钥并加密,用服务器的公钥加密后发送给服务器。
-
服务器使用私钥解密预主密钥,双方生成对称密钥进行加密通信。
-
证书验证 :通过检查证书是否由受信任的CA签发,以及证书是否有效。
-
非对称加密通信的局限性:非对称加密速度较慢,因此只用于密钥交换,后续通信使用对称加密。
10. HTTP哪些接口是幂等的?
- GET、HEAD、PUT、DELETE等方法是幂等的。即多次相同请求对服务器的结果不产生副作用,结果不会改变。
11. Client是如何实现长连接的?HTTP Keep-Alive是什么?如何工作?
-
长连接 :客户端与服务器建立一个TCP连接,连接不会在请求和响应后关闭,而是保持一段时间,后续的请求可以复用这个连接。
-
HTTP Keep-Alive :这是HTTP/1.1引入的机制,允许在同一TCP连接中多次发送请求和响应。通过在请求和响应头中加入
Connection: keep-alive
来保持连接。
12. 介绍一下计算机网络七层模型
-
应用层 :负责网络应用的服务,如HTTP、FTP。
-
表示层 :负责数据的编码、加密和压缩。
-
会话层 :管理会话建立、维护和终止。
-
传输层 :提供端到端的通信控制,如TCP、UDP。
-
网络层 :负责数据包的路由与转发,如IP。
-
数据链路层 :负责数据帧的传输,如Ethernet。
-
物理层:负责实际的物理连接,如电缆、无线传输。
13. HTTP GET和HEAD区别、GET和POST区别
-
GET与HEAD :
GET
请求返回完整的响应数据,HEAD
请求只返回响应头,不返回数据体。 -
GET与POST :
GET
请求通过URL传输数据,数据暴露在URL中;POST
通过请求体传输数据,更适合传输大量数据。
14. 客户端在建立连接时发现很多connect reset by peer的异常,你觉得问题出在哪?
可能是服务器端由于负载过高或配置问题,关闭了连接。也可能是网络中间设备(如防火墙)断开了连接。
15. 网络的性能指标有哪些?
-
延迟 :数据从源到目的地的时间。
-
带宽 :网络在单位时间内可以传输的数据量。
-
吞吐量 :实际的数据传输速率。
-
丢包率:数据在传输过程中丢失的比例。
16. HTTP能不能一次连接多次请求,不等后端返回?
是的,通过HTTP2.0的多路复用机制,一个连接可以并行处理多个请求和响应,减少延迟。
17. Go中的HTTP包的实现原理
Go的http
包基于标准的HTTP协议栈实现,使用net/http
库处理请求和响应。Go的HTTP包支持连接池、持久连接和HTTP2,能够高效地处理并发请求。
这次面试让我深入思考了很多网络通信和协议层的知识,也帮助我进一步了解了如何优化HTTP请求、提升性能以及确保系统的高可用性。