【问题标题】:XMLHttpRequest cannot load localhost resource with security check is ChromeXMLHttpRequest 无法通过安全检查加载 localhost 资源是 Chrome
【发布时间】:2016-07-12 20:52:21
【问题描述】:

我在 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。

有没有办法解决这个烦恼?

【问题讨论】:

  • 提供正确的 CORS 标头?
  • 在为本地目录提供服务时如何在 go 中执行此操作?我尝试了其他的东西,比如跨域禁用插件。还是不行。

标签: javascript macos google-chrome go xmlhttprequest


【解决方案1】:

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

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)))
}

这对于生产来说并不安全,但对于本地测试来说已经足够了。

【讨论】:

    猜你喜欢
    • 2017-05-02
    • 2018-01-22
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 2020-12-18
    • 2012-12-22
    • 2019-07-13
    相关资源
    最近更新 更多