Альтернативы AJAX CORS

У меня есть служба 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, чтобы еще больше снизить нагрузку.