Я делаю Ajax.request
на удаленный сервер PHP в приложении Sencha Touch 2 (завернутый в PhoneGap ).
Ответ от сервера следующий:
XMLHttpRequest не может загрузить http://nqatalog.negroesquisso.pt/login.php . Происхождение
http://localhost:8888
не разрешено Access-Control-Allow-Origin.
Как я могу решить эту проблему?
javascript
ajax
cors
xmlhttprequest
cross-domain
Рикардо
источник
источник
dataType: 'jsonp',
делает свое делоAccess-Control-Allow-Origin
и сообщить об этом как об ошибке.Ответы:
Недавно я написал статью по этому вопросу, Cross Domain AJAX .
Самый простой способ справиться с этим, если у вас есть контроль над отвечающим сервером, это добавить заголовок ответа для:
Это позволит междоменный Ajax . В PHP вы захотите изменить ответ следующим образом:
Вы можете просто поместить
Header set Access-Control-Allow-Origin *
настройку в конфигурацию Apache или в файл htaccess.Следует отметить, что это эффективно отключает защиту CORS, которая, скорее всего, подвергает ваших пользователей атаке . Если вы не знаете, что вам конкретно нужно использовать подстановочный знак, вы не должны его использовать, а вместо этого вы должны внести в белый список ваш конкретный домен:
источник
Если вы не имеете контроля над сервером, вы можете просто добавить этот аргумент для вашей пусковой установки Chrome:
--disable-web-security
.Обратите внимание, что я бы не использовал это для обычного «веб-серфинга». Для справки см. Этот пост: Отключить ту же политику происхождения в Chrome .
Когда вы используете PhoneGap для фактической сборки приложения и загрузки его на устройство, это не будет проблемой.
источник
Если вы используете Apache, просто добавьте:
в вашей конфигурации. Это приведет к тому, что все ответы с вашего веб-сервера будут доступны с любого другого сайта в Интернете. Если вы намерены разрешить использование служб на вашем хосте только определенному серверу, вы можете заменить
*
его URL-адресом исходного сервера:источник
Если у вас есть приложение ASP.NET / ASP.NET MVC , вы можете включить этот заголовок через файл Web.config:
источник
Это был первый вопрос / ответ, который возник у меня при попытке решить ту же проблему с использованием ASP.NET MVC в качестве источника моих данных. Я понимаю, что это не решает вопрос PHP , но это достаточно связано, чтобы быть ценным.
Я использую ASP.NET MVC. Сообщение в блоге от Грега Бранта работало на меня. В конечном итоге вы создаете атрибут,
[HttpHeaderAttribute("Access-Control-Allow-Origin", "*")]
который вы можете добавить к действиям контроллера.Например:
И затем использовать его с:
источник
Так как Мэтт Момбреа подходит для серверной части, вы можете столкнуться с другой проблемой - отказом из белого списка.
Вы должны настроить свой phonegap.plist. (Я использую старую версию телефонного зазора)
Для кордовы могут быть некоторые изменения в именовании и каталоге. Но шаги должны быть в основном одинаковыми.
Сначала выберите Вспомогательные файлы> PhoneGap.plist
затем в разделе "Внешние хосты"
Добавьте запись со значением, возможно, " http://nqatalog.negroesquisso.pt ", которое я использую * только для целей отладки.
источник
Это может быть удобно для тех, кому нужно исключение для версий реферера как с www, так и без www:
источник
Я дам вам простое решение для этого. В моем случае у меня нет доступа к серверу. В этом случае вы можете изменить политику безопасности в браузере Google Chrome, чтобы разрешить Access-Control-Allow-Origin. Это очень просто:
Простая вставка
"C:\Program Files\Google\Chrome\Application\chrome.exe" --allow-file-access-from-files --disable-web-security
.Расположение может отличаться. Теперь откройте Chrome, нажав на этот ярлык.
источник
Я сталкивался с этим несколько раз при работе с различными API. Часто для быстрого исправления добавьте "& callback =?" до конца строки. Иногда амперсанд должен быть символьным кодом, а иногда "?": "? Callback =?" (см. Использование API Forecast.io с jQuery )
источник
Если вы пишете расширение Chrome и получить эту ошибку, то убедитесь , что вы добавили базовый URL в API, чтобы ваш
manifest.json
«s разрешения блока , например:источник
Это из -за политики того же происхождения . Смотрите больше в Mozilla Developer Network или Википедии .
По сути, в вашем примере вам нужно загружать
http://nqatalog.negroesquisso.pt/login.php
страницу только изnqatalog.negroesquisso.pt
, а не изlocalhost
.источник
если вы находитесь в Apache, просто добавьте файл .htaccess в ваш каталог со следующим содержимым:
источник
В Ruby on Rails вы можете сделать в контроллере:
источник
Вы можете заставить его работать без модификации сервера, добавив заголовок
Access-Control-Allow-Origin: *
в ответы HTTP OPTIONS.В Chrome используйте это расширение . Если вы находитесь на Mozilla, проверьте этот ответ .
источник
Если вы получите это в Angular.js, то убедитесь, что вы экранировали свой номер порта следующим образом:
Смотрите здесь для получения дополнительной информации об этом.
источник
У нас также есть такая же проблема с приложением phonegap, протестированным в Chrome. Одна машина Windows, которую мы используем ниже пакетного файла каждый день перед открытием Chrome. Помните, что перед запуском вам нужно очистить весь экземпляр Chrome из диспетчера задач, или вы можете выбрать Chrome, чтобы не запускать его в фоновом режиме.
BATCH: (используйте cmd)
источник
В Руби Синатре
для всех или
источник
Когда вы получите запрос, вы можете
чем когда вы должны ответить, пойти с чем-то вроде этого:
источник