我有一个涉及的设置
前端服务器(Node.js,域:localhost:3000)<—>后端(Django,Ajax,域:localhost:8000)
浏览器<-webapp <-Node.js(为应用提供服务)
浏览器(webapp)-> Ajax-> Django(服务ajax POST请求)
现在,我的问题是CORS设置,Web应用程序使用它来对后端服务器进行Ajax调用。在Chrome中,我不断
当凭据标志为true时,不能在Access-Control-Allow-Origin中使用通配符。
在Firefox上也不起作用。
我的Node.js设置是:
var allowCrossDomain = function(req, res, next) {
res.header('Access-Control-Allow-Origin', 'http://localhost:8000/');
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
};
而在Django我使用这个中间件 与此相伴
Webapp发出这样的请求:
$.ajax({
type: "POST",
url: 'http://localhost:8000/blah',
data: {},
xhrFields: {
withCredentials: true
},
crossDomain: true,
dataType: 'json',
success: successHandler
});
因此,webapp发送的请求标头如下所示:
Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: "Origin, X-Requested-With, Content-Type, Accept"
Access-Control-Allow-Methods: 'GET,PUT,POST,DELETE'
Content-Type: application/json
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Cookie: csrftoken=***; sessionid="***"
这是响应头:
Access-Control-Allow-Headers: Content-Type,*
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST,GET,OPTIONS,PUT,DELETE
Content-Type: application/json
我哪里错了?
编辑1:我一直在使用chrome --disable-web-security
,但是现在希望事情能够实际进行。
编辑2:答案:
因此,为我解决的django-cors-headers
配置:
CORS_ORIGIN_ALLOW_ALL = False
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_WHITELIST = (
'http://localhost:3000' # Here was the problem indeed and it has to be http://localhost:3000, not http://localhost:3000/
)
这是安全的一部分,你不能这样做。如果要允许凭据,则Access-Control-Allow-Origin
不得使用*
。你将必须指定确切的协议+域+端口。供参考,请参阅以下问题:
http://localhost:3000
或http://localhost:8000
作为allow origin标头。我的应用程序在java web应用程序中执行一些REST请求。这些请求都是CORS请求,所以浏览器每次都要在实际选项之前执行选项预置。每个请求都类似于 对于谷歌chrome来说,请求是ok的,内容就会显示出来。
Response.AddHeader(“Access-Control-Allow-Origin”,“*”)是如何实现的;行设置多个标题时,包括,但没有当我删除它?
问题内容: 我继承了一个相当基本的站点,该站点提供数据并处理一些套接字连接。它使用iisnode作为桥在IIS后面运行NodeJS。从“为正常页面提供”的角度来看,一切都很好。 问题的部分原因是,与服务器的实际连接来自桌面客户端,在桌面客户端中,内容是通过其他应用程序作为小工具加载的,还可能来自网络,移动设备等可能发生变化和变化的部分,例如- 客户端域数量未知。 我已经将Access-Contro
我正试图将我电子应用程序转换为全网。当我从我的本地主机运行应用程序时,我得到以下错误: 加载https://agrt.herokuapp.com/login失败:对飞行前请求的响应没有通过访问控制检查:当请求的凭据模式为“include”时,响应中的“access-control-allog-origin”标头的值不能是通配符“*”。因此,不允许访问源'http://localhost:4200'
我从ASP.NET表单中调用这个函数,在调用Ajax时在firebug控制台中得到以下错误。 跨源请求被阻止:同一源策略不允许读取http://anotherdomain/test.json上的远程资源。(原因:CORS标头“Access-Control-Allow-Origin”丢失)。 我做了其他的方法,但仍然找不到解决办法。 注意:我没有服务器权限进行服务器端(API/URL)更改。
该应用程序正在编译和从服务器获取数据。但是只有socket.io不工作,我得到以下错误: localhost/:1未能加载http://localhost:3000/socket.io/?eio=3&transport=polling&t=mephatn:当请求的凭据模式为“include”时,响应中“access-control-allog-origin”标头的值不能是通配符“*”。因此,不允许