HTTP面试之实战经验与总结

在这次技术面试中,面试官通过多个问题考察了我对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握手过程
  1. 客户端发起SSL/TLS连接请求。

  2. 服务器返回公钥证书(包含公钥、签名等信息)。

  3. 客户端验证服务器证书的合法性(通过CA根证书)。

  4. 客户端生成预主密钥并加密,用服务器的公钥加密后发送给服务器。

  5. 服务器使用私钥解密预主密钥,双方生成对称密钥进行加密通信。

  • 证书验证 :通过检查证书是否由受信任的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与HEADGET请求返回完整的响应数据,HEAD请求只返回响应头,不返回数据体。

  • GET与POSTGET请求通过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请求、提升性能以及确保系统的高可用性。

相关推荐
IT_陈寒4 小时前
闭包陷阱让我加了两天班,JavaScript你真行
前端·人工智能·后端
易协同低代码5 小时前
通达OA核心类库TD类深度解析
后端
Gopher_HBo5 小时前
Go语言学习笔记(十八)Gin处理Session
后端
谭光志6 小时前
工具塞满上下文窗口怎么办?深度拆解 AI Agent Tool Search 按需加载实现原理
前端·后端·ai编程
她说..6 小时前
Java 默认值设置方式
java·开发语言·后端·springboot
foggyprojects6 小时前
从0开始,一句话启动AI DataAgent
后端·数据分析·ai编程
郡杰6 小时前
一些基础和问题解决
后端
陈随易7 小时前
前端项目部署只要30秒
前端·后端·程序员
YIAN7 小时前
从零手写文件读取 MCP 服务:一文吃透 Model Context Protocol 全链路通信原理
前端·后端·mcp
Imchendiana7 小时前
《狂人日记NO.9》— 前后端一把梭,我的全栈实录
前端·后端