2

編集: OPTIONS プリフライトが昨年秋に導入されたため、この投稿は大騒ぎのようです。私の問題は何よりもユーザーエラーでした。詳細については、コメントを参照してください (ドキュメントのためにここにすべて残しておきます)。--jlm


Youtube API が OPTIONS リクエスト メソッドをサポートしていないことは既知の問題であるため、(Youtube API の場合のように) 実際の CORS リクエストが成功したとしても、Cross-Origin プリフライトを実行しようとする Web アプリは失敗します。 . 今週もこの問題に直面しているため、3 つの回避策を考え出しました。ただし、それぞれに独自の長所と短所があります。

考えられる回避策 #1: プリフライトを忘れて、単純なクロスオリジン リクエストを作成します。

利点-- A) 機能します。B) ほとんどの GET または POST 要求を実行するときに必要な仕様はこれだけです。

欠点-- A) 仕様では、PATCH、PUT、または DELETE 要求は、form-data、url-encoded、または text/plain 以外の content-type を使用する POST 要求とともに、プリフライトする必要があると述べています。したがって、それは機能しますが、仕様を破ることになります (可能であれば回避したい)。B) カスタム ヘッダーを設定する場合は、プリフライトも必要です。たとえば、AngularJS の $http メソッドを 1.0 ブランチで使用すると、カスタム ヘッダーが設定され、GET リクエストのプリフライトがトリガーされます。この場合、もちろん、独自の $http サービスを作成するか、1.1 ブランチに移動することができます (問題は実際には Angluar 側にあるため)。

考えられる回避策 #2: JSON-P を使用する

利点-- A) それも機能します (場合によってはとにかく)。B) セットアップは非常に簡単です。

欠点-- A) 古い技術であり、Youtube API が引き続き JSONP をサポートするかどうかは不明です。B) コールバックが必要です。C) GET リクエストのみに限定されます。

考えられる回避策 #3: 同じドメインにサーバー側のプロキシを設定し、それを使用して Youtube API と通信します。

利点-- A) クライアントは同じオリジンで動作し、サーバー側のプロキシは何もプリフライトする必要がないため、CORS 要求を行う必要がまったくありません。

欠点-- A) 設定が複雑になる可能性があります。特に、資格情報を操作しようとする場合はそうです (プロキシ経由の oAuth2 は非常に困難な場合があります)。

この投稿に実際の質問(実際にはいくつか)があるように

  1. 上記の回避策の一部またはすべてについて、(良くも悪くも) どのような見解をお持ちですか?
  2. 他のソリューションを実装した人はいますか?
  3. Youtube サーバーが OPTIONS メソッドをサポートするかどうか、いつサポートするかについての情報はありますか?

すべてのコメントを歓迎します。これがそのような質問に最適なフォーラムではない場合は、事前に謝罪します (スタック オーバーフローにここに置くことで、同じ問題に直面している他の人に役立つことを願っています)。問題)

4

1 に答える 1

0

YouTube アップロード API (uploads.gdata.youtube.com) は CORS をサポートしていません。

ここここ で問題に投票できます。それに関するいくつかのフォーラム投稿もあります。CORS が機能していません。

Google はまだ修正に取り組んでいるようですが、約 1 年前に取り組みを開始したため、問題が修正される前に API が非推奨になる可能性が高いです (既に V3 があるため)。

唯一の回避策は、プロキシを使用することです (これはクールではありません)。基本的に、サーバーにビデオをアップロードしてから、YouTube に送信します。

于 2013-08-14T20:28:35.880 に答える