Chrome在iframe的ajax请求中没有添加头信息,而Firefox可以。

3
我有这样一种情况,我从iframe发送ajax请求到与原始页面相同的域,此Iframe从同一域加载。假设,原始页面地址为http://server/client,而iframe src为http://server/client/addin1/view.html
从Iframe中,我发出初始xhr请求到api:POST http://server/api/connect,它返回201,响应头中带有token和cookie。
现在我打电话给不同的api方法,比如说,GET http://server/api/status,但在这种情况下,我添加了token标头,并且我假设浏览器将包括接收到的cookie - 它是HttpOnly的,我的xhr有withCredentials: true。
神奇的是:在FF中它正常工作,同时设置并发送令牌和cookie,在Chrome中,令牌标头未被添加,也未发送cookie。我已经验证,在两种情况下xhr.setRequestHeader(...)都被调用,并且为了100%确定,我已经使用wireshark验证实际发送了什么内容。
对于Chrome和FF行为不同的原因,您有任何想法吗?也许我错过了简单的东西。
谢谢, Łukasz

你解决了这个问题吗? - seebiscuit
嗨,实际上并不是这样,但现在我又重新检查了一遍问题,结果发现,在我的电脑上仍然无法正常工作,但在其他两台电脑上使用Chrome(相同的Chrome版本)可以正常工作...所以仍然没有头绪,但可能不是Chrome的问题。 - Łukasz Zwierko
1个回答

1
我遇到了与你类似的问题,我能够通过阅读这篇MDN文章CORS (MDN)并查看带凭据的请求部分来解决我的CORS问题。在那里,你会发现需要设置xhr选项withCredentials。以下是他们使用的示例:
var invocation = new XMLHttpRequest();
var url = 'http://bar.other/resources/credentialed-content/';

function callOtherDomain(){
  if(invocation) {
    invocation.open('GET', url, true);
    invocation.withCredentials = true;
    invocation.onreadystatechange = handler; // Needs to be implemented
    invocation.send(); 
  }
}

希望这有所帮助!

嗨,谢谢你的建议,但那不是问题所在(已经双重检查了标志位)。再次强调,这只是我的电脑上Chrome的问题,因为Firefox可以正常工作,其他电脑上的Chrome也可以正常工作。 - Łukasz Zwierko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接