我在Java中制作了一个非常简单的JSON API。它实际上是一个Project Zomboid mod,它服务于对象坐标。这是我的HTTP处理程序看起来像:CORS头'Access-Control-Allow-Origin'不匹配...但它确实!
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这意味着我需要启用CORS连接创建Widget地图项目。这是通过简单的代码来完成:
PlayerRenderer.prototype.fetchInfo = function() {
$.get("http://127.0.0.1:8000/test", {}, this.displayPoints.bind(this));
}
但我得到这个错误:
warning http://images.michaelsync.net/images/2007/09/warningicon.png Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://127.0.0.1:8000/test . (Reason: CORS header 'Access-Control-Allow-Origin' does not match 'pzmap.crash-override.net').
即使在控制台我可以清楚地看到错误的误导性:
如果我没有讨厌CORS,现在我开始讨厌它了。你能告诉我属于允许源头的实际字符串是什么?
标题应具有允许访问内容的站点的主机名。如果你正从'pzmap.crash-override.net'托管的网站加载你的页面,那么它应该可以工作。错误是告诉你标题包含什么,而不是源域是什么。 – Pointy
您可以在请求标题('Origin'和'Referer')中看到我要加载哪个站点。 –
实际上很难在小屏幕上看到这些图像的细节:/ – Pointy