如何在 Cloudflare Workers 中设置 CORS?

2023-11-23

我是 Cloudflare Workers 的新手。

如何在 Cloudflare Workers 中设置 CORS?

  response = await cache.match(cacheKey);
  if (!response) {
    // handle fetch data and cache
  }
  const myHeaders = new Headers();
  myHeaders.set("Access-Control-Allow-Origin", event.request.headers.get("Origin"));
  return new Response(JSON.stringify({
    response
  }), {
    status: 200, headers: myHeaders
  });

其实是挺痛苦的。有一个来自 Cloudflare 的示例,但不能直接使用。最近终于搞定了,把详细步骤写成一个博客文章.

这是工作人员的完整代码。

// Reference: https://developers.cloudflare.com/workers/examples/cors-header-proxy
const corsHeaders = {
        "Access-Control-Allow-Origin": "*",
        "Access-Control-Allow-Methods": "GET,HEAD,POST,OPTIONS",
        "Access-Control-Max-Age": "86400",
}
function handleOptions (request) {
        // Make sure the necessary headers are present
        // for this to be a valid pre-flight request
        let headers = request.headers
        if (
                headers.get("Origin") !== null &&
                headers.get("Access-Control-Request-Method") !== null &&
                headers.get("Access-Control-Request-Headers") !== null
        ) {
                // Handle CORS pre-flight request.
                // If you want to check or reject the requested method + headers
                // you can do that here.
                let respHeaders = {
                        ...corsHeaders,
                        // Allow all future content Request headers to go back to browser
                        // such as Authorization (Bearer) or X-Client-Name-Version
                        "Access-Control-Allow-Headers": request.headers.get("Access-Control-Request-Headers"),
                }
                return new Response(null, {
                        headers: respHeaders,
                })
        }
        else {
                // Handle standard OPTIONS request.
                // If you want to allow other HTTP Methods, you can do that here.
                return new Response(null, {
                        headers: {
                                Allow: "GET, HEAD, POST, OPTIONS",
                        },
                })
        }
}
async function handleRequest (request) {
        let response
        if (request.method === "OPTIONS") {
                response = handleOptions(request)
        }
        else {
                response = await fetch(request)
                response = new Response(response.body, response)
                response.headers.set("Access-Control-Allow-Origin", "*")
                response.headers.set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")
        }
        return response
}
addEventListener("fetch", (event) => {
        event.respondWith(
                handleRequest(event.request).catch(
                        (err) => new Response(err.stack, { status: 500 })
                )
        );
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Cloudflare Workers 中设置 CORS? 的相关文章

随机推荐

  • 如何使用 spring security 2.0 在我的 JSP 页面中显示错误消息

    嗨 我现在正在使用 Spring Security 效果很好 但如果登录失败 则不会显示错误消息 我想知道如何显示错误消息 我已经在 applicationContext xml 中配置了 ResourceBundleMessageSour
  • 子流程变量[重复]

    这个问题在这里已经有答案了 1 import subprocess 2 raw raw input Filename lower 3 ip raw input Host lower 4 cmd subprocess call tcpdump
  • .css() 延迟后不会应用

    我想使用 jQuery 动态更改 div 上的背景颜色css 它起作用了 但后来我尝试添加一些延迟 但由于某种原因它停止了工作 我缺少什么 这是它的 MVC HTML div div div div JS nodelay hover fun
  • C# 和 VBA 之间的通信

    应老板的要求 我创建了一小组脚本 用于定期监视某些设备和进程的状态 随后使用相对复杂的 VBA 模块处理该信息 该模块收集所有信息 应用公式 设置范围并生成图表等 但存在两个问题 我是一名业余程序员 所以我的 VBA 例程效率很低 这对我来
  • SSH 会话中 TMUX 内的系统剪贴板 Vim

    我在 ssh 会话中的 tmux 中打开了 vim 如何让 vim 使用笔记本电脑的系统剪贴板作为默认复制粘贴 默认set clipboard unamed不工作 以防万一 两个系统都是 Ubuntu 如果您的终端仿真器支持 剪贴板集成功能
  • 迅速。结合。有没有办法在重试时多次调用发布者块?

    当发生某些错误时 我想使用 Swift Combine 中的 retry 多次发出网络请求 发布者内部的块仅被调用一次 这意味着当错误发生时 对真实应用程序仅发出一个请求 我的代码是 import UIKit import Combine
  • 如何将 crdate 和 cruuser_id 等标准字段与 TYPO3 和 extbase 一起使用?

    我有领域模型篮子和文章 如果我调用以下命令 我会收到购物篮中的文章 articlesInBasket basket gt getArticles 如何使用 TYPO3 标准属性 如 crdate 和 cruuser id 使用这样的东西会很
  • 将 @Autowired 与 AspectJ 和 Spring Boot 一起使用

    我想在 方面 中使用 Autowired 注释 我想在我的方面注入一个存储库 但是当我尝试调用自动装配类的方法时 会发生 NullPointException Aspect public class AspectSecurity Autow
  • 如何从MKmapview的可见区域获取半径?

    我能够获得地图视图的可见矩形 并且地图视图的中心点和跨度增量也可以从 mkmaap 视图方法获得 可见的是 mapView visibleMapRect用来 获取中心点 map view centerCoordinate使用并获得跨度 ma
  • 编写 std::copysign 的可移植 SSE/AVX 版本

    我目前正在使用 SSE 和 AVX 内在函数编写 QR 分解 线性系统求解器 的矢量化版本 其中一个子步骤需要选择与另一个值相反 等于的值的符号 在串行版本中 我为此使用了 std copysign 现在我想为 SSE AVX 寄存器创建一
  • data.table 按组外连接

    我正在尝试使用 data table 来填充我拥有的大型不平衡多维面板中缺失的观察结果 以下是数据示例 其中包含一些关于我想要的内容的评论 mydat lt structure list fund c 1 1 1 1 2 2 2 3 3 h
  • jquery.post 和 jquery.get 之间的区别?

    这两个 AJAX 调用有什么区别 为什么在使用 asp net mvc 框架时我会选择使用其中一个 一种使用 POST 一种使用 GET 就它们的用途而言 唯一真正的技术差异 如果我错了 请更正这篇文章 是 GET 对查询字符串的限制要短得
  • 找到覆盖整组区间的最少点数? [复制]

    这个问题在这里已经有答案了 给定一组区间 x y where 0 lt x y lt 2000如何找到可以覆盖所有间隔的最小点数 即每个间隔应包含结果点集中至少一个点 example Given Set of intervals 2 5 3
  • DESC 和 ASC 作为存储过程中的参数

    我有以下 SP 用于对新闻文章列表进行分页 正如你可能猜到的那样 count是要返回的行数 start是从中选择行的索引 按内部查询排序 orderby指示排序依据的列 并且 orderdir指示是否对一个方向或另一个方向进行排序 我原来的
  • 每个单元测试应该测试多少?

    我的每个单元测试应该检查多少内容 例如我有这个测试 TestMethod public void IndexReturnsAView IActivityRepository repository GetPopulatedRepository
  • 在 Pandas 中创建类似 Excel 的 SUMIFS

    我最近了解到pandas并很高兴看到它的分析功能 我正在尝试将 Excel 数组函数转换为 Pandas 相当于我为创建绩效归因报告而创建的自动化电子表格 在此示例中 我根据其他列中的条件在 Excel 中创建了一个新列 SUMIFS F
  • JavaScript:设置边框半径

    如何使用纯 JavaScript 无 jQuery 无插件等 设置 moz border radius document getElementById id Try document getElementById id style bord
  • 如何使 ItemsControl 拉伸以填充所有可用空间?

    我有一个 ItemsControl 其 ItemsSource 绑定到一个项目列表 每个项目的大小尽可能小 我需要的是控件和控件中的项目拉伸以适应所有可用空间 我尝试将控件及其项目上的 VerticalAlignment 设置为 Stret
  • 为什么 HashMap::get_mut() 取得其余作用域的映射所有权?

    我有以下代码 将一些值插入到 HashMap 中 然后将它们取出 use std collections HashMap fn things let mut map HashMap new map insert 5 thing map in
  • 如何在 Cloudflare Workers 中设置 CORS?

    我是 Cloudflare Workers 的新手 如何在 Cloudflare Workers 中设置 CORS response await cache match cacheKey if response handle fetch d