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

相关推荐
程序员爱钓鱼5 小时前
Go语言实战案例 — 工具开发篇:编写高可用日志收集脚本
后端·mongodb·go
绝无仅有5 小时前
职场面试redis经历之与一位资深技术面试官的技术问答与总结
后端·面试·github
摸鱼的春哥5 小时前
前端程序员最讨厌的10件事
前端·javascript·后端
Victor3565 小时前
Redis(55)Redis的内存淘汰策略有哪些?
后端
金色天际线-7 小时前
Nginx 优化与防盗链配置指南
java·后端·spring
老马啸西风10 小时前
v0.29.2 敏感词性能优化之基本类型拆箱、装箱的进一步优化的尝试
性能优化·开源·nlp·github·敏感词
伴杯猫13 小时前
【ESP32-IDF】基础外设开发2:系统中断矩阵
c语言·单片机·嵌入式硬件·mcu·物联网·github
weixin_4569042714 小时前
Spring Boot 用户管理系统
java·spring boot·后端