2009-03-20 3 views
47

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

+0

Если вам может потребоваться изменение настроек безопасности Firefox, вы не можете использовать сценарий GreaseMonkey? –

+1

Попробуйте в Chrome: http://stackoverflow.com/questions/3102819/disable-same-origin-policy-in-chrome – AgA

+0

Попробуйте включить мой Firefox, чтобы включить кросс-домен с помощью ajax: https: // addons. mozilla.org/en-US/firefox/addon/cross-domain-cors/ –

ответ

21

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

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:

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

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

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

+1

Это отличный ресурс: http://enable-cors.org/ – Booker

+4

Если я правильно понял, это не решает исходную проблему, если вы не можете изменить сервер – Aras

+1

Обратите внимание, что 'Access-Control-Allow-Origin: * 'не будет работать, если вы также хотели бы использовать параметр XCR' withCredentials' для отправки заголовков файлов cookie. В этом случае вам нужно указать конкретный домен. – dmkc

9

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

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

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

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

+0

мы используем это для извлечения json-данных, но это html, который включен в страницу, и это только временное значение, поэтому изменение конфигурации firefox должно быть Простейшая вещь сделать – Pablote

+2

Почему downvote? Использование возможностей кросс-домена в каркасе является разумным ответом на этот вопрос. Тот факт, что HTML был необходим, не упоминался в вопросе, как раз в комментарии к моему отзыву. – tvanfosson

2

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

Вы можете найти более подробную информацию here

1

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

7

В этом случае нет возможности временно отключить междоменный 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, который выполняется на стороне клиента.

+16

''

+4

Конечно, вы можете временно отключить его. Например, запустите Chrome с помощью --disable-web-security. –

+0

@JosephLust, пожалуйста, обратите внимание, что это было задано/немного ответило, прежде чем Chrom широко использовал. – Michael

2

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

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

Вот best discussion Я нашел проблему.

+0

Спасибо! Думаю, я больше не буду тестировать в Chrome. – tomdemuyt

1

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

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

28

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

UPDATE: Кажется, что этого аддона больше не существует. Но есть еще один вариант - это Chrome extension

+9

Силовые щитки великолепны. Стоит упомянуть, что после установки вам нужно щелкнуть мышью view => toolbars => панель надстройки. Затем кнопка cors будет отображаться в правом нижнем клике, чтобы включить ее. Я разархивировал xpi и вижу, что есть функция переключения, когда кнопка была нажата, но никогда не видеть кнопку. – HMR

+5

«Стоит упомянуть, что после установки вам нужно щелкнуть мышью view => toolbars => панель надстройки». Вы, сэр, являются святыми – NcAdams

+6

Кажется, FF удалил его. – shashwat

-1

Ручное редактирование настроек Firefox - это путь, но неудобно, когда вам нужно делать это часто.

Вместо этого вы можете установить надстройку, которая сделает это за вас одним щелчком мыши.

Я использую CORS everywhere, который отлично подходит для меня.

Вот a link to the installer

+0

Ответы, которые только ссылки на другие ресурсы обычно считаются плохими, поскольку они могут меняться со временем. Пожалуйста, добавьте наиболее релевантную часть в самом ответе. – Qirel

0

Чтобы междоменное:

  1. войти about:config
  2. принимают быть осторожным
  3. введите security.fileuri.strict_origin_policy в строке поиска
  4. изменение ложных

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

Для получения более подробной информации см. here.

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

  • Нет связанных вопросов^_^