MobileSafari не будет отправлять файлы cookie, установленные с помощью CORS
У меня есть страница, загружающаяся в MobileSafari, которая общалась с другим сервером через CORS.
В настольных браузерах (проверенных Chrome и Safari) я могу войти в систему, получить файл cookie сеанса и отправить этот файл cookie сеанса обратно для последующих запросов, чтобы я мог проходить проверку подлинности при всех вызовах API.
Однако, когда я вхожу через Mobile Safari, cookieне получать обратно на последующие запросы.
Я использую Charles Proxy, чтобы шпионить за происходящим, и он говорит мне:
POST https://myremoteserver.com/sessions.json
передает мою регистрационную информациюЭто успешно, и ответ получен с действительнымSet-Cookie
заголовок.GET https://myremoteserver.com/checkout.json
запрашивается, безCookie
заголовок запроса.Сервер отвечает, как будто я не вошел в систему.Я использую этот фрагмент сZepto.js
чтобы убедиться, чтоwithCredentials: true
правильно настроен на объекте XHR. (простите за кофейный текст)
# Add withCredentials:true to the xhr object to send the remote server our cookies.
xhrFactory = $.ajaxSettings.xhr
$.ajaxSettings.xhr = ->
xhr = xhrFactory.apply(this, arguments)
xhr.withCredentials = yes
xhr
И этот фрагмент прекрасно работает в браузерах настольных компьютеров, и до того, как я его добавил, я не смог сохранить сессионные куки в этих браузерах.
Есть ли какая-то особенность в MobileSafari, которая мешает этому работать как настольные браузеры? Почему это не работает так же?
Редактировать!
вот моя настройка заголовков CORS в моем приложении rails 2.3, я думаю, что это довольно стандартная вещь
def add_cors_headers
if valid_cors_domain
headers['Access-Control-Allow-Origin'] = request.headers['HTTP_ORIGIN']
headers['Access-Control-Expose-Headers'] = 'ETag'
headers['Access-Control-Allow-Methods'] = 'GET, POST, PATCH, PUT, DELETE, OPTIONS, HEAD'
headers['Access-Control-Allow-Headers'] = '*,x-requested-with,Content-Type,If-Modified-Since,If-None-Match'
headers['Access-Control-Allow-Credentials'] = 'true'
headers['Access-Control-Max-Age'] = '86400'
end
end
Также сегодня настольный Safari на Mountain Lion начал не отправлять cookie, ведя себя так же, как MobileSafari. Я не совсем уверен, была ли моя оценка вчера неточной, или, возможно, Apple просто троллила меня ...
Также это может повлиять на использованиеhttps://
на удаленном URL?