英文:
Allowing origins using gorilla handlers
问题
我目前正在编写一个 RESTful Web 服务器,并希望从 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"})
但没有任何改变。我该如何解决这个问题?
英文:
I'm currently writing a restful web server, that I would like to test from angular2 frontend. Since the server is hosted on another domain while developing I need Access-Control-Allow-Origin: *
(I think). I tried to achieve that by using the gorilla handlers package, namely the following:
origins := handlers.AllowedOrigins([]string{"*"})
log.Fatal(http.ListenAndServe(":"+os.Getenv(util.Port),
handlers.LoggingHandler(os.Stdout, handlers.CORS(origins)(router))))
now when trying to request the server using the following 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
I get an OPTIONS request on the server, which returns 403. I have also tried adding headers and allowed methods:
handlers.AllowedHeaders([]string{"X-Requested-With"})
handlers.AllowedMethods([]string{"GET", "POST", "PUT", "OPTIONS"})
but it made no difference. How can I resolve this?
答案1
得分: 2
这是我的翻译:
这对我有效:
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))))
}
在你的curl示例中,X-Requested-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
英文:
This works for me:
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))))
}
The X-Requested-With
is mistyped in your curl example:
$ 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
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论