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 个回答 Voted Best Answer MiKE 2024-10-04T18:02:09+08:002024-10-04T18:02:09+08:00 各位开发人员,大家好! 我遇到了同样的问题,经过进一步调查,我发现这是Cloudflare 中的一项 Beta 功能,称为“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/ 问候!
各位开发人员,大家好!
我遇到了同样的问题,经过进一步调查,我发现这是Cloudflare 中的一项 Beta 功能,称为“Speed Brain”。它指示浏览器在任何未来导航时启动预取请求。
我还没有弄清楚如何满足预取请求才能成功,所以我暂时禁用了该功能,因为目前对我来说这并不重要。您的服务器响应中可能需要设置其他标头,以指示 Cloudflare 缓存文档。
Cloudflare 声明如下:
我在日志中看到同一秒内连续发出了 2 个请求,第一个请求来自 Cloudflare,其标头为“sec-purpose: prefetch”,表明该请求以某种方式通过了。也许我并没有完全理解,或者这是由于该功能仍处于 Beta 阶段(存在错误)。
由于我们误将预取视为实际的客户请求,因此该请求给我们带来了问题。
在 PHP 中,您可以通过在 $_SERVER 中查找全局变量来捕获此类请求,如下所示:
在我们的代码中,我们还绕过了预取请求触发的问题部分,因为它在免费计划中默认启用。我认为这对于测试版功能来说并不理想。但是,您始终可以禁用此选项,如图所示。
更多内容:
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/
问候!