Междоменный запрос Ajax из файла js

Вот в чем проблема:

1.) У нас есть страница здесь ... www.blah.com/mypage.html

2.) Эта страница запрашивает js-файл www.foo.com вот так ...

<script type = "text/javascript" src = "http://www.foo.com/jsfile.js" />

3.) "jsfile.js" использует Prototype для отправки Ajax-запроса обратно на www.foo.com.

4.) Запрос ajax вызывает www.foo.com/blah.html. Функция обратного вызова получает ответ html и бросает его в div.

Хотя это, похоже, не работает, я думаю, это XSS. Это верно?

Если да, то как я могу решить эту проблему? Есть ли другой способ получить мой html с www.foo.com на www.blah.com на клиенте без использования iframe?

Есть действительно хорошая статья о междоменном запросе ajax - tek-insight.blogspot.com/2010/05/…

user680356 26.08.2011 15:27
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
10
1
20 409
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Ответ принят как подходящий

Это XSS и это запрещено. Тебе действительно не следует так поступать.

Если вам действительно нужно, заставьте ваш код AJAX вызывать локальный код (PHP, ASP, что угодно) на blah.com и заставить его вести себя как клиент, получать все, что вам нужно, с foo.com и возвращать его обратно клиенту. Если вы используете PHP, вы можете сделать это с помощью fopen ('www.foo.com/blah.html', 'r'), а затем прочитать содержимое, как если бы это был обычный файл.

Конечно, в вашем php.ini необходимо включить allow_remote_url_fopen (или как он там называется).

Один из вариантов - реализовать прокси-страницу, которая принимает необходимый URL-адрес в качестве параметра. например http://blah.com/proxy?uri=http://foo.com/actualRequest

Вам лучше сделать небольшую проверку, чтобы убедиться, что URL-адрес является тем, который вы ожидаете ... в противном случае это серьезная дыра в безопасности.

rmeador 26.11.2008 02:00

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

Существует предложение w3c, позволяющий сайтам указывать другие сайты, которым разрешено делать межсайтовые запросы к ним. (Википедия может разрешить все запросы статей, скажем, но почта Google не хочет разрешать запросы - поскольку это может позволить открывать любой веб-сайт, когда вы вошли в почту Google, чтобы читать свою почту).

Это может быть доступно в какой-то момент в будущем.

Текущее предложение W3C называется «Совместное использование ресурсов между источниками», широко известное как CORS.

hippietrail 11.03.2012 15:48

Для междоменных совпадений это хороший рабочий пример, и теперь он считается "стандартным" http://www.xml.com/pub/a/2005/12/21/json-dynamic-script-tag.html.

есть и другие способы, например, для вставки фреймов с измененным доменом документа

http://fettig.net/weblog/2005/11/28/how-to-make-xmlhttprequest-connections-to-another-server-in-your-domain/

Я все еще согласен с тем, что простой способ - это вызвать прокси в том же домене, но тогда это не настоящий вызов WS на стороне клиента.

JSONP был частично разработан для решения возникшей у вас проблемы.

http://ajaxian.com/archives/jsonp-json-with-padding

JQuery имеет это в своем методе $ .getJSON

http://docs.jquery.com/Ajax/jQuery.getJSON

Как упоминалось выше, JSONP - это способ обойти это. Однако сайт, с которого вы запрашиваете данные, должен поддерживать JSONP, чтобы вы могли использовать его на клиенте. (JSONP по сути вставляет тег скрипта на страницу и предоставляет функцию обратного вызова, которую следует вызывать с результатами)

Если сайт, на который вы делаете запрос, не поддерживает JSONP, вам придется проксировать запрос на своем сервере. Как упоминалось выше, вы можете сделать это на своем собственном сервере, или то, что я делал в прошлом, - это использовать http://www.jsonpit.com, который будет проксировать запрос за вас.

Другие вопросы по теме