document.domain и межсайтовый скриптинг - PullRequest
1 голос
/ 06 декабря 2009

Требуется помощь при отладке.

Страница http://www.freshfaves.com/newfave.html содержит этот код:

<script>
document.domain = 'freshfaves.com';
$(document).ready(function() {
    var dbUrl = 'http://freshfaves.com/';
    var result = '';
    $.ajax({
            type: "POST",
            url: dbUrl,
            data: [], //params,
            async: false,
            dataType: "text",
            success: function(d,status) { result = d; return false; },
            error: function(xmlhttp,errmsg) { result = errmsg; return false; }
    });
    alert('result: '+result);
});
</script>

Насколько я понимаю, межсайтовые ограничения XMLHttpRequest проверяются на основе значения document.domain, и это значение устанавливается равным как действительному суффиксу URL текущей страницы, так и точному соответствию сайту, на котором размещен запрашиваемая страница.

Это межсайтовый запрос, поскольку www.freshfaves.com и freshfaves.com находятся на разных хостах. Результатом является окно с сообщением «результат: ошибка». В блогах на другом сайте показано, что запрос там не был получен, поэтому, по-видимому, перед отправкой запроса произошла ошибка.

Если я изменю dbUrl на 'http://www.freshfaves.com/',, запрос будет успешным, поэтому проблема, похоже, тесно связана с URL-адресом и не является ошибкой в ​​другом месте кода.

Ответы [ 2 ]

1 голос
/ 06 декабря 2009

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

РЕДАКТИРОВАТЬ: только что заметил

document.domain = 'freshfaves.com';

часть. Это работает только для того, чтобы два сценария из разных (под) доменов могли общаться, например, с iframes из разных поддоменов. Обе стороны должны установить это свойство для одного домена для связи. Проверьте эту ссылку с дополнительной информацией о том, как сделать эту работу: http://ajaxian.com/archives/how-to-make-xmlhttprequest-calls-to-another-server-in-your-domain

Существует черновик из W3C, в котором указано, как обрабатывать перекрестные запросы, которые были (частично) реализованы в Firefox 3 и, возможно, в других браузерах: http://www.w3.org/TR/access-control/

Я предполагаю, что у вас возникают проблемы, когда люди посещают сайт с www перед доменным именем, но некоторые также пропускают часть www . Эту проблему можно решить путем динамической генерации вашего доменного имени, включив в него часть www независимо от того, присутствует ли оно в URL или, что еще лучше, сделайте URL относительным:

var dbUrl = '/mylocation';

0 голосов
/ 06 декабря 2009

Все примеры в доступной документации на document.domain, такие как здесь для IE, здесь для Mozilla, всегда имеют разные sub домены, такие как images.xyz .com и www.xyz.com, но мне еще предстоит увидеть один, в котором один запрос исходит от самого домена, то есть xyz.com.

Можете ли вы попробовать сопоставить freshfaves.com, скажем, test.freshwaves.com и посмотреть, работает ли ваш подход для этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...