2015-07-05 4 views
1

Я делаю вызовы AJAX в том же домене, что и источник. Например, источник - http://foo.com/folder/index.php, а домен в моем вызове AJAX - http://foo.com/folder/finder.php. Так что мой AJAX вызов выглядит поясню, как это:Ошибка доступа-контроля-разрешения-возникновения

var url = "http://foo.com/folder/finder.php?"; 
request = createRequest(); 
request.open("GET", url, true); 
request.onreadystatechange = confirmCall; 
request.send(null); 

В этом случае finder.php дает мне список каталогов назад. request - это глобальный var. Сам вызов AJAX отлично работает.

Не имея проблем с проблемами CORS с разными браузерами на моем компьютере, другие люди получают типичную ошибку CORS Access-Control-Allow-Origin. Странным в этом смысле является то, что они получают эту ошибку не всегда.

Обратите внимание: я краснее большинства соответствующих ссылок на CORS, например MDM. Все они относятся к перекрестным вызовам, поскольку это проблема.

Но я defenetly не звоню на перекрестные домены. Или я что-то наблюдаю? Пожалуйста, может ли кто-нибудь помочь мне по этой проблеме, имеющей ту же проблему?

+0

У вас есть заголовок ('Access-Control-Allow-Origin: *'); 'в верхней части файла PHP? @Ben – Varun

+0

Я не уверен, что если бы isse были запросами от http до https или наоборот, или если некоторые пользователи используют www.foo.com, и он пытается запросить у foo.com. Возможно, стоит взглянуть на это. –

+2

Вы пытались использовать относительную ссылку вместо полного URL-адреса? например. var url = "finder.php"; – som

ответ

1

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

Если ваш сервер принимает и http://www.foo.com/folder/index.php и http://foo.com/folder/index.php (что не редкость), то вы должны быть очень осторожны, о том, как вы запрашиваете ваш Ajax звонков, потому что если кто-то типы http://www.foo.com/folder/index.php в строку браузера, так что это URL, используемое для веба страницу, но тогда ваши запросы Ajax отправятся в http://foo.com/folder/finder.php, тогда браузер будет жаловаться, что http://foo.com - это не то же самое происхождение, что и http://www.foo.com, и он откажется от вызова Ajax для целей перекрестного происхождения.

Есть несколько способов исправить это. Во-первых, вы можете исправить его на стороне сервера путем автоматического перенаправления http://foo.com на http://www.foo.com, поэтому все запросы Ajax поступают от http://www.foo.com, а затем используют этот домен в ваших URL-адресах Ajax.

Или на стороне клиента вы можете сделать все ваши URL-адреса относительными для домена, чтобы они автоматически использовали любой домен, используемый веб-страницей. Итак, вместо того, чтобы запрашивать ваш URL Ajax как http://foo.com/folder/finder.php?, вы должны использовать /folder/finder.php?. Браузер автоматически будет использовать тот же домен, с которого загружается веб-страница, и, следовательно, не имеет проблемы с перекрестным происхождением.

+0

Я принял ваш ответ, все же мне любопытно. Не лучше ли использовать только «относительные пути» в вызовах Ajax при совершении вызовов в тот же домен? Или есть другие ловушки, связанные с «относительными путями»? – Ben

+0

@Ben - да, лучше использовать пути без домена для запросов, предназначенных для перехода в тот же домен, что и страница. Он также решает проблемы с https. Также лучше настроить ваш сервер, чтобы у вас не было нескольких доменов, обслуживающих одну и ту же страницу (автоматическое переключение между ними), потому что это помогает в SEO и предотвращает эту проблему между доменами. – jfriend00

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