参考资料

  1. 检测DDoS攻击?详细说明
  2. 列举的这些HTTP响应头中
  3. 网站防爬虫设置
  4. 哪些HTTP响应头可以用于防爬虫?
  5. 有哪些常见的HTTP响应头误区
  6. 如何设置HTTP响应头进行防爬虫?
  7. 列举的这些HTTP响应头中,哪些最有效?
  8. 如何设置防爬虫

有哪些常见的HTTP响应头误区

  1. Cache-Control: no-cache 表示不缓存

    • 误区:很多人认为 no-cache 表示完全不缓存。

    • 事实:no-cache 允许缓存,但要求每次使用前必须向服务器验证(发送 If-None-MatchIf-Modified-Since 请求)。真正禁止缓存的是 no-store

  2. 混淆 Expires 和 Cache-Control 优先级

    • 误区:认为 ExpiresCache-Control 同时存在时,Expires 优先级更高。

    • 事实:Cache-Controlmax-age 优先级高于 Expires,现代浏览器主要依赖 Cache-Control

  3. 错误使用 Vary 头导致缓存失效

    • 误区:随意设置 Vary: * 或过多字段(如 Vary: User-Agent),以为能提高缓存灵活性。

    • 事实:Vary 头会严格匹配请求头,过度使用可能导致缓存命中率极低,甚至完全失效。

  4. 认为 ETag 比 Last-Modified 更高效

    • 误区:认为 ETag(基于内容哈希)一定优于 Last-Modified(基于时间)。

    • 事实:ETag 计算可能消耗资源(如动态生成),而 Last-Modified 对静态文件更简单高效。

  5. 忽略 Age 头的存在

    • 误区:未注意代理服务器返回的 Age 头,误判资源新鲜度。

    • 事实:Age 表示资源在代理缓存中的存储时间,需结合 max-age 计算剩余缓存时间。

  6. 错误设置 Pragma: no-cache

    • 误区:认为 Pragma: no-cache 是 HTTP/1.1 的推荐缓存控制方式。

    • 事实:Pragma 是 HTTP/1.0 的遗留字段,现代应用应优先使用 Cache-Control

  7. 认为 Set-Cookie 会阻止所有缓存

    • 误区:认为响应包含 Set-Cookie 时浏览器一定不缓存。

    • 事实:除非显式设置 Cache-Control: privateno-store,否则可能被缓存(但通常不建议)。

  8. 忽略 Content-Length 的重要性

    • 误区:动态内容忽略 Content-Length,依赖分块传输(Transfer-Encoding: chunked)。

    • 事实:明确 Content-Length 可提升性能(如支持持久连接),尤其对静态资源。

  9. 错误理解 Transfer-Encoding: chunked

    • 误区:认为分块传输(chunked)仅用于流式响应。

    • 事实:它是 HTTP/1.1 的默认机制,在未知内容大小时必须使用,但会增加解析开销。

  10. 认为所有 3xx 响应都需要 Location 头

    • 误区:认为 301/302 之外的 3xx 状态码(如 304 Not Modified)也需要 Location

    • 事实:仅重定向类状态码(如 301302307 等)需要 Location304 不需要。