Jquery 与IE11的CORS请求
我有一个CORS(跨源资源共享)请求,来自我的登录页面到应用程序站点,位于不同的URL上。我有一个简单的页面I ping来确定用户是否已经登录,如果已经登录,则重定向他们。否则我会显示一个登录页面。我使用jQuery 这在safari、chrome、firefox中非常有效。。。当然不是。据MS称,IE 10及更高版本应支持 我正在使用jquery-2.0.3.min.js 你知道为什么这在IE11中不起作用吗 编辑:它看起来好像部分工作,因为它现在返回一个值{“id”:false}。每次都会发生这种情况,这意味着服务器永远不会获得凭据。我也在发布我的is_logged_页面,我正在使用CodeIgniter框架 编辑:在IE的安全设置下启用“允许跨域数据源”后,我不再收到任何错误消息 我收到的确切错误是: SEC7118:XMLHttpRequest用于所需的跨源资源共享(CORS) 及 提前感谢发现问题 我有一个类似的问题(一般使用CORS,而不是专门使用GWT)。 事实证明,浏览器设置阻止了第三方的访问 cookies(IE10>互联网选项>隐私>高级>第三方) Cookies>接受)。为了解决这个问题,我选中了“自动覆盖” cookie处理、“接受”(第三方cookie)和“始终允许” 会话cookies。“ 安德鲁在这里回答了这个问题:Jquery 与IE11的CORS请求,jquery,cors,internet-explorer-11,Jquery,Cors,Internet Explorer 11,我有一个CORS(跨源资源共享)请求,来自我的登录页面到应用程序站点,位于不同的URL上。我有一个简单的页面I ping来确定用户是否已经登录,如果已经登录,则重定向他们。否则我会显示一个登录页面。我使用jQuery 这在safari、chrome、firefox中非常有效。。。当然不是。据MS称,IE 10及更高版本应支持 我正在使用jquery-2.0.3.min.js 你知道为什么这在IE11中不起作用吗 编辑:它看起来好像部分工作,因为它现在返回一个值{“id”:false}。每次都会发
编辑:(现在我知道要搜索什么了)如果有人遇到这个问题,这个问题也会有帮助 将“跨域访问数据源”的设置更改为“已启用”将关闭IE中的跨域检查,这是非常不安全的。相反,您需要确保目标第三方资源发送一条消息,表明它没有对用户的隐私做可怕的事情。IE10要求服务器除了返回跨域请求的CORS标头外,还返回有效的P3P策略。下面是用于从服务器返回P3P头的示例php代码
$szOrigin=$\u服务器['HTTP\u ORIGIN'];
如果($szOrigin!=null)
{
标题(“访问控制允许原点:$szOrigin”);
标题(“访问控制允许凭据:true”);
标题(“P3P:CP=\“所有独立的数字信号处理器相关的行政控制当前CUSo IVAo IVDo PSA PSD TAI TELo我们的SAMo CNT COM INT NAV ONL PHY PRE PUR UNI\”);
}
经过大量挖掘,我发现我正在使用ajax ping的页面位于internet区域,而我的当前页面位于intranet区域
IE 11为internet站点启用了“受保护模式”,启用该模式后,cookies不会发送到我正在ping的站点,即使它们属于该域
将页面添加到受信任的站点或禁用“受保护模式”解决了问题
请注意,即使启用了“保护模式”,当两个站点都位于internet区域时,也不会发生此问题。我们遇到的问题是,除了其他浏览器外,IE11发送
访问控制请求标头:接受请求,因此必须将“接受”添加到allowedHeaders cors配置中,因为它似乎不是默认spring cors配置的一部分。我有类似的问题,发现axios或jquery都不能与Internet Explorer和飞行前/cors问题一起使用。只有旧的XMLhttpRequest有效。因为在纯XMLhttpRequest中,我们可以这样做:
if (xhttp.readyState == 4 && xhttp.status == 200)
axios和jquery似乎考虑了状态,而不是readyState——它们以某种方式解释了存在cors问题——在IE中,要达到readyState==4需要几秒钟。如果您有“杂项->跨域访问数据源”在Internet->安全选项中设置为disabled?您正在成功重定向的事实让我怀疑您是否需要ajax来完成此操作。事实上,它已设置为disabled。我启用了它,但它仍然不起作用,但现在也没有错误。您的IE缓存中是否有此js的旧版本(在添加“withCredentials”设置之前)(IE喜欢缓存。喜欢它)?我只是在猜。IE也喜欢缓存来自ajax请求的数据。确保使用类似于:$.ajaxSetup({cache:false})的内容。它不再向您提供错误的事实表明ajax成功(或者至少服务器响应并且脚本具有继续的凭据)。服务器输出的响应是什么?编辑:可能是位置。替换东西?试着先用窗口检查代码是否进入成功块。警报(数据)
我查看了P3P,但决定不使用它,因为它不是真正使用的。从Wikipedia>P3P由万维网联盟(W3C)开发,并于2002年4月16日正式推荐。此后不久,开发停止,P3P的实现非常少。Microsoft Internet Explorer是唯一支持P3P的主流浏览器。你说:“为什么我的代码在IE中不起作用?”我说:“因为IE需要P3P。”你说:“但是除了在IE中,P3P并没有真正被使用。”我说:“这是表达我立场的一种非常优雅的方式。”(:是的,如果这是一个更关键的功能,我将实施P3P策略。我会给你答案,因为你在技术上是正确的,这是最好的正确。我在响应标题中添加了P3P,但仍然无法执行。我只能更改“跨域访问数据源”允许它工作!在StackOverflow上提问的正确方法是单击页面右上角的蓝色“提问”按钮。您的问题是:“如何允许使用CORS跨源访问数据?”这可能已经被问过很多次了。是的,这也为我解决了一个类似的问题。在我的例子中,它发送访问控制请求头:content type,accept
这个建议帮助我修复了一个IE11 CORS
public function is_logged_in()
{
$allowed = array(
'http://mysite.net',
'http://www.mysite.net',
'http://www.mysite.com',
);
$url = $_SERVER['HTTP_REFERER'];
$url = substr($url, 0, strpos($url, '/', 8));
if(isset($_SERVER['HTTP_ORIGIN']))
{
if(in_array($_SERVER['HTTP_ORIGIN'], $allowed))
{
$this->output->set_header('Access-Control-Allow-Origin: ' . $_SERVER['HTTP_ORIGIN']);
}
}
else
{
if(in_array($url, $allowed))
{
$this->output->set_header('Access-Control-Allow-Origin: ' . $url);
}
}
$this->output->set_header('Access-Control-Allow-Headers: X-Requested-With');
$this->output->set_header('Access-Control-Allow-Credentials: true');
$this->output->set_header("Access-Control-Expose-Headers: Access-Control-Allow-Origin");
//TODO: Try to detect if this is an ajax request, and disallow it if not.
$data = new stdClass();
$this->load->library("ion_auth");
if($this->ion_auth->logged_in())
{
$data->name = $this->ion_auth->user()->row()->first_name;
$data->id = $this->ion_auth->get_user_id();
} else {
$data->id = false;
}
$this->output->set_output(json_encode($data));
}
if (xhttp.readyState == 4 && xhttp.status == 200)