当前位置: 首页 > 面试题库 >

如何在Go服务器上处理预检CORS请求

赫连子石
2023-03-14
问题内容

所以我用Go编写了这个RESTful后端,它将通过跨站点HTTP请求来调用,即从另一个站点(实际上,只是另一个端口,但是同源策略启动了,所以我们来了)提供的内容中调用。

在这种情况下,在某些情况下,用户代理将发送预检OPTIONS请求,以检查实际请求是否可以安全发送。

我的问题是如何在Go上下文中最好地处理和充分响应这些预检请求。我构想的方法感觉不太优雅,我想知道是否还有其他我没有想到的方法。

使用标准net/http包,我可以在处理程序函数中检查请求方法,也许像这样:

func AddResourceHandler(rw http.ResponseWriter, r *http.Request) {
  switch r.Method {
  case "OPTIONS":
    // handle preflight
  case "PUT":
    // respond to actual request
  }
}

我还可以使用Gorilla的
mux程序包,并为每个相关的URL路径注册一个预检“ OPTIONS”处理程序。

r := mux.NewRouter()
r.HandleFunc("/someresource/item", AddResourceHandler).Methods("PUT")
r.HandleFunc("/someresource/item", PreflightAddResourceHandler).Methods("OPTIONS")

也许对这个问题的回答很简单:是的 ,这些是您的基本选择。 但是我认为可能有一些我不知道的最佳实践。


问题答案:

分离逻辑并重新使用定义的CORS处理程序的一种简单方法是包装REST处理程序。例如,如果您使用的是net /
http和该Handle方法,则可以始终执行以下操作:

func corsHandler(h http.Handler) http.HandlerFunc {
  return func(w http.ResponseWriter, r *http.Request) {
    if (r.Method == "OPTIONS") {
      //handle preflight in here
    } else {
      h.ServeHTTP(w,r)
    }
  }
}

您可以这样包装:

http.Handle("/endpoint/", corsHandler(restHandler))


 类似资料:
  • 问题内容: 我试图向WCF服务(我拥有)发出跨域HTTP请求。我已经阅读了几种处理跨域脚本限制的技术。因为我的服务必须同时容纳GET和POST请求,所以我无法实现某些动态脚本标签,其src是GET请求的URL。由于我可以自由地在服务器上进行更改,因此我开始尝试实现一种变通方法,该变通方法包括配置服务器响应以包括“Access-Control-Allow-Origin”标头以及带有和OPTIONS请

  • 我是web服务新手,正在阅读Martin Kalin的《Java Webservices》一书。我已经了解了它最初的基本概念,有一个问题: 假设将HTTP请求(包含SOAP消息信封)发送到JavaWeb服务()。该请求是否由Servlet内部处理,Servlet提取SOAP消息并将其转换为相应Java域对象,然后调用服务实现bean? 无论Metro和Axis等现成框架如何,这个问题都是通用的。只

  • 问题内容: 作为我的标题,这是位于conf.d / api-server.conf中的配置文件 nginx.conf文件与默认设置相同。 将请求发送到api.localhost(api.localhost / admin / login)之后,我仍然收到405错误: 问题答案: 问题是您的if条件不会在中发送父项中的标头。如果您检查飞行前响应标头,它将是 那什么也没给。因此,有两种可能的解决方案。

  • 问题内容: 我想通过在写出响应主体时对其进行哈希处理来计算响应的实体标签。到我计算实体标签时,将实体标签添加到响应标头为时已晚。我想将实体标签添加到预告片中。我看到net / http包支持编写预告片,但我不知道如何使用它们。 预告片代码位于https://golang.org/src/pkg/net/http/transfer.go中。如何在应用程序中设置预告片? 问题答案: 使用bytes.B

  • 如何截获响应&添加适当的Access-Control-Allow-Origin标头?

  • 问题内容: 我在页面上有几个更新面板和jquery选项卡。另外,我正在更新面板上加载几个用户控件。用户等待几分钟后(未检查的时间约为40分钟)。当用户从“提交”按钮发送请求时,出现以下错误? 我无法解决此问题。但我相信。这是由Ajax引起的。大师,如果您知道解决方案。请告诉我。 问题答案: 当您有一个控件注册为多个更新面板中时,有时会出现此问题。 如果这不是问题,请尝试在脚本管理器声明之后立即添加