2017-02-10 3 views
1

В настоящее время я пишу спокойный веб-сервер, который я бы хотел протестировать из front-face. Поскольку сервер размещен в другом домене при разработке, мне нужен Access-Control-Allow-Origin: * (я думаю). Я пытался добиться того, чтобы с помощью пакета горилл обработчиков, а именно следующее:Разрешение на использование обработчиков gorilla

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

Теперь при попытке обратиться к серверу, используя следующий завиток:

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"}) 

но это не имело значения. Как я могу это решить?

+0

Если вы не можете заставить его работать, ответ на http://stackoverflow.com/questions/12830095/setting-http-headers-in-golang/24818638 # 24818638, похоже, это способ обойти его – sideshowbarker

+0

, к сожалению, это не сработает, так как я также использую маршрутизатор gorilla mux и устанавливаю методы функции, поэтому мне пришлось бы обернуть каждый маршрут индивидуально – tofiffe

ответ

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 -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 
Смежные вопросы