Javascript CORS收割台&x27;访问控制允许原点';不匹配。。。但它确实‼;

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

我正在用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();
    }
}
我想使用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个小时来解决删除最后一个斜杠符号的问题…:(