Хобрук: Ваш путь к мастерству в программировании

Делитесь учетными данными с тегом междоменного скрипта в Firefox

Предположим, я уже авторизовался в домене boo.com и у меня есть такая сессия:

s:x2GYrvxGgmsfFwx7gDbKXmwB.4BDXLpMaSqD9hgeTkBDx3z4TeczJeC50gnrH5bc+kWU

Я хочу добавить тег script в домен foo.com, указывает на boo.com:

<script src='http://boo.com/blah.js'></script>

Во всех браузерах, включая Safari и Google Chrome, тег сценария устанавливает значение файла cookie в заголовках HTTP, но не работает в Firefox.

Firefox не устанавливает заголовки файлов cookie, поэтому я получаю ошибку Unauthorized с сервера. В чем проблема?

ОБНОВЛЕНИЕ:

Я включил CORS на стороне сервера, но проблема все еще существует в Firefox:

app.use(function (req, res, next) {
  // Website you wish to allow to connect
  res.setHeader('Access-Control-Allow-Origin', 'http://foo.com');

  // Request methods you wish to allow
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');

  // Request headers you wish to allow
  res.setHeader('Access-Control-Allow-Headers', 'Cookie');

  // Set to true if you need the website to include cookies in the requests sent
  // to the API (e.g. in case you use sessions)
  res.setHeader('Access-Control-Allow-Credentials', true);

  // Pass to next layer of middleware
  next();
});

  • Я воссоздал описанную вами ситуацию, но не смог воспроизвести проблему. 28.06.2014
  • @Quentin Могу ли я узнать вашу версию Firefox? 28.06.2014
  • @Quentin Не могли бы вы сообщить мне network.cookie.thirdparty.sessionOnly значение вашего Firefox? Это true или false? 28.06.2014
  • Это false, но это значение по умолчанию. Однако файл cookie является файлом cookie сеанса, поэтому требование файлов cookie сеанса не имеет значения. 28.06.2014
  • @Quentin В моем случае это файл cookie сеанса. Хорошо, спасибо. Пожалуйста, дайте мне знать, обновите вопрос со скриншотами. 28.06.2014

Ответы:


1

Вот решение:

<script src="http://boo.com/blah.js" crossorigin="anonymous"></script>

Подробнее читайте здесь: http://blog.errorception.com/2012/12/catch-cross-domain-js-errors.html

28.06.2014
  • Этот атрибут позволяет лучше сообщать об ошибках. Кажется, это вообще не касается проблемы в вопросе. 28.06.2014
  • @Quentin Квентин, я думаю, что ответ немного неполный, я также должен установить заголовок Access-Control-Allow-Origin: * в заголовках ответов. Что вы думаете? 28.06.2014
  • @AfshinMehrabani — это не неполно, это совершенно неправильно. Установка заголовков CORS не поможет, это не нарушение политики того же происхождения, и вы не используете XMLHttpRequest. 28.06.2014
  • @Квентин Странно. Вы читали этот пост: blog.errorception.com/ 2012/12/ 28.06.2014
  • @AfshinMehrabani — Да, видел. Посмотрите на первый абзац этой записи в блоге. Атрибут предназначен для предоставления более подробных объектов ошибок при возникновении исключения. Это не имеет ничего общего с разрешением файлов cookie. Слово cookie вообще не используется на этой странице и не используется в ссылке спецификация атрибута. 28.06.2014

  • 2

    Я нашел проблему. Поскольку мой Firefox не принимает сторонние файлы cookie, тег script и все другие HTTP-запросы из другого домена не используют файлы cookie.

    Вот настройки в Firefox

    До этого вариант был ‹code›Никогда‹/code›

    29.06.2014
  • @Квентин Спасибо за подсказку. 29.06.2014
  • Новые материалы

    Тег скрипта в вашем HTML-документе
    Вековые дебаты среди сообщества разработчиков, таких как страны союзников и коммунисты времен Второй мировой войны, все еще продолжаются до сегодняшнего дня о том, где лучше всего разместить..

    Введение в Машинное обучение Azure
    Машинное обучение Azure (AML) — это облачная служба машинного обучения, которая позволяет быстро и легко создавать, обучать и развертывать модели машинного обучения. Он предоставляет ряд..

    Обработка ошибок Javascript
    попробовать / поймать / наконец / бросить Обработка ошибок Javascript может помочь отладить код. Это отличный инструмент для понимания и соответствия. Это может быть не самый веселый пост, но,..

    Лучшие и необходимые инструменты внешнего интерфейса
    Интернет полон различных инструментов программирования, которые помогают современному разработчику делать вещи быстрее и качественнее, чем когда-либо прежде. Если вы наткнулись на эту статью, вы,..

    Ограничения длины, которые вы должны знать как веб-разработчик
    В коде заголовок веб-страницы определяется тегом title, который появляется в верхней части html-документа внутри тега head. Теоретически содержимое тега title может быть любым, если вы его..

    Написание собственного кода Java во Flutter для Android
    Реализация Java в приложениях Flutter Flutter имеет богатый набор пакетов и виджетов. Вы можете добиться большинства вещей, используя богатый пул виджетов, который предлагает Flutter, или..

    ASCII и Юникод (UTF)
    ASCII (Американский стандартный код обмена информацией). Представление текста с помощью чисел. Первоначально он был разработан для телетайпов, по сути, для обычного текста без форматирования...