视频加载失败

给 Cloudflare Tunnel 后面的 API 开启 CORS

713 字
4 分钟
给 Cloudflare Tunnel 后面的 API 开启 CORS

给 Cloudflare Tunnel 后面的 API 开启 CORS#

我的 Memos API 通过 Cloudflare Tunnel 暴露在 memos.9ll.uk,前端则运行在 9ll.uk。两个地址的来源不同,浏览器发起 API 请求时就会受到同源策略限制,需要在响应中补上 CORS 相关响应头。

这里没有修改 Memos 本身,而是直接使用 Cloudflare 的响应头转换规则,在响应返回浏览器之前添加所需的 CORS 头。

先检查 API 地址#

首先检查前端填写的 API 地址。域名末尾不要带 /,写成:

https://memos.9ll.uk

而不是:

https://memos.9ll.uk/

这里后续的 API 路径会由请求端继续拼接。如果基础地址末尾已经带了 /,就可能和后面以 / 开头的路径拼出重复斜杠。

Memos API 地址配置
Memos API 地址配置

创建响应头转换规则#

进入 Cloudflare 控制台,选择对应域名,然后打开 规则 页面。点击 创建规则,选择 响应头转换规则

在 Cloudflare 中创建响应头转换规则
在 Cloudflare 中创建响应头转换规则

这类规则会在 Cloudflare 边缘修改返回给浏览器的响应头。源站不需要跟着改,比较适合给 Tunnel 后面的服务补充 CORS 配置。

设置匹配条件#

为了不让规则影响整个域名,我这里只匹配 Memos 的 API 请求:

字段运算符
主机名等于memos.9ll.uk
URI 路径开头为/api/

对应的规则表达式是:

(http.host eq "memos.9ll.uk" and starts_with(http.request.uri.path, "/api/"))

这样,只有访问 memos.9ll.uk/api/ 下的请求才会被添加 CORS 响应头,其他页面和路径不会受到影响。

添加 CORS 响应头#

操作选择 修改响应头,然后使用 设置静态 添加下面三项:

响应头
Access-Control-Allow-Originhttps://9ll.uk
Access-Control-Allow-MethodsGET, OPTIONS
Access-Control-Allow-HeadersContent-Type, Authorization

Cloudflare CORS 响应头规则配置
Cloudflare CORS 响应头规则配置

这三项分别控制:

  • Access-Control-Allow-Origin:允许 https://9ll.uk 这个来源读取响应。这里写的是具体来源,不是对所有网站开放的 *
  • Access-Control-Allow-Methods:允许 GET 请求和浏览器的 OPTIONS 预检请求。
  • Access-Control-Allow-Headers:允许请求携带 Content-TypeAuthorization

保存并部署规则即可。

注意请求范围#

截图中的配置只开放了 GETOPTIONS。如果你的前端还需要通过 API 创建、修改或删除内容,就要根据实际请求补充 POSTPUTPATCHDELETE,不能直接照抄这一项。

Access-Control-Allow-Origin 也要替换成你自己的前端来源,协议、域名和端口都要一致。如果跨域请求需要携带凭据,就不能把这里写成 *

配置时先把规则限制在对应的 API 域名和路径,再按真实请求填写允许的来源、方法和请求头。Cloudflare Tunnel 负责暴露服务;响应头转换规则在浏览器收到响应前补上 CORS 配置。

参考资料#

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
给 Cloudflare Tunnel 后面的 API 开启 CORS
https://9ll.uk/posts/network/cloudflare_cors/
作者
HY
发布于
2026-07-28
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
HY
Hello, I'm HY.
公告
欢迎关注微信公众号「折腾进行时」
分类
标签
最新动态
站点统计
文章
28
分类
9
标签
98
总字数
47,938
运行时长
0
最后活动
0 天前
站点信息
构建平台
Vercel
博客版本
Firefly v6.15.7
文章许可
CC BY-NC-SA 4.0