HTTP与HTTPS协议
HTTP(HyperText Transfer Protocol)是计算机网络前端面试中的核心考点。作为应用层协议,它基于TCP/IP协议栈运行,采用请求-响应模式,具有无状态、无连接、明文传输等特性。
在前端工程师面试中,常考内容包括:
- HTTP请求方法(GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS等)及其幂等性与安全性分析
- HTTP状态码分类及常见码值(如200、201、301、302、304、400、401、403、404、500等)
- HTTP头部字段作用(Cache-Control、ETag、Last-Modified、Content-Type、Cookie、Authorization等)
- HTTP/1.1与HTTP/2的关键差异(多路复用、头部压缩、服务器推送、二进制分帧等)
- HTTP/3基于QUIC协议的传输层改进(UDP + TLS 1.3 + 连接迁移)
【真实面试题】为什么GET请求不能用于提交密码?
虽然HTTP协议本身未限制GET请求体内容,但实践中应避免使用GET提交敏感数据,原因如下:
- URL长度受限(浏览器与服务器限制约2KB~8KB),易导致截断
- URL会暴露在浏览器地址栏、历史记录、服务器日志、代理日志中,泄露风险极高
- GET请求易被缓存(如CDN、代理服务器),密码可能被缓存存储
- Referer头可能将完整URL传递给第三方,扩大泄露面
正确做法:使用POST请求 + HTTPS + Body加密传输(如密码哈希或前端加密),配合CSRF Token防护。
HTTP/1.1核心机制
HTTP/1.1定义了连接复用(Connection: keep-alive)、管道化(pipelining)、分块传输编码(chunked)等机制,解决HTTP/1.0每次请求需建立新连接的问题。
注意:HTTP/1.1存在队头阻塞(Head-of-Line Blocking)问题——同一连接中,前一个请求未完成会阻塞后续请求。
HTTP/2关键特性
HTTP/2(RFC 7540)通过二进制分帧、多路复用、头部压缩(HPACK)、服务器推送(Server Push)、流优先级等特性,大幅提升性能。
- 二进制分帧:将消息分解为帧(Frame),帧可交错发送,避免队头阻塞
- 多路复用:一个TCP连接可并行传输多个流(Stream),每个流包含多个帧
- 头部压缩:HPACK算法压缩头部,减少冗余字段传输
- 流控制:基于窗口的流量控制机制,防止发送方压垮接收方
注意:HTTP/2需依赖TLS(HTTPS)部署,主流浏览器仅支持加密传输。
HTTPS安全机制
HTTPS = HTTP + TLS/SSL,通过加密、认证、完整性保护保障通信安全。
核心流程:
- 客户端发送Client Hello(支持的TLS版本、随机数、Cipher Suites)
- 服务端响应Server Hello(确认TLS版本、随机数、证书)
- 客户端验证证书(CA签发、域名匹配、有效期、吊销状态)
- 客户端生成Pre-Master Secret,用服务端公钥加密后发送
- 双方基于随机数与Pre-Master Secret生成Session Key
- 后续通信使用对称加密(如AES-256-GCM)
常见问题:HTTPS是否绝对安全?
答:否。若私钥泄露、证书被伪造(如CA被入侵)、或客户端未校验证书,仍可能被中间人攻击。
HTTP缓存机制详解
浏览器缓存分为强缓存与协商缓存:
| 类型 | 控制字段 | 机制说明 | 是否发请求 |
|---|---|---|---|
| 强缓存 | Cache-Control / Expires | 直接从本地缓存读取,不向服务器发起请求 | 否 |
| 协商缓存 | Last-Modified / If-Modified-Since ETag / If-None-Match |
向服务器发起请求,若资源未变更则返回304 | 是(带条件请求头) |
最佳实践:
- 静态资源(如JS/CSS/图片)设置长缓存时间 + 文件名哈希(如app.a1b2c3.js)
- HTML文件不缓存或短缓存,避免更新延迟
- 优先使用Cache-Control而非Expires(HTTP/1.1标准)
- ETag优先于Last-Modified(更精确,但计算开销略高)
浏览器渲染机制
浏览器将HTML/CSS/JS转换为像素的过程,是前端性能优化与计算机网络前端面试高频考点。完整流程如下: