所以我已經有了這個Go http處理程序,它將一些POST內容存儲到數據存儲中,並在響應中檢索其他一些信息。在後端使用:跨域請求被阻止
func handleMessageQueue(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Access-Control-Allow-Origin", "*")
if r.Method == "POST" {
c := appengine.NewContext(r)
body, _ := ioutil.ReadAll(r.Body)
auth := string(body[:])
r.Body.Close()
q := datastore.NewQuery("Message").Order("-Date")
var msg []Message
key, err := q.GetAll(c, &msg)
if err != nil {
c.Errorf("fetching msg: %v", err)
return
}
w.Header().Set("Content-Type", "application/json")
jsonMsg, err := json.Marshal(msg)
msgstr := string(jsonMsg)
fmt.Fprint(w, msgstr)
return
}
}
在我的Firefox OS的應用程序使用:
var message = "content";
request = new XMLHttpRequest();
request.open('POST', 'http://localhost:8080/msgs', true);
request.onload = function() {
if (request.status >= 200 && request.status < 400) {
// Success!
data = JSON.parse(request.responseText);
console.log(data);
} else {
// We reached our target server, but it returned an error
console.log("server error");
}
};
request.onerror = function() {
// There was a connection error of some sort
console.log("connection error");
};
request.send(message);
傳入部分的所有作品一起和這樣。但是,我的回覆被阻止。給我以下信息:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:8080/msgs. This can be fixed by moving the resource to the same domain or enabling CORS.
我嘗試了很多其他的事情,但沒有辦法,我只能從服務器得到響應。但是,當我將Go POST方法更改爲GET並通過瀏覽器訪問該頁面時,我得到了我想要的那麼糟糕的數據。我無法確定哪一方出了問題,爲什麼:Go可能不應該阻止這類請求,但也可能是因爲我的JavaScript是非法的。
對我來說似乎(我不寫這個作爲答案,因爲我不確定)你沒有設置請求上的內容類型。從Mozilla的TFM就這個問題:'如果使用POST向服務器發送數據,則使用HTTP POST請求發送到服務器的數據的內容類型是application/x-www-form-urlencoded,multipart /表單數據或文本/純文本' –