XMLHttpRequest无法加载localhost资源,安全检查是Chrome

时间:2016-03-25 04:48:52

标签: javascript macos google-chrome go xmlhttprequest

我在OS X 10.11.4上运行了Chrome版本49.0.2623.108(64位)。

从终端:

我跑了:

> ls /tmp
  wtf.jpg

> ps -ef | grep -i chrome | grep -v grep
  <empty line>

退出Chrome后,只需确保没有实例仍在运行。

然后我使用以下参数打开Chrome以跳过原始检查:

> open /Applications/Google\ Chrome.app/ --args --allow-file-access-from-files"

我也尝试过:

> open /Applications/Google\ Chrome.app/ --args --disable-web-security"

现在,我运行简单的go服务器:

package main

import "net/http"

func main() {
    panic(http.ListenAndServe(":8080", http.FileServer(http.Dir("/tmp"))))
}

最后,我将Chrome指向包含此脚本的/ tmp中的本地html5页面:

var req = new XMLHttpRequest();
req.open('GET', "localhost:8080/wtf.jpg");
req.onload = function() { 
  console.log("succeeded");
};
req.onerror = function() {
  Error("Network Error");
};
req.send();

完成此错误:

  

XMLHttpRequest无法加载localhost:8080 / wtf.jpg。交叉起源   请求仅支持协议方案:http,data,chrome,   chrome-extension,https,chrome-extension-resource。

有没有解决这个烦恼的方法?

1 个答案:

答案 0 :(得分:0)

我通过改变两件事来解决这个问题:

1)我将XMLHttpRequest.open中的资格不足"localhost:8080/wtf.jpg"更改为"http://localhost:8080/wtf.jpg"。这解决了Chrome错误消息。

2)我更新了简单的go服务器:

package main

import "net/http"

const PORT = ":8080"

func handler(w http.ResponseWriter, r *http.Request) {
    if r.Method == "OPTIONS" {
        w.Header().Set("Access-Control-Allow-Origin", "http://localhost"+PORT)
    } else {
        http.ServeFile(w, r, "wtf.html")
    }
}

func main() {
    panic(http.ListenAndServe(PORT, http.HandlerFunc(handler)))
}

这对于生产来说不安全,但足以进行本地测试。