使用自定义标头获取请求失败

这是我的 AngularJS 代码(如果我删除 header 选项,它可以正常工作)。


$http.get(env.apiURL()+'/banks', {

    headers: {

        'Authorization': 'Bearer '+localStorageService.get('access_token')

    }

})

这是请求:


OPTIONS /banks HTTP/1.1

Host: localhost:8080

Connection: keep-alive

Access-Control-Request-Method: GET

Origin: http://localhost:8081

User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36

Access-Control-Request-Headers: accept, authorization

Accept: */*

Referer: http://localhost:8081/

Accept-Encoding: gzip,deflate,sdch

Accept-Language: en-US,en;q=0.8,vi;q=0.6

和回应:


HTTP/1.1 404 Not Found

Access-Control-Allow-Headers: Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization

Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE

Access-Control-Allow-Origin: http://localhost:8081

Content-Type: text/plain; charset=utf-8

Date: Mon, 17 Mar 2014 11:05:20 GMT

Content-Length: 19

我添加了Accept和Authorization标头,但请求仍然失败?

大写(我的意思是authorizationvs Authorization)会导致失败吗?如果是,我怎样才能让 AngularJS 停止这样做?


if origin := req.Header.Get("Origin"); origin == "http://localhost:8081" {

    rw.Header().Set("Access-Control-Allow-Origin", origin)

    rw.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE")

    rw.Header().Set("Access-Control-Allow-Headers",

        "Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization")

}

Go 服务器路由代码:


r := mux.NewRouter()

r.HandleFunc("/banks", RetrieveAllBank).Methods("GET")


http.ListenAndServe(":8080", r)


MM们
浏览 207回答 1
1回答

慕妹3146593

好的,这个问题是因为我无法处理“OPTIONS”请求(要使 CORS 浏览器先发送预检 OPTIONS 请求,然后再发送“真实”请求,如果服务器接受)。我只需要修改我的 Go 服务器(见评论):func main() {    r := mux.NewRouter()    r.HandleFunc("/banks", RetrieveAllBank).Methods("GET")    http.ListenAndServe(":8080", &MyServer{r})}type MyServer struct {    r *mux.Router}func (s *IMoneyServer) ServeHTTP(rw http.ResponseWriter, req *http.Request) {    if origin := req.Header.Get("Origin"); origin == "http://localhost:8081" {        rw.Header().Set("Access-Control-Allow-Origin", origin)        rw.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE")        rw.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 req.Method == "OPTIONS" {        return    }    // Lets Gorilla work    s.r.ServeHTTP(rw, req)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go