Skip to content

有哪些必须认识的请求头和响应头? ​

请求头描述客户端要什么、能接受什么、是否带身份。响应头描述数据是什么、能不能缓存、脚本能不能跨域读它。面试按缓存、内容协商、认证、安全四组说。

原理 ​

请求:

  • Accept、Accept-Language、Accept-Encoding:能接受的类型、语言和压缩。
  • Content-Type:正文的媒体类型。JSON 是 application/json。
  • Authorization:令牌。Cookie:浏览器按规则自动带上。
  • Cache-Control、If-None-Match、If-Modified-Since:缓存验证。
  • Origin、Referer:来源。跨域和 CSRF 校验会看它们。
  • User-Agent:客户端标识,不要用它做安全判断。

响应:

  • Content-Type 和 Set-Cookie。
  • Cache-Control、ETag、Last-Modified。
  • Access-Control-Allow-*:CORS。
  • Content-Security-Policy、Strict-Transport-Security。
  • Location:重定向目标。

自定义头会让跨域请求变成预检。只在需要让脚本读取某个响应头时,才把它放进 Access-Control-Expose-Headers。

追问 ​

Cookie 和 Authorization 怎么选?

浏览器自动发送、脚本不该读取的会话,用 HttpOnly Cookie。前后端分离、由脚本显式附加的令牌,用 Authorization。见 本地存储。

压缩头有什么用?

Accept-Encoding: br, gzip 让服务器选一种压缩。静态资源在构建或 CDN 上预压缩,比每次现场压缩省 CPU。

易错点 ​

  • 把令牌放在自定义头里,又没处理预检。
  • 响应没写 Content-Type,浏览器会去猜,脚本也可能解析错。
  • 用 User-Agent 当鉴权。

相关 ​