2014-12-10 1 views
0

Я занимаюсь разработкой своего рода пользователем системы слежения, которая работает следующим образом:запрос AJAX не посылает печенье набор из того же домена

1) Веб-мастер добавляет JS скрипт в своем веб-сайте:

<script src="http://example.com/in/tracking.js"></script> 

2) Когда пользователь загружает страницу, то Javascript запрос отправить обратно печенье в ответ:

Set-Cookie:trackid=c1d7fde9cf87a9501cea57cedde97998;Version=1;Comment=;Domain=example.com;Path=/;Max-Age=31556926 

(это в основном просто печенье, которое длится в течение 1 года)

3) tracking.js делает POST XMLHttpRequest, к тому же домену example.com, передавая некоторые параметры:

theAjaxRequest.open("POST","http://example.com/in",true); 
theAjaxRequest.setRequestHeader("Content-type", "multipart/form-data"); 
theAjaxRequest.send(parameters); 

4) Бэкэнд из example.com должен затем прочитать ранее установленного "TrackID" cookie, но вместо этого я не получаю cookies по запросу ... Анализируя запрос POST с помощью инспектора Chrome, я заметил, что в заголовках запросов cookie не передается ни один куки (в то время как первый запрос GET для tracking.js правильно устанавливает cookie через Set -Cookie).

Почему? Сначала я предположил, что это может быть проблема, связанная с политикой одного и того же происхождения; поэтому я включил заголовки CORS на веб-сервере. Нет результатов. Итак, я попытался загрузить tracking.js на веб-сайт в том же домене example.com (скажем, web.example.com). Во всяком случае, никаких результатов снова нет ...

Я что-то пропустил?

ответ

1

https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

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

Строка 7 показывает флаг на XMLHttpRequest, который должен быть установлен для того, чтобы сделать вызов с печеньем, а именно withCredentials логического значения. По умолчанию вызов выполняется без файлов cookie. Поскольку это простой запрос GET, он не предваряется, но браузер отклоняет любой ответ, который не имеет заголовка Access-Control-Allow-Credentials: true, и не делает ответ доступным для вызывающего веб-контента.

Смежные вопросы