Cors: 当凭据标志为真时,不能在 Access-Control-Allow-Origin 使用通配符

I have a setup involving

Frontend server (Node.js, domain: localhost:3000) <---> Backend (Django, Ajax, domain: localhost:8000)

Browser <-- webapp <-- Node.js (Serve the app)

Browser (webapp) --> Ajax --> Django(Serve ajax POST requests)

Now, my problem here is with CORS setup which the webapp uses to make Ajax calls to the backend server. In chrome, I keep getting

Cannot use wildcard in Access-Control-Allow-Origin when credentials flag is true.

doesn't work on firefox either.

My Node.js setup is:

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();
};

And in Django I'm using this middleware along with this

The webapp makes requests as such:

$.ajax({
    type: "POST",
    url: 'http://localhost:8000/blah',
    data: {},
    xhrFields: {
        withCredentials: true
    },
    crossDomain: true,
    dataType: 'json',
    success: successHandler
});

So, the request headers that the webapp sends looks like:

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="***"

And here's the response header:

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

Where am I going wrong?!

Edit 1: I've been using chrome --disable-web-security, but now want things to actually work.

Edit 2: Answer:

So, solution for me django-cors-headers config:

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/
)

转载于:https://stackoverflow.com/questions/19743396/cors-cannot-use-wildcard-in-access-control-allow-origin-when-credentials-flag-i

csdnceshi78
程序go yeah the point is not the http, it is the / at the end. I suppose omitting http could work, but I've not really worked on this stuff for some years, so don't really know what works now!
一年多之前 回复
weixin_41568126
乱世@小熊 why you say with the http works for you? we all only 'localhost:3000' works.
一年多之前 回复
csdnceshi54
hurriedly% how about the frontend and backend in different PC?
接近 2 年之前 回复
csdnceshi78
程序go yes
接近 2 年之前 回复
csdnceshi54
hurriedly% Do you mean you use develop the frontend and backend in one PC?
接近 2 年之前 回复
csdnceshi60
℡Wang Yan For me it is localhost:3000 without http, like this: CORS_ORIGIN_WHITELIST = ( 'localhost:3000', )
大约 2 年之前 回复
csdnceshi61
derek5. ...I love you...I spent hours debugging it....damn Firefox didn't return any message!
3 年多之前 回复

4个回答

This is a part of security, you cannot do that. If you want to allow credentials then your Access-Control-Allow-Origin must not use *. You will have to specify the exact protocol + domain + port. For reference see these questions :

  1. Access-Control-Allow-Origin wildcard subdomains, ports and protocols
  2. Cross Origin Resource Sharing with Credentials

Besides * is too permissive and would defeat use of credentials. So set http://localhost:3000 or http://localhost:8000 as the allow origin header.

csdnceshi75
衫裤跑路 a man in the middle attack would cause one to send credentials to any (*) server
一年多之前 回复
csdnceshi73
喵-见缝插针 Is it possible to provide localhost of a different computer than the server? I got this error: "The 'Access-Control-Allow-Origin' header has a value 'localhost:3000' that is not equal to the supplied origin. Origin 'localhost:3000' is therefore not allowed access."
大约 2 年之前 回复
csdnceshi71
Memor.の Ok, so how exactly does the server know whether or not it should send "*"?
接近 3 年之前 回复
csdnceshi65
larry*wei What is the "exact domain" if the request comes from mobile device, like it can happen with Cordova?
大约 3 年之前 回复
csdnceshi79
python小菜 Could you explain "Besides * is too permissive and would defeat use of credentials."?
大约 3 年之前 回复
csdnceshi56
lrony* What if I'm getting the same error message but there is no Access-Control-Allow-Headers in the response?
接近 4 年之前 回复
csdnceshi50
三生石@ You can give a list of domains. Related question: stackoverflow.com/questions/1653308/…
接近 5 年之前 回复
csdnceshi78
程序go But what if there's more than one domain?
接近 5 年之前 回复

If you are using express you can use the cors package to allow CORS like so instead of writing your middleware;

var express = require('express')
, cors = require('cors')
, app = express();

app.use(cors());

app.get(function(req,res){ 
  res.send('hello');
});
weixin_41568110
七度&光 Thanks for update.
大约 2 年之前 回复
csdnceshi80
胖鸭 - that url is no more in use - find the following working url https://github.com/expressjs/cors
大约 2 年之前 回复
csdnceshi78
程序go Thanks Mate!
2 年多之前 回复
weixin_41568110
七度&光 After reading this documentation: github.com/expressjs/corsuse i using this config: app.use(cors({credentials: true, origin: 'localhost:3001'})); is working for me.
3 年多之前 回复
csdnceshi60
℡Wang Yan BTW, I was using django-cors-headers, but things were not working, so I coupled it with a custom middleware as well.
接近 6 年之前 回复
csdnceshi60
℡Wang Yan Yeah man, tried that before to no avail, had CORS_ORIGIN_ALLOW_ALL = True, CORS_ORIGIN_WHITELIST = ( 'localhost' ) and CORS_ALLOW_CREDENTIALS = True I get these headers: Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: http://localhost3000/ Access-Control-Allow-Methods: POST,GET,OPTIONS,PUT,DELETE Content-Type: application/json
接近 6 年之前 回复
csdnceshi56
lrony* So you have two Django middlewares ? I would only use django-cors-header app. Make sure you add localhost to CORS_ORIGIN_WHITELIST setting and set CORS_ALLOW_CREDENTIALS to True
接近 6 年之前 回复
csdnceshi60
℡Wang Yan Woops, forgot to mention, I'm using that as well!
接近 6 年之前 回复
csdnceshi56
lrony* You might want to look into this Django CORS middleware that is tested.
接近 6 年之前 回复
csdnceshi60
℡Wang Yan Ah, now that's more convenient, however, the result's the same :( BTW, I'm using app.use(cors({credentials: true}));
接近 6 年之前 回复

If you are using CORS middleware and you want to send withCredential boolean true, you can configure CORS like this:

var cors = require('cors');    
app.use(cors({credentials: true, origin: 'http://localhost:3000'}));
csdnceshi54
hurriedly% Happy that it helped :)
接近 2 年之前 回复
weixin_41568208
北城已荒凉 This is the configuration I was missing. TK
接近 2 年之前 回复

try it:

const cors = require('cors')

const corsOptions = {
    origin: 'http://localhost:4200',
    credentials: true,

}
app.use(cors(corsOptions));
csdnceshi73
喵-见缝插针 works with angular cli e.g
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
TOMCAT 跨域 CORS Access-Control-Allow-Origin cors-filter
跨域 CORS Access-Control-Allow-Origin cors-filter-2.6.jar java-property-utils-1.9.1.jar
当设置mdichild为真时!
打开这个窗体,窗体在初始位置处 rn关闭,再打开,它就相对于初始位置相应的向下错位...rn再关闭,再打开,它又相应的向下错位...rn1.这是怎么回事...rn2.能不能让它不错位...rn3.能不能向打开显示在屏幕中心那样...(设置mdichild为真时,startupposition属性无效)
实测 CORS 跨域访问之 Access-Control-Allow-Origin 多域名设置
通过 Windows 与虚拟机 Linux 的交互,实现 CORS 跨域访问,并在响应头的 Access-Control-Allow-Origin 中成功实现允许多个域名跨域访问。最后给出注意事项。
加载图层报错“CORS 头 'Access-Control-Allow-Origin' ,解决办法
加载Featurelayer,报错“CORS 头 'Access-Control-Allow-Origin' 不匹配 'http://localhost:81'”,查了下原因,应该是没有设置代理导致的原因 在加载图层前加入下面这句话 esri.config.defaults.io.corsDetection=false; 图层可以被加载上而不报错了。 并不是很清楚问
Cors跨域请求,配置Access-Control-Allow-Origin:"*",无效解决方案
由于应用需要跨域请求数据,博主在JDK8、Tomcat7.0的cors可以配置Access-Control-Allow-Origin:"*",但是我按照文档配置以后却没有生效,一度怀疑是tomcat或者jdk的问题,最后想起来web.xml是按照从前往后的顺序加载的。解决方案:是filter位置的问题,你把整个放到第一个filter的位置就可以了。给出web.xml: <web-app
已被CORS策略阻止:请求的资源上没有'Access-Control-Allow-Origin'标头 (使用Access-Control-Allow-Origin解决跨域)
问题:已被CORS策略阻止:请求的资源上没有'Access-Control-Allow-Origin'标头(跨域请求失败) 解决方法:使用过滤器设置Access-Control-Allow-Origin解决跨域请求 第一步:创建过滤器 package com.ljw.filter; import java.io.IOException; import javax.servlet....
No 'Access-Control-Allow-Origin'
XMLHttpRequest cannot load ''. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin ' ' is therefore not allowed access. rn出现这样的问题 怎么解决
Access-Control-Allow-Origin
谷歌浏览器扩展程序一键解决本地开发跨域问题,让你不用乱mock数据,Access-Control-Allow-Origin工具包
您的凭据不工作
win10系统远程桌面弄了半天,就是一直显示“您的凭据不工作”,试了各种方法,包括之前写的一篇博客中的四种方法,但就是不行,后来无意见又一次尝试,找到了方法,如下图: 第一步设置: 第二步设置: 就这样就行了,打完收工! ...
远程桌面-【凭据不工作】
远程桌面可能会出现系统提示“您的凭据不工作”。 问题现象是:远程主机已经开启了远程桌面,总是提示“您的凭证不工作”的情况,实际远程的用户名和密码都是正常的。 工具/原料 •Win8.1系统 方法一:组策略编辑器设置身份验证 1.打开组策略编辑器 •快捷键【WIN+X】—&gt;【运行】—&gt;【输入gpedit.msc】,打开注册表编辑器 ...
当条件为真时自动显示控件上的ToolTip
偶做了一个简单的仓库管理程序。想实现这样的功能:当数据库里有某项值底于库存下限时在某控件(如Button)上自动显示ToolTip的值。rn请大家指点如何实现。
程序怎么不能在真机上运行
请问一下在netbeans里面可以运行的程序在真机上为什么直接成了错误的程序了?rn(那个程序还没做完,有些预留接口没有实现),机型的问题还是什么,我实在诺基亚rn6300上实验的。
当系统不查看隐藏文件时,能不能在TOpenDialog看到?
-
nginx 解决access-control-allow-origin CORS跨域安全访问问题及秘钥文件的配置
 利用nginx实现https访问,同时添加秘钥和和防止跨站访问,这里我只修改了一些默认的参数, vi nginx.conf server { listen 443 default_server ssl; # 打开https的端口号,启用https的443端口 server_name www.a.com; # 服务器的...
shell '%'通配符和 '#' 通配符的使用
%通配符从右向左进行匹配,%%表示贪婪匹配。 例如, {VAR%.* } 表示。从{VAR%.* } 表示。从VAR中删除位于 % 右侧的通配符所匹配的字符串,通配符从右向左进行匹配。url=”www.1987.name”echo ${url%.} #移除 . 所匹配的最右边的内容。 www.1987echo ${url%%.} #将从右边开始一直匹配到最左边的 . 移除,贪婪操作符。 ww
分页时错误:当 AllowPaging 设置为真并且选定的数据源不实现 ICollection 时,AllowCustomPaging 必须为真,并且 ID 为 dgrdstor 的 Dat
当 AllowPaging 设置为真并且选定的数据源不实现 ICollection 时,AllowCustomPaging 必须为真,并且 ID 为 dgrdstor 的 DataGrid 必须设置 VirtualItemCountrnrn我没有做自定义分页呀?
连接SQL时 数据库标志为suspect
连接SQL时 数据库标志为suspect ,我修复后仍有些表出错,出错提示为:rn服务器: 消息 8909,级别 16,状态 1,行 1rn表错误: 对象 ID 0,索引 ID 0,页 ID (1:7625)。页首结构中的 PageId = (0:0)。rn服务器: 消息 8909,级别 16,状态 1,行 1rn表错误: 对象 ID 0,索引 ID 0,页 ID (1:7626)。页首结构中的 PageId = (0:0)。rn服务器: 消息 8909,级别 16,状态 1,行 1rn表错误: 对象 ID 0,索引 ID 0,页 ID (1:7688)。页首结构中的 PageId = (0:0)。rn'isseatv3' 的 DBCC 结果。rnCHECKDB 发现了 0 个分配错误和 3 个一致性错误,这些错误并不与任何单个的对象相关联。rn'sysobjects' 的 DBCC 结果。rn服务器: 消息 8928,级别 16,状态 1,行 1rn对象 ID 1589580701,索引 ID 0: 未能处理页 (1:7688)。详细信息请参阅其它错误。rn服务器: 消息 8977,级别 16,状态 1,行 1rn表错误: 对象 ID 1621580815,索引 ID 1。未遇到页 (1:7619) 的父节点。rn服务器: 消息 8977,级别 16,状态 1,行 1rn表错误: 对象 ID 1621580815,索引 ID 1。未遇到页 (1:7620) 的父节点。rn服务器: 消息 8977,级别 16,状态 1,行 1rn表错误: 对象 ID 1621580815,索引 ID 1。未遇到页 (1:7621) 的父节点。rn服务器: 消息 8934,级别 16,状态 1,行 1rn表错误: 对象 ID 1621580815,索引 ID 1。页 (1:7622) 上的高键值(级别 0)不小于下一页的父代 (0:1) 槽 0 中的低键值。(下一页为 (1:7619)。)rn服务器: 消息 8928,级别 16,状态 1,行 1rn对象 ID 1653580929,索引 ID 0: 未能处理页 (1:7625)。详细信息请参阅其它错误。rn服务器: 消息 8928,级别 16,状态 1,行 1rn对象 ID 1653580929,索引 ID 0: 未能处理页 (1:7626)。详细信息请参阅其它错误。rn对象 'cybr_up_checkout_detail' 有 21843 行,这些行位于 313 页中。rnCHECKDB 发现了 0 个分配错误和 1 个一致性错误(在表 'cybr_up_checkout_detail' 中,该表的对象 ID 为 1589580701)。rn'cybr_up_checkout_gift' 的 DBCC 结果。rn对象 'cybr_up_checkout_gift' 有 0 行,这些行位于 0 页中。rn'cybr_up_checkout_master' 的 DBCC 结果。rn对象 'cybr_up_checkout_master' 有 21530 行,这些行位于 498 页中。rnCHECKDB 发现了 0 个分配错误和 4 个一致性错误(在表 'cybr_up_checkout_master' 中,该表的对象 ID 为 1621580815)。rn'cybr_up_orderdish' 的 DBCC 结果。rnrnrn请教各位大侠,这要如何解决?
远程桌面连接提示凭据不工作
百度了好多方法都不可行,特此来请教各位。能够ping通,其他因素都排除了,可就是最后提示一句你的凭据不工作,都做了映射啊啥的都不行了。谢谢!
关于使用CORS时遇到的一些坑
最近在写个人博客的时候,打算用session去保持登录态。但是在使用的时候,发现请求中没有cookie。后来查了一下,是跨域的问题(用了CORS)。 根据同源策略,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源两。而跨域的出现,就是为了解决两个不同源地址之间的通信。其实网页A的请求是已经发出去了的(可以根据开发者工具中的Network看状态码),只不过响应被浏览器给拦截了。 而我单纯的...
非空为真,非零为真
name=input('输入名字:').strip() if name!='': print('已经输入名字') name=input('输入名字:').strip() if name: print('已经输入名字') 这两种if后面的含义是一样的,空的含义很广: (),{},’ ‘,[], None 同理非零即真,显示的是数字类型,数字不是零,就是真。...
您的凭据不工作,请输入新凭据
转载自 http://m.blog.csdn.net/article/details?id=47706021  今天上班同事说远程桌面无法使用,然后VNC连接,查看情况,密码是正确的,防火墙也关了,百思不得其解。  上网查询问题,找到一个解决办法,关闭密码保护共享...
== 为假 ===为真
== 为假 ===为真 if ((strpos("abc", "a") == false)==false){ echo 1; } if ((strpos("abc", "a") === false) === false){ echo 2; } 页面输出为 2;
通配符 % 的使用
我看到一条语句,是这样写的:rn...rninner join t_objectaccess w on w.FObjectType = t4.FObjectType And w.FObjectID = t4.FObjectID And w.fgroupid%2=0 rn...rnrn其中 w.fgroupid%2=0 里面 %2 是什么含意呢?起到了什么作用?rn请高手赐教!rn谢谢!
通配符的使用
通配符是一种特殊语句,主要有星号(*)和问号(?),用来模糊搜索文件。当查找文件夹时,可以使用它来代替一个或多个真正字符;当不知道真正字符或者懒得输入完整名字时,常常使用通配符代替一个或多个真正的字符。 SQL 通配符 在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符。 SQL 通配符必须与 LIKE 运算符一起使用。 在 SQL 中,可使用以下通配符: ...
在PB查询时,当前面也放一个通配符时,不出现查询结果
volt_current_string="%"+volt_current_string+"%" rnrndw_1.setfilter("pro_no like '"+volt_current_string+"'") rndw_1.filter() rnrn请问各位,看看我以上语句,当前面也放一个通配符时,不出现查询结果;请各位师傅帮忙指导,非常谢谢!
移动硬盘不能在WIN2003下使用?
我的移动硬盘不能在WIN2003下使用,但在WIN XP下可以使用,请问怎样解决在WIN 2003下使用移动硬盘的情况?rnrn我又向朋友借了一个IBM移动硬盘,但情况相同,在WIN XP下可以使用,在WIN 2003下不能使用,请问,我该怎么办?
当传入数据为空时,该板块不显示
问题描述:在制作产品列表时有的产品下面有红包活动,有的没有,不处理的话会出现如下空白情况: 此时可以在该板块的view处添加如下语句:(当没有数据传入时,不执行该语句) wx:if=&quot;{{item.lineurl.length}}&quot; 显示正常: ...
////当菜单不可见时,GETSUBMENU返回为空,怎么办?
////当菜单不可见时,GETSUBMENU返回为空,怎么办?
SQL查询,当查询条件为空时,数据不显示。
rs.open "select * FROM X where a like '%" &a & "%' and b like '%" &b & "%' and c= '" &a & "' " conn,1,1rnrn3个变量,其中2个用模糊查询,1个用精确查询,当精确查询条件C有值传过来的时候,显示正常。rnrn当C没有值显示的时候,显示为空。请问怎么修改能让C为空的时候,只用参照,A B的条件,当C不为空的时候,参照A,B,C的条件。
当文本框为PassWord时,为什么不显示***呢???
我就做了一个Button,然后点击时,运行TextBox1.Text = "123";时,文本框应该出现***才对啊。可是……我的框怎么是空的啊?什么都没有……
c# 对象转JSON当为null时不转
using System; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace test { class MainClass { public static void Main (string[] args) { EngineScoreSubWord sub = new EngineScoreSubWo
MSFlexGrid不能在delphi下使用??
我用delphi6、win2000,导入MSFlexGrid控件后,可以更改表格颜色及Cols、rows属性,但使用赋值语句时rn msflexgrid1.TextArray[3] := '1234' rn 或msflexgrid1.TextMatrix[2,3] := '12344';rn会出现"无效的参数数目",rn为什么???
当查询出来结果为空时,报表不显示
我用ireport设置的报表,用的SQL语句生成数据,rn当SQL语句查询出数据时,显示正常,rn但当SQL语句查出数据为空时,整个报表都不显示了,这怎么办啊。rnrn还有一个问题,就是我用到了子报表,不知道能不能把子报表的一个变量的值返回到主报表里面来。怎么设置。
当formborder为none时,webbrowser空白不显示
无论是VCL还是FMX都一样,不知如何解决。rnBorder不为None时并不作修改BorderIcons时显示正常,一修改又不行。rnrnprocedure TMain.FormCreate(Sender: TObject);rnbeginrn WebBrowser1.Navigate('http://www.163.com');rnend;
如何判断当rs为空时 不加入计算表达式?
dim dcml,zyf,hkze,zzzfy,zqitafyrndcml = 0rnzyf = 0rnhkze = 0rnzzzfy= 0rnzqitafy = 0rnrnif not isnull(rs("zyf")) then zyf = cdbl(rs("zyf"))rnif not isnull(rs("clyf")) then clyf =cdbl(rs("clyf"))rnif not isnull(rs("hkze")) then hkze = cdbl(rs("hkze"))rnif not isnull(rs("zzzfy")) then zzzfy = cdbl(rs("zzzfy"))rnif not isnull(rs("zqitafy")) then zqitafy = cdbl(rs("zqitafy"))rnrndcml = zyf - clyf - hkze - zzzfy - zqitafy rn当zzzfy 和zqitafy 在数据库中为空时 后面的计算结果错误rnrn我用<%=dcml%> 怎么不行
通配符*的使用
css 通配符 &quot;*&quot; 可以消除浏览器的默认属性,比如:*{margin:0;padding:0;} 但是推荐这样 html,body,div,span,applet,object,iframe,h1,h2,p,a{margin:0;padding:0;} 而不是 *{margin:0;padding:0;} 因为 css 通配符 “*”会将网站内所有元素的默认值重设,这在大型网站会加重...
您的凭据不工作 之前用于连接到******的凭据无法工作。请输入新凭据。
绝对有效: 打开gpedit.msc,执行以下操作: 计算机配置”→“Window设置”→“安全设置”→“本地策略”→“安全选项”→“网络访问:本地账户的共享和安全模型”→设置为“经典-对本地用户进行身份验证,不改变起本来身份”
有关公式为真时隐藏的问题
为了不让其他人修改文章,我把保存按钮的属性设置成公式为真时隐藏,具体公式如下:rn @IsNotMemeber(@UserName;@Author)rn 结果无论是我写的文章还是别人写的文章,我都看不到保存的按钮了。rn 是不是因为不支持中文呢?rn 还是一定要先有作者域什么的才能使用@Author呢?rn 我是刚开始用lotus notes,希望大家能帮帮我。
win-tc不能在win7下使用
今天安装Win-TC工具,一直不能使用;本机Win7 64位; 编译任何程序都出 list index out of bounds(0); 按其说明未装在根目录,安装路径不包括中文;一直出这个错; 此工具是不是不能在Win7下使用;
XMLdocument不能在控制台程序下使用?
我不知道是什么原因,XMLdocument组件不能在控制台程序中使用,总是出现奇怪的错误.如果你不相信的话可以试试.
相关热词 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法