2011-12-08 12 views
5

は、私は私のSpotifyはアプリでSpotify Appで外部APIへのJSONリクエストがキャンセルされるのはなぜですか?

http://www.mydomain.com/api/command?option=value 

のようなURLを使用して、RESTのAPIからJSONデータを引っ張るSpotifyはアプリケーションを構築していマニフェスト私は私のAPIのホストのために必要なアクセス許可を設定している:

"RequiredPermissions": [ "http://*.mydomain.com" ] 

私は、APIの応答ヘッダーでクロスソースリソース共有を設定しました。ここでは実際の例である:私は私のアプリを実行した場合

Name: command www.mydomain.net/api 
Method: GET 
Status Text: (canceled) 
Type: undefined 
Initiator: jquery-1.js:7180 (Script) 
Size Content: 13B (0B) 
Time Latency: 21ms (0.0 days) 

Chrome inspector snapshot

を:

Spotifyはで
Server: nginx/0.7.65 
Date: Thu, 08 Dec 2011 09:07:16 GMT 
Content-Type: application/json 
Connection: keep-alive 
X-Powered-By: Mojolicious (Perl) 
Set-Cookie: mojolicious=eyJwcmVmcyI6e30sImZpbHRlcnMiOnsicGllciI6eyJzb3VyY2VzIjpbMjBdfSwiZWxlYyI6eyJzb3VyY2VzIjpbMTMsMTddLCJ4dGFncyI6WyJzaG9lZ2F6ZSJdLCJ0YWdzIjpbImVsZWN0cm9uaWMiXX0sInB1bmtkdWIiOnsieHRhZ3MiOlsicmVnZ2FlIl0sInRhZ3MiOlsicHVuayIsImR1YiJdfX0sImV4cGlyZXMiOjEzMjMzMzg4MzZ9--c6d6214525b5d56785eebc99217394a1; Version=1; Path=/; expires=Thu, 08 Dec 2011 10:07:16 GMT 
Content-Length: 23381 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: GET 
Access-Control-Allow-Headers: * 

200 OK 

は、クロムインスペクタネットワーク]タブでは、私は、要求がキャンセルされていることを確認私のデスクトップ上のChrome(Spotify以外)では、リクエストはキャンセルされず、すべて正常です。

私は間違っていますか?または、これはSpotifyプレビューリリースのバグ(機能?)ですか?

+1

なしのUTF-8でエンコード私はどうしようとする最初の事はWiresharkのようなツールを使用して楽しんでるによって作られている実際の要求を分析しています。次に、a)Spotifyアプリケーションが有効なOriginヘッダー(CORSに必要)を送信していること、およびb)Spotifyによって送信されたカスタム要求ヘッダーを確認できることを確認できます。 CORS仕様では、「*」がAccess-Control-Allow-Headersヘッダーの値として使用できないことに注意してください。 Access-Control-Request-Headersで受け取ったパラメータをエコーバックすることをお勧めします。 – monsur

+0

私は同じ問題を抱えていました。上で述べたように、Access-Control-Allow-Headersが私の問題でした。ヘッダを "*"に設定するようにサーバを変更したところ、うまくいきました。 – slurmomatic

+0

monsur - wiresharkを試しますが、Chromeは送信リクエストを表示していて、珍しいヘッダーはありません。 slurmomatic - すでにallow-headersを "*"に設定しています。 Spotifyに問題はありましたか? – nick

答えて

9

これを引き起こす原因はいくつかありますが、最も難しいものから順に説明します。あなたのmanifest.jsonをが有効なJSON strjctureを持っている、あなたはhttp://jsonlint.com/

  • ようなウェブサイト上でこれを行うことができ、正しいあなたのmanifest.jsonを内RequiredPermissions
  • チェックは必ずじゃない確認してい

    1. チェックこのファイルをBOM文字(ファイルの先頭に目に見えないバイト)で格納すると、マニフェストの解析が失敗する可能性があります。
    2. オリジンが受け入れていることを確認してください。 Spotifyのすべてのアプリはsp://appnameのような起源を持ち、ほとんどのサーバーはデフォルトでhttpとhttpsプロトコルしか受け入れないため、Acces-Control-Allow-Origin*に設定してリクエストがキャンセルされないようにすることができます。

    最後に、リクエストが審査官にキャンセルされて表示されることがありますが、それでも正しい返答があるので、再度確認してください。

    希望すると便利です。

    編集:場合によっては、奇妙な理由から、に要求しているURLをhttp://またはhttps://の先頭に設定すると便利です。

  • +1

    このチェックリストをありがとう - 私のマニフェストファイルで問題が有効ではないjson構造であることが判明しました。 – nick

    +0

    私にとっては、それは両方とも無効なjsonであり、あわててしまったクライアント全体を再起動しませんでした。 – Gustav

    4

    Spotifyを再起動して、変更をRequiredPermissionsにリロードしようとしましたか?私は再起動時に解決された同様の問題を抱えていました。

    +0

    +1 - 私はOPとまったく同じ問題を抱えていましたが、Chielのリストのすべてがチェックアウトされ、Spotifyを再起動するとそのトリックがやりました。 –

    0

    SpotifyはChromiumを内部で使用しているため、Same Originポリシーに準拠しています。それを回避するには、JSONPを使用してください。 Spotifyのみを許可するようにウェブホストのオリジンポリシーを設定することをお勧めします。

    +0

    JSON Pは1つのオプションですが、ChromeでもCORS – nick

    4

    注意するべきもう一つのこと:

    あなたが地元の開発をしている場合。NOT "localhost"または "127.0.0.1"にajax/getJSON呼び出しを発行しようとすると、の代わりにEth/WiFIインターフェイスIPを使用してください。

    spotify Webエンジンは、要求のこれらのローカルホスト識別子をブロックするか、ループバックインターフェイスが無視されるか、ウィンドウが再び干渉します。

    これは明らかな場合がありますが、それを理解するまでには時間がかかりました。

    +0

    がサポートされていますが、これはまだ問題があることを証明できます。私はこれで "Music Apps Hack Weekend"でヒットしています。すぐにSOを打つ必要があります。 :) – Abel

    0

    私の問題を引き起こしているのはボム文字だった。私はメモ帳++、エンコードを使用することを解決するために

    は - > BOM

    関連する問題