Есть ли способ обойти Access-Control-Allow-Origin для разработки на моем собственном сервере?


Я получаю эту ошибку JavaScript

С XMLHttpRequest не может загрузить http://foo.bar.no/API/map_tools/clean_addresses/check. Происхождение http://foo.bar.no:9294 не допускается по контроля доступа-разрешить-происхождения.

Все это находится в одном домене и на одном сервере, но мой проект JavaScript размещается автономным серверным скриптом, который автоматически связывает JavaScript и его зависимости в один файл.

Как мне пройти через это ограничение, пока я развиваюсь?


Я попытался разрешить моему скрипту JavaScript server подключиться. Это результат скручивания к url:

HTTP/1.1 200 OK
Date: Wed, 11 Jan 2012 09:05:14 GMT
Server: Apache/2.2.16 (Debian)
Access-Control-Allow-Origin: http://foo.bar.no:9294
Vary: Accept-Encoding
Content-Length: 70
Content-Type: text/plain

array(1) {
  ["q"]=>
  string(31) "map_tools/clean_addresses/check"
}

И все же я получаю точно такую же ошибку, как я вставил выше. Почему Chrome все еще отказывается подключаться к проклятому URL, когда это, очевидно, разрешено!?

3 7

3 ответа:

Хорошо, я понял это. Я искал простое и быстрое решение, так как мне нужны только междоменные запросы для целей разработки. Оказывается, мне просто нужно было установить оба

header("Access-Control-Allow-Origin: http://foo.bar.no:9294");
header("Access-Control-Allow-Credentials: true");

В моем PHP скрипте на Apache. Затем в моем коде JavaScript:

# Set jQuery ajax to use 'withCredentials' globally
$.ajaxSetup({
    xhrFields: {
        withCredentials: true
    }
});

И это сделало свое дело

Используйте возможности обратного прокси вашего веб-сервера для прокси http://foo.bar.no/API/map_tools/clean_addresses/check к http://foo.bar.no:9294/API/map_tools/clean_addresses/check .

Поэтому, когда вы используете Apache, вы должны добавить что-то вроде

    <Proxy *>
            Order allow,deny
            allow from all
    </Proxy>

    ProxyPass /API/map_tools/ http://foo.bar.no:9294/API/map_tools/
    ProxyPassReverse /API/map_tools/ http://foo.bar.no:9294/API/map_tools/

В ваш vhost config

Вы можете обойти ограничения безопасности между доменами в chrome, запустив его с флагом --disable-web-security.

Например (на OS X):

open /Applications/Google\ Chrome.app/ --args --disable-web-security