【发布时间】:2015-10-03 10:27:26
【问题描述】:
我正在使用 mux 包并且有这个代码:
func saveConfig(w http.ResponseWriter, r *http.Request) {
if origin := r.Header.Get("Origin"); origin != "" {
w.Header().Set("Access-Control-Allow-Origin", origin)
fmt.Println("Origin: " + origin)
w.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE")
w.Header().Set("Access-Control-Allow-Headers", "Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization")
}
// Stop here if its Preflighted OPTIONS request
if r.Method == "OPTIONS" {
return
}
body, err := ioutil.ReadAll(io.LimitReader(r.Body, 1048576))
if err != nil {
fmt.Println("Error: %s\n", err)
w.WriteHeader(http.StatusInternalServerError)
return
}
fmt.Println("JSON body:" + string(body))
if err := r.Body.Close(); err != nil {
panic(err)
}
w.WriteHeader(http.StatusCreated)
}
它在 IE 上运行良好,但 chrome preflight 正在发送一个 OPTIONS 方法,我收到了 404 响应。任何帮助将不胜感激。
【问题讨论】:
-
404 可能意味着它没有找到处理程序。检查请求的路径是否与您的处理程序的路由匹配。
-
Request Header:Accept:*/* Accept-Encoding:gzip, deflate, sdch Accept-Language:en-US,en;q=0.8 Access-Control-Request-Headers:accept, content-类型 Access-Control-Request-Method:POST Connection:keep-alive Host:localhost:8080 Origin:localhost:63342Referer:localhost:63342/Main/app User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML,像壁虎)Chrome/42.0.2311.90 Safari/537.36
-
显示用于注册路由的代码和从浏览器输入的 URL。此外,使用godoc.org/net/http#MaxBytesReader 代替 io.LimitReader。 io.LimitReader 不会阻止服务器访问整个请求正文。
-
如果我在路由器中将方法从 POST 更改为 OPTIONS,我会收到状态码 200
-
func NewRouter() *mux.Router { router := mux.NewRouter().StrictSlash(true) for _, route := range routes { var handler http.Handler handler = route.HandlerFunc / /handler = commonlibrary.Logger(handler, route.Name) 路由器。方法(路线。方法)。路径(路线。模式)。名称(路线。名称)。 Handler(handler) } 返回路由器 }
标签: http go http-headers cors preflight