跳转到内容

利用Cloudflare规则解决CORS(跨源资源共享)问题,无Worker动态返回响应头

发布于: 2026/02/03 15:14:12

内容概要

本文介绍了一种利用Cloudflare规则处理跨源资源共享(CORS)问题的方法,可以根据请求源动态返回响应头,无需Workers

如果你尝试在blog.example.com中访问api.example.com,可能会遇到跨源资源共享(CORS)问题,导致请求失败。此时就需要设置相关规则,给响应添加CORS标头,允许跨源请求。

利用CF规则

一个简单有效的处理方法就是利用Cloudflare的响应标头转换规则

在Cloudflare域名控制台的规则页面中,创建一个响应标头转换规则:

  • 规则名称:添加CORS标头
  • 如果传入请求匹配:自定义筛选表达式
  • 当传入请求匹配时: 点击“编辑表达式”,输入以下表达式:
    text
    ((http.host contains "api.example.com" or http.host contains "api.example.cn") and 
    (http.referer contains "example.com" or http.referer contains "example.cn" or 
    http.referer eq ""))
  • 则: 修改响应头如下:
    操作标头名称
    设置静态Access-Control-Allow-HeadersContent-Type,Authorization
    设置静态Access-Control-Allow-MethodsGET,HEAD,POST,OPTIONS
    设置动态Access-Control-Allow-Originhttp.request.headers["origin"][0]
    设置静态Access-Control-Max-Age600
    添加静态VaryOrigin
  • 放置位置:第一个

表达式使用说明

在第一行编辑需要添加CORS标头的域名,在第二行编辑允许访问的白名单。

顺便一提,Cloudflare的规则语法页面在这里

动态响应头说明

由于Access-Control-Allow-Origin标头只能有一个值,当我们需要授权来自多个域名的访问时,就需要根据请求的来源,动态设置该标头。

参照相关文档所述,上方所提供的值http.request.headers["origin"][0]即表示与请求的origin标头相同。

此外,还须给Vary标头添加值Origin,告知浏览器请求的源会影响该响应的内容。