允许使用gorilla处理程序创建源代码

允许使用gorilla处理程序创建源代码,go,cross-domain,gorilla,Go,Cross Domain,Gorilla,我目前正在编写一个restful web服务器,我想从angular2前端测试它。由于服务器在开发时托管在另一个域上,我需要访问控制允许源代码:(我想)。我试图通过使用gorilla handlers包实现这一点,即: origins := handlers.AllowedOrigins([]string{"*"}) log.Fatal(http.ListenAndServe(":"+os.Getenv(util.Port), handlers.LoggingHandler(os.Std

我目前正在编写一个restful web服务器,我想从angular2前端测试它。由于服务器在开发时托管在另一个域上,我需要
访问控制允许源代码:
(我想)。我试图通过使用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
我在服务器上得到一个选项请求,返回403。我还尝试添加标题和允许的方法:

handlers.AllowedHeaders([]string{"X-Requested-With"})
handlers.AllowedMethods([]string{"GET", "POST", "PUT", "OPTIONS"})
但这没什么区别。我如何解决这个问题?

这对我来说很有效:

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-request-With
输入错误:

$ 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
$curl-H”原点:http://example.com“-H”访问控制请求方法:POST“-H”访问控制请求头:X-Request-With“-X选项--详细本地主机:8080
*重建的URL到:localhost:8080/
*正在尝试::1。。。
*已连接到本地主机(::1)端口8080(#0)
>选项/HTTP/1.1
>主机:本地主机:8080
>用户代理:curl/7.50.1
>接受:*/*
>来源:http://example.com
>访问控制请求方法:POST
>访问控制请求标头:X-Request-With
> 
如果你不能让它工作,答案似乎是解决iTunes问题的方法。这不会工作,因为我也在使用gorilla mux路由器并设置函数方法,所以我必须单独包装每条路由