我在執行時遇到了一些問題。 我有一個在Golang中編寫的後端和在同一個服務器上的UI(在Angular2中)。通過golang後端執行CORS請求不起作用
我試圖在後端設置CORS處理,但它仍然不起作用,我不明白爲什麼。
這裏是我的代碼:
package main
import (
"log"
"net/http"
"github.com/gorilla/mux"
"github.com/rs/cors"
)
var router *mux.Router
func main() {
router = mux.NewRouter()
HandleFuncEx("/authentication", handleAuthentication)
HandleFuncEx("/callA", handleCallA)
HandleFuncEx("/callB", handleCallB)
HandleFuncEx("/callC", handleCallC)
handler := cors.New(cors.Options{
AllowedOrigins: []string{"*"},
AllowedMethods: []string{"GET", "POST", "PATCH"},
AllowedHeaders: []string{"a_custom_header", "content_type"},
}).Handler(router)
http.ListenAndServe(":8000", handler)
}
func HandleFuncEx(pattern string, handler func(http.ResponseWriter, *http.Request)) {
log.Println("handled function", pattern)
router.HandleFunc(pattern, handler)
}
認證模式正常工作(是第一家由UI調用) 所有其他的呼叫失敗的預檢要求。 爲什麼會發生?
謝謝大家的幫助!
編輯:
這是一種非工作響應頭的一個示例:
HTTP/1.1 200 OK
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
Date: Fri, 07 Apr 2017 08:33:12 GMT
Content-Length: 0
Content-Type: text/plain; charset=utf-8
而這些請求的標頭:
OPTIONS /users HTTP/1.1
Host: /* Removed by my company policy */
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: /* Removed by my company policy */
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36
Access-Control-Request-Headers: access_token
Accept: */*
Referer: /* Removed by my company policy */
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-GB,en;q=0.8,en-US;q=0.6,it;q=0.4,la;q=0.2
你可以分享一個鉻devtools截圖的選項請求失敗,請求發送,響應收到? – mkopriva
在執行實際請求之前,CORS使用OPTIONS謂詞檢查請求是否允許跨域。您必須允許OPTIONS並使用成功代碼(2xx)進行響應。 – Adrian