關於跨域的cookie問題
阿新 • • 發佈:2018-06-07
true 博客 分享 quest 瀏覽器 clas 大神 cors 你會
cors下的cookie問題可以參考阮一峰的博客鏈接:http://www.ruanyifeng.com/blog/2016/04/cors.html
但是在實際開發當中還是會遇到點小問題,這裏記錄一下:
在火狐瀏覽器當中,如果xhr.async: false,那麽在火狐瀏覽器下會報錯。
默認的情況下,cors做到跨域之後是沒有供應憑證(cookie、HTTP認證及客戶端SSL證實等)(童鞋們都有牽扯到cookie吧,如果大神的網站一丁點都不占cookie的,此文略過)。重點來了,我們可以使用ajax配置項 withCredentials來解決這個問題,下來分別看看原生xhr和jquery的ajax是怎麽做配置的:
//原生的配置 var xhr = new XMLHttpRequest(); xhr.open(‘GET‘, ‘http://www.xxx.com/api‘); xhr.withCredentials = true;
xhr.async=false; xhr.onload = onLoadHandler; xhr.send();
//jquery ajax配置 $.ajax({ type: "GET", url: ‘data/tree.json‘,
async:false, xhrFields: { withCredentials: true } }).done(function(data) { console.log(data); });
但是!!!!在火狐瀏覽器中你會發現報錯了
也就是說在啟用同步模式的ajax後,在火狐瀏覽器中withCredentials配置是並不起作用的,並且不能正常返回數據,導致我們的請求“失敗!”
解決方案:
jquery配置模式需要修改:
$.ajax({ type: "GET", dataType: "json", url: ‘data/tree.json‘, beforeSend: function(xhr) { xhr.withCredentials = true; } }).done(function(data){ console.log(data); });
將withCredentials配置寫進beforeSend函數,就可以解決了
關於跨域的cookie問題