AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1165854
Accepted
Ade
Ade
Asked: 2024-09-28 16:39:52 +0800 CST2024-09-28 16:39:52 +0800 CST 2024-09-28 16:39:52 +0800 CST

503 响应预取请求,nginx + PHP

  • 772

我有一个由 nginx 提供服务的 PHP 应用程序/网站。当我使用 Google Chrome 浏览网站并打开开发工具网络面板时,我可以看到在导航到新页面 URL 页面之前有一个预取请求,服务器返回代码为 503(不可用)。

CloudFlare 正在被用作代理。

我很担心这些 503 错误。是否需要 nginx 配置才能正确处理预取请求?

显示双重请求的屏幕截图,一个是预取请求 屏幕截图显示了预取请求的响应标头

nginx
  • 1 1 个回答
  • 237 Views

1 个回答

  • Voted
  1. Best Answer
    MiKE
    2024-10-04T18:02:09+08:002024-10-04T18:02:09+08:00

    各位开发人员,大家好!

    我遇到了同样的问题,经过进一步调查,我发现这是Cloudflare 中的一项 Beta 功能,称为“Speed Brain”。它指示浏览器在任何未来导航时启动预取请求。

    Cloudflare Speed Brain 设置

    我还没有弄清楚如何满足预取请求才能成功,所以我暂时禁用了该功能,因为目前对我来说这并不重要。您的服务器响应中可能需要设置其他标头,以指示 Cloudflare 缓存文档。

    Cloudflare 声明如下:

    预取请求永远不会到达原始服务器。预取请求仅提供存储在 Cloudflare 缓存中的内容。如果内容不在缓存中,预取请求将不会继续到达原始服务器。如果没有此保护措施,尽管预取响应未在浏览器中呈现,原始服务器状态仍可能被修改。例如,对退出 URL 的预取 GET 请求可能会无意中触发服务器上的退出操作。

    我在日志中看到同一秒内连续发出了 2 个请求,第一个请求来自 Cloudflare,其标头为“sec-purpose: prefetch”,表明该请求以某种方式通过了。也许我并没有完全理解,或者这是由于该功能仍处于 Beta 阶段(存在错误)。

    由于我们误将预取视为实际的客户请求,因此该请求给我们带来了问题。

    在 PHP 中,您可以通过在 $_SERVER 中查找全局变量来捕获此类请求,如下所示:

    if(isset($_SERVER['HTTP_SEC_PURPOSE']) && $_SERVER['HTTP_SEC_PURPOSE'] === 'prefetch') {
        echo "This is the fetch request coming through, do nothing?";
    }
    

    在我们的代码中,我们还绕过了预取请求触发的问题部分,因为它在免费计划中默认启用。我认为这对于测试版功能来说并不理想。但是,您始终可以禁用此选项,如图所示。

    更多内容:

    https://developers.cloudflare.com/speed/optimization/content/speed-brain/

    https://www.cloudflare.com/press-releases/2024/cloudflare-speed-brain-make-millions-of-web-pages-faster/

    问候!

    • 1

相关问题

  • Gzip 与反向代理缓存

  • nginx 作为代理的行为

  • Nginx 学习资源 [关闭]

  • 提供 70,000 个静态文件 (jpg) 的最佳方式?

  • 在 Apache、LightTPD 和 Nginx Web 服务器上提供 PHP 5.x 应用程序的现状?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve