Как можно обойти политику единого происхождения для разработки клиентского кода AJAX для сайта Google AppEngine? - PullRequest
2 голосов
/ 07 января 2012

Я работаю с кем-то, у кого есть сайт Google AppEngine с пользовательским API, расположенным там.

Мне нужно написать AJAX Javascript для взаимодействия с пользовательским API на сайте, но меня обескураживает политика того же происхождения.JSONP будет бесполезен, потому что вы не можете получить обратный вызов ошибки из неудавшегося запроса AJAX (он не использует XMLHTTPRequest).Я использую JQuery для выполнения запросов.

Очевидно, что у Google AppEngine есть ужасное предупреждение, что вы не можете отдельно загрузить отдельные файлы для тестирования, поэтому я не могу решить эту проблему, разрабатывая непосредственно в соответствующем домене API..

Я нахожусь на MAC, и я слышал, что вы можете настроить какой-то прокси-сервер, чтобы обойти это, я не знаю даже, с чего начать, и не хочу, если я не наденуне обязательно.Что я могу сделать, чтобы позволить мне разработать AJAX JS для этого API?

Ответы [ 4 ]

3 голосов
/ 07 января 2012

Если вы просто ищете решение для разработки (то есть настройку прокси), я бы порекомендовал Charles Web Proxy (http://www.charlesproxy.com/).

). Это то, что я использую для локальной разработки - он может перехватывать запросы к URL-адресам.и перенаправить их в другие места, чтобы обойти междоменные проблемы (для локальной разработки и тестирования - конечно, не для производства). Настройка и работа довольно просты, и доступна бесплатная пробная версия.

1 голос
/ 08 января 2012

Я решил эту проблему, отключив поддержку политики того же происхождения в моем браузере (Chrome), чтобы он больше не функционировал или не удостоился чести. Во время разработки я могу делать междоменные запросы, и браузер не будет предотвращать их. Если вы столкнулись с этой проблемой, как я, запустите Chrome следующим образом:

/ Приложения / Google \ Chrome.app/Contents/MacOS/Google \ Chrome --disable-web-security

Это, очевидно, решение только для разработки, но это все, что мне было нужно. Для более обширных решений более уместны приведенные выше ответы, касающиеся CORS и JSONP + правильно разработанных API-интерфейсов JSONP.

1 голос
/ 07 января 2012

Решением вашей проблемы является CORS . Сайт вашего друга должен разрешать CORS, и если вы хотите, чтобы ваш код поддерживал IE (похоже, вы этого не делаете), вы должны использовать специальный плагин, такой как , этот .

.
1 голос
/ 07 января 2012

Как правило, API JSONP не перестают отвечать, по этой причине среди прочих.Даже если что-то пойдет не так, хорошо спроектированные ответят примерно так:

response({
   error: {...}
});

или что-то подобное.Таким образом, вы всегда должны получать ответ, если нет проблем с сетевым подключением или если сервер имеет серьезный сбой (например, App Engine выходит из строя).Если API не возвращает допустимый JSON для ошибок, я бы предложил изменить это.

...