2016-01-25 5 views
18

開発中のChrome拡張機能からhttpリクエストを送信する際に奇妙な問題に直面しました(通常のJavaScript)。これは、のようなURLでbackground.jsから)XmlHttpRequestのPOSTリクエストです:私も、通常のWebページ(ないクロム拡張子)からこの要求を送信し、重要なビットPOST Squid3プロキシを使用するとXmlHttpRequestによって絶対URIがサーバに送信されます

http://host.com/postform/upload 

ことならば、私は開発者を開くということですツールと私の要求のための[ネットワーク]タブを確認し、私はそこに最初のヘッダを参照してください(ヘッダを選択するには、表示する):

POST /postform/upload HTTP/1.1 

そしてそれは前に正常に動作します私は直接接続の代りにプロキシを可能にする。私はsquid3を私のUbuntuで使っています。プロキシを使用した場合にのみ、一つのことは、要求間で異なる - そしてそれは、HTTPサーバーのリターンが404見つからない作る - 私はsquid3(私は使用に基づいて私の代理で動作するようにChromeを強制する場合...

をプロキシを使用してのみ私のクローム拡張機能のPACスクリプト)、私の要求はうまくいかないでしょう。私は何度もチェックして、リクエストボディの違いを減らすことができました。私が残したのは最初のヘッダです。

それは、要求が(背景ページから開かれた開発者ツールの[ネットワーク]タブから)アクティブプロキシに送信されたときに次のようになります。

POST http://host.com/postform/upload HTTP/1.1 

私はchome.webRequest.onBeforeSendHeadersのAPIを使用してみましたが、それは助けになりませんでした。私もXmlHttpRequest.openのURLからホスト名を削除しようとしましたが、これは役に立ちませんでした。

いずれにしても正しいホストとオリジンのヘッダーを送信しています。これは私のsquid3の設定で問題になるかもしれませんか、私はjavaScriptで何を変更すべきですか?実現

UPDATE は今、そのイカはどのような方法では問題ではありません、そして問題はPOST要求は完全なURIが含まれていること(http://..を。)の代わりに「パス」です。 GETが問題なく動作します。それは私を殺している。

iframeの回避策は使用できません。私の問題は何ですか?

+0

要求は、拡張バックエンドのスクリプト通常のクロームウェブページ(jqueryの/アヤックス)からではなく送信された場合は罰金、私はプロキシを使用した場合、サーバー上の404エラーの原因を理解し、しかし、何かが(PACプロキシで)動作しますなぜ私は理解していません。 – Croll

答えて

4

APIをChrome拡張機能から使用するには、"permissions"マニフェスト属性でURLを指定して、ターゲットホストのアクセス許可をリクエストする必要があります。たとえば、XHRリクエストを送信するターゲットホストがhttp://www.example.orgの場合、マニフェストには次のコード行が含まれている必要があります。

... 
"permissions" : { 
    "http://www.example.org", 
    ... 
} 

明らかに、エラーはバックエンド部分にあります。 match patternsについては、単一の文字列を使用して複数のURLを一致させることもできます(例:*://www.example.org/*)。

+2

は、私はすでに持っている '*:それはあなたが持っているものであれば、それは不正なマッチパターンです私のマニフェスト – Croll

+1

@DmitrjAで//*.*'許可。あるべき ' "*:// */*"' – Xan

+1

@Xan '*:// * org'は私が必要とするまさにありません。私はあなたのソリューションを試したが、何も変わっていないGETは正常に動作し、ヘッダーには "location"(パス)ではなく完全な要求URIが含まれているためPOSTが失敗します。 – Croll

関連する問題