3

ドメイン api.example.com に REST API サービスがあります。また、この API を www.example.com の JavaScript ajax リクエストにも使用したいと考えています。

私は CORS を使用して jQuery AJAX リクエスト (GET、POST、PUT、および DELETE) を構築し、firefox と chrome ですべて正常に動作します。Opera でスクリプトをテストしましたが、何も読み込まれませんでした。この後、いくつかのオンライン記事を読んで、CORS が Opera で動作しないことに気付きました。

Get and Put Data to the Rest Service にはどのような代替手段がありますか? 他の HTTP 動詞 (POST、PUT、DELETE) も必要なため、JSONp は機能しません。

同じドメインで「トンネリング」php-Script を作成しますか? しかし、それよりもネットワーク トラフィックとサーバー負荷がはるかに多くなっています。

Client -> WWW-Server -> API-Server
API-Server -> WWW-Server -> Client

それ以外の

Client -> API-Server
API-Server -> Client

私と共有されるすべてのアイデアに感謝しています。

4

2 に答える 2

3

YQLなどのサードパーティ ツールをトンネリングに使用できます。

ヤフー!クエリ言語は表現力豊かな SQL に似た言語で、Web サービス全体でデータのクエリ、フィルター処理、および結合を行うことができます。

YQL は、サイトから API への呼び出しを結び付ける仲介者として機能します。ネットワーク トラフィックは次のようになります。

Client -> YQL -> API Server

それは私にはうまく見えます。

YQL はかなり長い間存在しています。無料のクォータは良好で、稼働時間もかなり良好です。

  • IP ごとの制限: /v1/public/ : 1 時間あたり 2,000 コール。/v1/yql/ : 1 時間あたり 20,000 回の呼び出し。

  • YQL には、99.5% を超えるパフォーマンスのアップタイム目標があります。

さらに、クォータは常に増加しており、Yahoo! 彼らがサービスをシャットダウンすることを決定した場合、彼らはそれをかなり長い間実行し続けるので、移行する時間があるという一定の保証を提供します. 現在、YQL を使用するプロジェクトがいくつかあります (そのようなサービスの 1 つを知っています - 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 ユーザーのことを気にかけていただき、ありがとうございます。

于 2012-05-14T10:15:24.050 に答える
0

最も一般的な解決策は、実際にサーバーでプロキシスクリプトを使用することです。

帯域幅はごくわずかである可能性が高いです。結局のところ、大量のダウンロードではなく、小さなリクエストについて話しているのです。
また、サーバーの負荷も最小限に抑えられます。また、node.jsなどの非同期で軽量なものをいつでも使用して、負荷をさらに減らすことができます。

于 2012-05-14T09:38:36.247 に答える