Tom*_*ica 14 javascript firebug http-headers cors
我在Java中创建了一个非常简单的JSON API.它实际上是一个项目Zomboid mod,它提供对象坐标.这就是我的HTTP处理程序的样子:
public class JSONZomboid implements HttpHandler
{
@Override
public void handle(HttpExchange t) throws IOException {
// HEADERS
Headers headers = t.getResponseHeaders();
headers.set("Content-Type", "text/json");
headers.set("Access-Control-Allow-Origin", "pzmap.crash-override.net");
t.sendResponseHeaders(200,0);
//BODY
OutputStream os = t.getResponseBody();
os.write("{\n".getBytes());
// generate JSON here
os.write("}".getBytes());
os.close();
}
}
Run Code Online (Sandbox Code Playgroud)
我想使用userscript将它加载到Project Zomboid地图项目中,这意味着我需要启用CORS来连接.这是通过简单的代码完成的:
PlayerRenderer.prototype.fetchInfo = function() {
$.get("http://127.0.0.1:8000/test", {}, this.displayPoints.bind(this));
}
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
警告:阻止跨源请求:同源策略不允许在http://127.0.0.1:8000/test上读取远程资源.(原因:CORS标题'Access-Control-Allow-Origin'与'pzmap.crash-override.net'不匹配).
即使在控制台中我也能清楚地看到错误是误导性的:

如果我还没有讨厌CORS,我现在就开始讨厌它了.你能否告诉我allow origin header中的实际字符串是什么?
zer*_*mpl 11
实际问题是Access-Control-Allow-Origin标头应包含协议,而不仅仅是主机名。如果网络浏览器简单地将这部分包含在错误消息中,那就更好了。
所以在上面,做:
headers.set("Access-Control-Allow-Origin", "http://pzmap.crash-override.net");
Run Code Online (Sandbox Code Playgroud)
我与这个相同的问题搏斗了几个小时,发现我在origin:的末尾添加了一个正斜杠https://foo.com/,而它应该是https://foo.com. (谈论一个重要的面部手掌时刻!)
我的(现在正在工作)Express Node.JS 设置:
const express = require('express');
const cors = require('cors');
const app = express();
app.use(cors({
methods: 'GET,POST,PATCH,DELETE,OPTIONS',
optionsSuccessStatus: 200,
origin: 'https://foo.com'
}));
app.options('*', cors());
Run Code Online (Sandbox Code Playgroud)
上面的评论 #1 是正确的:CORS 需要 Access-Control-Allow-Origin 标头来匹配客户端的原始请求(用于端到端 SSL 体验)。因此,在这种情况下,请确保在 Access-Control-Allow-Origin 标头中设置 pzmap.crash-override.net。
两个注意事项:
1- 不管你在网上读到了什么,nginx 目前需要将多个条目列为单独的行,例如:add_header Access-Control-Allow-Origin " https://developers.google.com "; add_header Access-Control-Allow-Origin " https://imasdk.googleapis.com ";
2 - 此外,尽管您可能在网上阅读了一些内容,但使用通配符是不行的。并非所有客户端(即浏览器)都允许它。
| 归档时间: |
|
| 查看次数: |
10633 次 |
| 最近记录: |