Иногда, когда я отправляю запросы ajax, я получаю эту ошибку
XMLHttpRequest cannot load http://www.mysite.com/go/submit. Origin http://mysite.com is not allowed by Access-Control-Allow-Origin.
Вот решения, о которых я думал:
* Add the allow origin rule everywhere? * Write .htaccess to always redirect to full url * Use this method http://james.padolsey.com/javascript/cross-domain-requests-with-jquery/
Как мне исправить эту проблему?
Такая же политика происхождения означает, что вы не можете анализировать данные (json, html, image и т. Д.), Которые поступают из другого «источника» (домена, порта), чем ваш.
Обратите внимание, что
Термин «происхождение» определяется с использованием имени домена, протокола прикладного уровня и (в большинстве браузеров) номера порта HTML-документа, запускающего сценарий
Решение состоит в том, чтобы установить на сервере, обслуживающем другие данные, заголовки CORS, явно разрешающие доступ:
Access-Control-Allow-Origin: *
Таким образом, вы должны иметь контроль над сервером, обслуживающим данные, которые вы вставляете, как только вы не просто показываете их.
Несколько косвенное решение – позволить браузеру думать, что есть только одно происхождение, наложив на ваш сервер прокси. На apache вам не нужен .htaccess, но mod_proxy
. Если вы хотите установить такой прокси-сервер, вас может заинтересовать этот вопрос SO (на самом деле вас, вероятно, будет больше интересовать ответ, который помог мне установить такой прокси на одном из моих серверов).
Если вашей единственной проблемой являются люди, набравшие mysite.com вместо http://www.mysite.com, и у вас есть только один сервер, вы можете просто использовать .htaccess, чтобы переписать URL-адрес:
RewriteEngine On RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC] RewriteRule ^(.*)$ http://www.mysite.com/$1 [L,R=301]