当您的浏览器执行 AJAX 请求时与托管当前页面的服务器不同,它首先发送一个OPTIONS
HTTP 消息。在该消息中,它发送以下标头:
origin: http://my-web-server.com
后端服务器将响应:
access-control-allow-origin: http://my-web-server.com
但是,当您没有网络服务器时,浏览器就无法输入地址origin
标头。这就是为什么您的浏览器不允许您从本地文件执行任何 AJAX 请求(也许您可以像评论中提到的那样禁用浏览器的 CORS 安全性,但这可能会让您面临恶意网站的风险)。
另外一个选择
如果您更改后端以返回以下标头,您可以告诉您的浏览器允许从本地主机连接到后端:
access-control-allow-origin: https://localhost:8888
而且,您还需要告诉本地主机服务器以 HTTPS 而不是 HTTP 方式为您的页面提供服务。一旦满足这两个条件,CORS 验证就不会失败。
请注意,要启用 HTTPS,您需要拥有 SSL 证书和密钥,可以使用以下命令生成它们:
openssl req -x509 -out localhost.crt -keyout localhost.key \
-newkey rsa:2048 -nodes -sha256 \
-subj '/CN=localhost' -extensions EXT -config <( \
printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")
该命令的来源和更多信息可以在此页面来自 Let's Encrypt https://letsencrypt.org/docs/certificates-for-localhost/.