Javascript CORS收割台&x27;访问控制允许原点';不匹配。。。但它确实‼;
我正在用Java制作一个非常简单的JSON API。它实际上是一个项目Zomboid mod,提供对象坐标。这是我的HTTP处理程序的外观:Javascript CORS收割台&x27;访问控制允许原点';不匹配。。。但它确实‼;,javascript,http-headers,cors,firebug,Javascript,Http Headers,Cors,Firebug,我正在用Java制作一个非常简单的JSON API。它实际上是一个项目Zomboid mod,提供对象坐标。这是我的HTTP处理程序的外观: public class JSONZomboid implements HttpHandler { @Override public void handle(HttpExchange t) throws IOException { // HEADERS Headers headers = t.getRespo
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();
}
}
我想使用userscript将它加载到项目Zomboid map项目中,这意味着我需要启用CORS连接。这是通过简单的代码实现的:
PlayerRenderer.prototype.fetchInfo = function() {
$.get("http://127.0.0.1:8000/test", {}, this.displayPoints.bind(this));
}
但我得到了这个错误:
警告:已阻止跨源请求:同一源策略不允许在处读取远程资源。(原因:CORS标头“访问控制允许来源”与“pzmap.crash override.net”不匹配)
即使在控制台中,我也可以清楚地看到错误具有误导性:
如果我还不讨厌CORS,我现在就开始讨厌它了。您能告诉我allow origin标头中的实际字符串是什么吗?上面的注释#1是正确的:CORS需要访问控制allow origin标头与客户端的原始请求相匹配(用于端到端SSL体验)。因此,在这种情况下,请确保在访问控制允许源标题中设置了pzmap.crash-override.net
注二:
1-尽管您可以在线阅读,但nginx目前要求将多个条目列为单独的行,a la:
添加_头访问控制允许原点“”;
添加_头访问控制允许原点“”
2-另外,尽管你可能在网上看到,使用通配符是不合适的。并非所有的客户端(也就是浏览器)都允许这样做。我花了好几个小时来解决这个问题,发现我在
源代码的末尾加了一个正斜杠:https://foo.com/
,当它应该是https://foo.com
。(谈论一个重要的面部掌心时刻!)
My(正在工作)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());
实际的问题是访问控制允许源站
头应该包括协议,而不仅仅是主机名。如果web浏览器只是在错误消息中包含这一部分就更好了
因此,在上述情况下,请执行以下操作:
headers.set("Access-Control-Allow-Origin", "http://pzmap.crash-override.net");
标题应具有允许访问内容的站点的主机名。如果您是从托管在pzmap.crash override.net
的站点加载页面,那么它应该可以工作。错误是告诉你标题包含什么,而不是源域是什么。你可以在请求标题中看到我从哪个站点加载(Origin
和Referer
)。实际上,在小屏幕上很难看到这些图像中的细节:/而且我认为标题值可能需要是一个完整的URI,像http://pzmap.crash-override.net
1评论对我帮助很大!谢谢!!:-)headers.set(“访问控制允许原点“,”);也不起作用,最后花了2个小时来解决删除最后一个斜杠符号的问题…:(