AJAX и межсайтовый скриптинг для чтения заголовка - PullRequest
2 голосов
/ 04 апреля 2011

Помогите мне немного лучше понять AJAX и межсайтовый скриптинг.Писать AJAX довольно просто.Если я хочу асинхронно читать HTTP-заголовок веб-сайта, я бы сделал что-то вроде этого:

var req = new XMLHttpRequest();
req.open('HEAD', 'http://www.stackoverflow.com/', true);
req.onreadystatechange = function (aEvt) {
  if (req.readyState == 4) {
     if(req.status == 200)
      alert(req.responseText);
     else
      alert("Error loading page");
  }
};
req.send(null);

Однако, когда я копирую и вставляю это в простую HTML-страницу с помощью блокнота и пытаюсь запустить его локальностатус запроса не возвращается 200. Я предполагаю, что это связано с межсайтовым скриптингом.Как бы мне обойти это?

Ответы [ 4 ]

2 голосов
/ 04 апреля 2011

Вы правы в том, что отправка запросов через домены запрещена, если вы не используете перекрестное совместное использование ресурсов (CORS, http://www.w3.org/TR/cors/).. В CORS есть компонент на стороне клиента и на стороне сервера. На стороне клиентазапрос выглядит в основном как обычный XmlHttpRequest, за исключением того, что у вас есть несколько других свойств и обработчиков, которые вы можете настроить. На сервере ответ должен генерировать некоторые специальные заголовки http.сервер: http://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross-origin-resource-sharing/

1 голос
/ 04 апреля 2011

Моим первым предположением будет попытка создать локальный файл PHP, который действует как шлюз:

<?php
  echo get_headers($_GET['url']);
?>

Затем выполните запрос GET с URL-адресом целевого сайта в качестве параметра и проанализируйте запрос .responseText из , который , чтобы определить заголовок ответа вашего оригинала.

Я не думаю, что это возможно с pure JS, поэтому вам придется использовать некоторый серверный код.

0 голосов
/ 04 апреля 2011

Вы не можете сделать запрос ajax на http://stackoverflow.com, если ваша страница обслуживается на http://localhost/...

http://en.wikipedia.org/wiki/XMLHttpRequest#Cross-domain_requests

0 голосов
/ 04 апреля 2011

Существует два типа «локально»:

  • Использование локального сервера (http://localhost/)
  • Прямой доступ к HTML-файлу (файл: /// C: \ a \ b \ c.html)

AJAX никогда не будет работать, во втором случае.

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