使用大猩猩处理程序允许起源

Posted

技术标签:

【中文标题】使用大猩猩处理程序允许起源【英文标题】:Allowing origins using gorilla handlers 【发布时间】:2017-06-28 11:33:39 【问题描述】:

我目前正在编写一个安静的网络服务器,我想从 angular2 前端进行测试。由于服务器在开发时托管在另一个域上,我需要Access-Control-Allow-Origin: *(我认为)。我试图通过使用 gorilla handlers 包来实现这一点,即以下内容:

origins := handlers.AllowedOrigins([]string"*")
log.Fatal(http.ListenAndServe(":"+os.Getenv(util.Port),
    handlers.LoggingHandler(os.Stdout, handlers.CORS(origins)(router))))

现在尝试使用以下 curl 请求服务器时:

curl -H "Origin: http://example.com" \
-H "Access-Control-Request-Method: POST" \
-H "Access-Control-Request-Headers: X-Requested-Width" \
-X OPTIONS --verbose localhost:8000

我在服务器上收到一个 OPTIONS 请求,它返回 403。我还尝试添加标头和允许的方法:

handlers.AllowedHeaders([]string"X-Requested-With")
handlers.AllowedMethods([]string"GET", "POST", "PUT", "OPTIONS")

但这并没有什么不同。我该如何解决这个问题?

【问题讨论】:

如果你不能让它工作,***.com/questions/12830095/… 的答案似乎是解决它的方法 不幸的是这不起作用,因为我也在使用 gorilla mux 路由器并设置函数方法,所以我必须单独包装每个路由 【参考方案1】:

这对我有用:

package main

import (
    "log"
    "net/http"
    "os"

    "github.com/gorilla/handlers"
    "github.com/gorilla/mux"
)

func main() 
    router := mux.NewRouter()

    log.Fatal(http.ListenAndServe(":8080", 
        handlers.LoggingHandler(os.Stdout, handlers.CORS(
            handlers.AllowedMethods([]string"POST"),
            handlers.AllowedOrigins([]string"*"),
            handlers.AllowedHeaders([]string"X-Requested-With"))(router))))

X-Requested-With 在您的 curl 示例中输入错误:

$ curl -H "Origin: http://example.com" -H "Access-Control-Request-Method: POST" -H "Access-Control-Request-Headers: X-Requested-With" -X OPTIONS --verbose localhost:8080
* Rebuilt URL to: localhost:8080/
*   Trying ::1...
* Connected to localhost (::1) port 8080 (#0)
> OPTIONS / HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.50.1
> Accept: */*
> Origin: http://example.com
> Access-Control-Request-Method: POST
> Access-Control-Request-Headers: X-Requested-With
> 
< HTTP/1.1 200 OK
< Access-Control-Allow-Headers: X-Requested-With
< Access-Control-Allow-Origin: http://example.com
< Date: Thu, 16 Feb 2017 22:58:24 GMT
< Content-Length: 0
< Content-Type: text/plain; charset=utf-8
< 
* Connection #0 to host localhost left intact

【讨论】:

以上是关于使用大猩猩处理程序允许起源的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring 5.3 及更高版本中使用 Stomp 和 SockJS 处理 CORS 起源?

CORS 起源问题 - Spring Boot 和 Angular 4

1.3 面向对象思想的起源

dom&bom的起源,发展和应用

JSP起源

HBase学习解析之起源.md