加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ajax – 跨原产地请求被阻止

发布时间:2020-12-16 03:10:36 所属栏目:百科 来源:网络整理
导读:所以我有这个Go http处理程序,将一些POST内容存储到数据存储中,并检索一些其他信息。在后端我用: func handleMessageQueue(w http.ResponseWriter,r *http.Request) { w.Header().Set("Access-Control-Allow-Origin","*") if r.Method == "POST" { c := a
所以我有这个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是非法的。

@Egidius在创建XMLHttpRequest时应该使用
var xhr = new XMLHttpRequest({mozSystem: true});

什么是mozSystem?

mozSystem Boolean:将此标志设置为true允许进行跨站点连接,而不需要服务器选择使用CORS。需要设置mozAnon:true,即不能与发送Cookie或其他用户凭据相结合。这只适用于特权(已审核)的应用程序;它不适用于Firefox中加载的任意网页。

更改你的清单

在您的清单上,不要忘记将此行包含在您的权限中:

"permissions": {
       "systemXHR" : {},}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读