Настройка Firefox для включения междоменного запроса Ajax - PullRequest
47 голосов
/ 20 марта 2009

Мне нужно временно разрешить междоменный XMLHttpRequest. Изменение настроек безопасности Firefox, кажется, будет правильным решением. Но я пробовал с это и это , но они не работали. Кто-нибудь смог настроить это раньше? Спасибо.

Ответы [ 11 ]

28 голосов
/ 30 марта 2012

Если вы просто не хотите тратить время на междоменные проблемы во время разработки и тестирования своего приложения, вы можете использовать дополнение Force CORS для FF.

ОБНОВЛЕНИЕ: Кажется, что этот аддон больше не существует. Но есть и другой вариант - это расширение Chrome

21 голосов
/ 05 ноября 2009

Для современных браузеров вы можете попробовать следующий подход:

https://developer.mozilla.org/en/HTTP_access_control

Короче говоря, вам нужно добавить следующее в заголовок ответа SERVER (следующее разрешает доступ из foo.example):

Access-Control-Allow-Origin: http://foo.example
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: X-PINGOTHER
Access-Control-Max-Age: 1728000

Обратите внимание, что X-PINGOTHER - это пользовательский заголовок, который вставляется JavaScript и должен отличаться для разных сайтов.

Если вы хотите, чтобы какой-либо сайт обращался к вашему серверу в Ajax, используйте *.


Edit:

Когда я впервые ответил на вопрос 2009 , я действительно столкнулся с той же проблемой и обошел ее, используя конфигурацию на стороне сервера.

К тому времени на FF или Chrome не было плагинов.

Однако, теперь у нас есть альтернативы, использующие плагин для браузера, пожалуйста, проверьте ответ tsds

9 голосов
/ 20 марта 2009

Вы пытались использовать запрос jQuery ajax ? Начиная с версии 1.3, jQuery поддерживает некоторые типы междоменных запросов ajax.

Цитирование из ссылки выше:

Примечание: все пульты (не на одном домен) запросы должны быть указаны как получить, когда «скрипт» или «JSONP» является dataType (потому что он загружает скрипт используя тег сценария DOM). Параметры Ajax которые требуют объект XMLHttpRequest недоступны для этих запросов. Полные и успешные функции вызывается по завершении, но не получить объект XHR; предыдущая отправка и функции dataFilter не являются называется.

Начиная с jQuery 1.2, вы можете загрузить JSON данные, расположенные в другом домене, если вы указать обратный вызов JSONP, который может быть сделано так: "myurl? callback =?". JQuery автоматически заменяет? с правильным именем метода для вызова, звонить по указанному вами обратному вызову. Или же, если вы установите dataType в «jsonp» обратный вызов будет добавлен автоматически на ваш запрос Ajax.

7 голосов
/ 26 марта 2009

Дело в том, что нет никакого способа «временно» отключить междоменный XMLHttpRequest, если вы можете временно отключить его, то он может быть отключен навсегда. Это довольно распространенная проблема в современном программировании AJAX и чаще всего решается с использованием техники, известной как междоменный сценарий.

Идея заключается в том, что если вы вызываете междоменный скрипт, он возвращает результаты JavaScript (JSON), которые затем передаются функции на вашем конце.

Вот пример кода для иллюстрации того, как он может выглядеть с точки зрения кода JavaScript:

  function request_some_data() {
    var s = "http://my.document.url.com/my_data?p1=v1&p2=v2&callback=myfunc";

      try {
        try{
          document.write("<scr"+"ipt type='text/javascript' src='"+s+"'></scr"+"ipt>");
        } 
        catch(e){
          var x = document.createElement("script");
          x.src = s;
          document.getElementsByTagName("head")[0].appendChild(x);
        }
      }
      catch (e) {
        alert(e.message);
      }
   }

Затем вы определите функцию в своем коде, которая получает данные, а на сервере вы «обрабатываете» случай обратного вызова, вот JavaScript на стороне клиента:

function myfunc(data) {
  alert(data);
}

А на стороне сервера, здесь я привожу пример PHP, но это можно сделать так же легко в Java или любой другой технологии на стороне сервера:

<?php
   if($_GET["callback"]) {
     print($_GET["callback"] . "(");
   }
   /* place your JSON object code/logic here */
   if($_GET["callback"]) {
     print(");");
   }
 ?>

Обратите внимание, что то, что вы генерируете на стороне сервера, в конечном итоге представляет собой некоторый JavaScript, который выполняется на стороне клиента.

2 голосов
/ 15 декабря 2009

Я сталкиваюсь с этим с file://. Я хотел бы отправлять запросы на два сервера из локального файла HTML (испытательного стенда).

Этот конкретный случай не должен вызывать проблем с безопасностью, но только Safari позволяет это.

Вот лучшее обсуждение Я нашел проблему.

2 голосов
/ 20 марта 2009

Я тоже пытался использовать эту вещь UniversalBrowswerRead, и она не работала. Возможно, вы сможете добавить заголовок «allow», но я пока еще не пытался это сделать. Это довольно новое.

Вы можете найти больше информации здесь

1 голос
/ 05 августа 2011

Я использовал Fiddler в качестве прокси. Fiddler перенаправляет локальные вызовы на внешний сервер.

Я настроил Firefox для использования прокси-сервера вручную (порт 12788.0.1 8888). Fiddler перехватывает звонки и перенаправляет их на другой сервер, используя фильтры URL.

1 голос
/ 23 марта 2009

А как насчет использования чего-то вроде mod_proxy? Затем ваш браузер выглядит так, как будто запросы отправляются на тот же сервер, но на самом деле они перенаправляются на другой сервер.

0 голосов
/ 06 мая 2018

Вы можете проверить мое дополнение для Firefox. Это позволяет пересечь домен в последней версии Firefox: https://addons.mozilla.org/en-US/firefox/addon/cross-domain-cors/

0 голосов
/ 15 июля 2016

Чтобы разрешить кросс-домен:

  1. введите about:config
  2. Примите осторожность
  3. введите security.fileuri.strict_origin_policy в строке поиска
  4. изменить на false

Теперь вы можете закрыть вкладку. Обычно вы можете сделать кросс-доменный запрос с помощью этой конфигурации.

Подробнее см. здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...