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