Кросс-доменный запрос с учетными данными, не работающими в Firefox - PullRequest
2 голосов
/ 08 марта 2012

Я создаю приложение Backbone.js для общения с API, который я тоже создал.

API находится на сайте api.foo.com по адресу web.foo.com

Мне удалось заставить CORS работать с соответствующими полями заголовка в apache

Header set Access-Control-Allow-Origin "http://web.foo.com"
Header set Access-Control-Allow-Methods "GET,PUT,POST,DELETE,OPTIONS"
Header set Access-Control-Allow-Headers Content-Type
Header set Access-Control-Allow-Credentials "true"
Header append Access-Control-Allow-Headers Origin
Header append Access-Control-Allow-Headers Accept
Header append Access-Control-Allow-Headers X-Requested-With

и установив xhrFields на

    f = { withCredentials: true}

    params.xhrFields = f;

    // Make the request, allowing the user to override any Ajax options.
    $.ajax(params);

, все это работает с Chrome.Я собираюсь сделать сообщение для входа в api.foo.com/sessions, получить cookie, а затем сделать еще один запрос к api.foo.com с этим cookie.

К сожалению, когда я перешел на Firefox 10.0.7,это не сработало.С withCredentials, похоже, не удалось jquery подобрать cookie и использовать его.

В отличие от большинства вопросов, связанных с этим в stackoverflow, это не единственный вопрос, мне нужно, чтобы это работало согласованно во всех браузерах (Я еще даже не дошел до IE).

Я использую

Backbone.js 0.9.1 jquery 1.7.1 требует подчеркивания 1.0.7 1.3.1

Работает на

Chrome 17.0.963.65

не работает на firefox 10.0.2

Кто-нибудь может мне помочь?

1 Ответ

2 голосов
/ 12 марта 2012

Просто подумал, что обновлю этот вопрос тем, что я в итоге сделал.У меня такое ощущение, что CORS не так-то просто сделать (из соображений безопасности).Большинство ответов на эту тему сводятся к «Прокси или делают CORS» без особых объяснений того, насколько прост прокси.ниже приведено то, что мне нужно было поместить в файл apache моего веб-сайта, чтобы все воспроизводилось niceley

    ProxyPass /api http://api.foo.com/
    ProxyPassReverse /api http://api.foo.com/

<Location /api>
    Order allow,deny
    Allow from all
</Location>

Для этого требуется любой запрос, отправляемый на web.foo.com/api, apache автоматически передает его через api.фу ком.Это означает, что нет необходимости в каких-либо заголовках CORS, и все файлы cookie работают нормально.

Это также означает, что у вас все еще работает api.foo.com для другого программного обеспечения, не поддерживающего JavaScript для запроса

Это действительно простой способ удовлетворить потребность в CORS-компонентах, отделяя при этом API-интерфейсы от внешних интерфейсов.

...