У меня есть служба REST API на домене api.example.com. И вы хотите использовать этот api также для моего javascript ajax Requests на www.example.com.
Я создаю свои запросы jQuery AJAX (GET, POST, PUT и DELETE) с помощью CORS, а на firefox и chrome все работает нормально. Я тестировал скрипт в Opera и ничего не загружал. После этого я прочитал некоторые онлайн-статьи и должен понять, что CORS не работает с Opera.
Какие существуют альтернативы для получения и переноса данных в службу отдыха? JSONp не работает, потому что мне нужны другие HTTP-глаголы (POST, PUT, DELETE).
Создать «туннелирующий» php-Script в том же домене? Но чем больше у меня больше сетевого трафика и Serverload.
Client -> WWW-Server -> API-Server API-Server -> WWW-Server -> Client
вместо
Client -> API-Server API-Server -> Client
Я благодарен за каждую Идею, которая будет передана мне.
Вы можете использовать сторонние инструменты для туннелирования, например YQL .
Yahoo! Язык запросов – это выразительный SQL-подобный язык, который позволяет запрашивать, фильтровать и объединять данные через веб-службы.
YQL будет выступать посредником для подключения вызовов с вашего сайта к вашему API. Сетевой трафик будет выглядеть так:
Client -> YQL -> API Server
который выглядит хорошо для меня.
YQL существует уже довольно долгое время. Их бесплатные квоты благоприятны, а время работы тоже неплохое:
По IP-ограничениям: / v1 / public / : 2000 вызовов в час; / v1 / yql / : 20 000 вызовов в час.
У YQL есть цель повышения производительности более 99,5%.
Более того, квоты постоянно растут, и Yahoo! дает определенные гарантии, что, если они решат закрыть службу, они будут продолжать работать некоторое время, поэтому у вас будет время для миграции. Есть несколько проектов, которые используют YQL сегодня (я знаю одну такую услугу – TipTheWb.org )
Кроме того, я предлагаю вам определить, поддерживает ли данный браузер CORS и откатывается к YQL только при необходимости:
function browserSupportsCors() { if ("withCredentials" in new XMLHttpRequest()) return true; // most browsers else if (typeof XDomainRequest == "object") return true; // IE8+ else // Opera currently here, but they'll get better pretty soon :) return false; }
или если вы используете jQuery, он имеет опрятный метод support
.
if (!$.support.cors) { // YQL fallback }
Есть также отличные советы по настройке производительности YQL .
Благодарим вас за заботу о пользователях Opera!
Наиболее распространенное решение действительно использует прокси-скрипт на вашем сервере.
Полоса пропускания, скорее всего, незначительна – мы говорим о небольших запросах, а не об огромных загрузках.
И загрузка сервера также минимальна – и вы всегда можете использовать что-то асинхронное и легкое, например node.js, чтобы еще больше снизить нагрузку.