当前位置: 首页 > 知识库问答 >
问题:

如何使用Gorilla处理DELETE调用的预检请求?

欧阳鸿哲
2023-03-14

我用Gorilla Web Toolkit编写了一个简单的API,通过其处理程序处理CORS答案:

r := mux.NewRouter()
r.HandleFunc("/api/note", readHandler).Methods("GET")
r.HandleFunc("/api/note", writeHandler).Methods("POST")
r.HandleFunc("/api/note", deleteHandler).Methods("DELETE")
r.HandleFunc("/api/note", optionsHandler).Methods("OPTIONS")

optionsHandler是

func optionsHandler(_ http.ResponseWriter, _ *http.Request) {
    return
}

我这样做的理由是,预检调用将使用< code>OPTIONS,但它唯一感兴趣的是相关的CORS标题。

< code>GET和< code>POST工作正常,JavaScript fetch()调用通过正确的头。

然而,<code>DELETE</code>在Preflight调用中失败:Chrome DevTools声明,<code<DELETE Preflight</code〕调用失败,并出现<code>CORS错误</code<,下一行是Preflight<code>OPTIONS</code}调用,并出现405(“方法不允许”)失败

为什么在处理方法时会出现此错误?如何修复?

共有1个答案

司徒修能
2023-03-14

我通过更新 CORS() 调用解决了这个问题:

methods := handlers.AllowedMethods([]string{"OPTIONS", "DELETE", "GET", "HEAD", "POST", "PUT", "PATCH"})
origins := handlers.AllowedOrigins([]string{"*"})
headers := handlers.AllowedHeaders([]string{"Content-Type"})
log.Fatal(http.ListenAndServe("127.0.0.42:80", handlers.CORS(methods, origins, headers)(r)))

我认为(但我不确定)真正修复调用的是headers条目。

 类似资料:
  • 将 vue-loader 与 webpack 一起使用的好处之一是能够直接在你的 Vue 组件文件中预处理你的 HTML/CSS/JS,而无需其他工作。请查询 这里 相关的详细信息。 使用案例 假设我们需要使用 Sass/SCSS 来预处理我们的 CSS。首先,我们需要安装正确的 webpack 加载器来处理这种语法。 安装 sass-loader npm install --save-dev s

  • 问题内容: 所以我用Go编写了这个RESTful后端,它将通过跨站点HTTP请求来调用,即从另一个站点(实际上,只是另一个端口,但是同源策略启动了,所以我们来了)提供的内容中调用。 在这种情况下,在某些情况下,用户代理将发送预检OPTIONS请求,以检查实际请求是否可以安全发送。 我的问题是如何在Go上下文中最好地处理和充分响应这些预检请求。我构想的方法感觉不太优雅,我想知道是否还有其他我没有想到

  • 问题内容: 当我使用访问URL的请求时, cookie会自动发送回服务器 (在下面的示例中,所请求的URL设置了一些cookie值,然后重定向到另一个显示存储的cookie的URL) 是否可以通过将Chrome或Firefox设置为不接受Cookie的方式来临时禁用Cookie处理? 例如,如果我在禁用了cookie处理的情况下使用Chrome访问上述URL,则会得到我期望的结果: 问题答案: 您

  • 本文向大家介绍如何使用Tensorflow和Python整理预处理的数据?,包括了如何使用Tensorflow和Python整理预处理的数据?的使用技巧和注意事项,需要的朋友参考一下 Tensorflow是Google提供的一种机器学习框架。它是一个开放源代码框架,与Python结合使用以实现算法,深度学习应用程序等等。它用于研究和生产目的。它具有优化技术,可帮助快速执行复杂的数学运算。这是因为它

  • 在 webpack 中,所有的预处理器需要匹配对应的 loader。Vue Loader 允许你使用其它 webpack loader 处理 Vue 组件的某一部分。它会根据 lang 特性以及你 webpack 配置中的规则自动推断出要使用的 loader。 Sass 例如,为了通过 Sass/SCSS 编译我们的 <style> 标签: npm install -D sass-loader n

  • 问题内容: 我是一个Node.js新手,并且正在用它创建我的第一个大型应用程序(我正在使用Express)。当用户使用get请求加载ID时,我需要让我的网页执行一些javascript画布绘制 我知道我可以用一个简单的方法来处理 但我不知道如何使用该ID的要求的图纸开始我的网页。互联网上Express和Get上的每个教程都说明了如何处理get请求…这个问题是关于“接下来会发生什么?” 改写:我不确

  • 问题内容: java.net.URLConnection这里经常问到使用的问题,而Oracle教程对此却过于简洁。 该教程基本上仅显示如何触发GET请求并读取响应。它没有任何地方说明如何使用它来执行POST请求,设置请求标头,读取响应标头,处理cookie,提交HTML表单,上传文件等。 因此,如何使用它java.net.URLConnection来触发和处理“高级” HTTP请求? 问题答案:

  • 我是vapor的初学者,我选择vapor 3-rc作为开始,因为它似乎打破了vapor 2的变化。不幸的是,目前还没有完整的文档。 我目前正在尝试将一个简单的txt文件从Postman上传到我的Vapor 3本地服务器。 这是我的路线 和我的控制器 首先,通过执行邮递员请求,服务器返回: 通过研究源代码和关于此的有限文档,我似乎应该声明一个解码器来支持多部分传入请求。 所以我做到了: 我使用For