laravel - 允许 Cloudflare 从 Laravel 缓存我的索引页面
问题描述
我面临一个疯狂的问题,我有一个网站正在生产中运行,我正在尝试使用 cloudflare 的“页面规则”缓存我的索引页面以加快速度,它现在没有动态内容。
问题是它不起作用可能是因为 laravel 总是返回带有 XSRF-TOKEN 的视图,而 cloudflare 会将其理解为不可缓存,我已经更改了标题(缓存控制:max-age=36000,公共)但 cloudflare当它应该返回 HIT 时,总是返回标题“cf-cache-status: BYPASS”。
当我尝试对来自 laravel 公共文件夹的文件(视图的相同 php 文件)使用相同的规则时,它可以正常工作并返回 HIT。
我能想到的解决方案是尝试从标头响应中删除这个 XSRF-TOKEN,但我对如何做到这一点感到很疯狂,有什么提示吗?
Obs:我尝试使用删除这些cookie
\Config::set('session.driver' , 'array');
\Config::set('cookie.driver', 'array');
但这只会删除一个 cookie 而不是 XSRF-TOKEN 一个。
解决方案
我相信您必须在要缓存的页面上删除 CSRF 令牌,或者实施某种 JavaScript 解决方案,在您需要 CSRF 令牌的时候请求它。
我发现这篇文章解释了你的情况(文章底部):
https://blog.cloudflare.com/the-curious-case-of-caching-csrf-tokens/
如果您确定您的页面不需要 CSRF 令牌(即它不包含任何 POST/PUT/DELETE 功能),您可以删除该特定页面的令牌并没问题。
在 Laravel 中,CSRF-token 由 管理\App\Http\Middleware\VerifyCsrfToken
,它应该在你的中间件中列出\App\Http\Kernel
。删除此中间件将删除所有使用该中间件的路由;因此,您可能必须为确实需要 CSRF 保护的页面创建一个单独的中间件组。
您可能还可以添加到中间件类的protected $except = []
属性中。VerifyCsrfToken
此属性包含应从 CSRF 验证中排除的 url 数组。所以你可以添加'/'
到那个数组,或者像'/webhook/*'
.
推荐阅读
- android - Android TargetSDK 30 包可见性限制不适用于“com.google.android.gms”?
- azure - 从 Azure 运行 Childrunbook 不起作用,但从 Powershell CLI 运行
- c# - 重复水印文本
- c++ - C ++中不同的变量初始化方法:它们在功能上是否相同?
- flutter - 如何重新安装软件包的文件
- python - 如何隐藏基类的方法不被子类的对象访问?
- javascript - 为什么我的 JavaScript 代码在给出标头时收到“请求的资源上不存在“访问控制允许来源”标头”错误
- r - 如何在 Shiny R 上上传、显示和删除图像文件
- c - 为什么在三元运算符中使用赋值会产生不带括号的错误?
- android - 如何使用红色、绿色和蓝色值创建颜色?- 喷气背包组成