AJAX GET呼び出しのHTTPヘッダーをクリアするにはどうすればよいですか?
-
03-07-2019 - |
質問
10秒ごとに情報を取得し、クライアントページを更新するAJAX呼び出しに依存するソリューションを開発しました。これは正常に機能していますが、クライアントからサーバーに渡され、再び返されるヘッダーの数と長さを考えると、コードのスケーラビリティに懸念があります。サーバー側の多くの冗長ヘッダー(ほとんどはASP.NET関連)を削除しましたが、現在はクライアントからのヘッダーを削減しようとしています。
私の会社で使用しているブラウザはIE(バージョン6、近日中に7にアップグレード予定)です。これは現在のコードの近似です:
var xmlHTTP = new ActiveXObject('Microsoft.XMLHTTP');
xmlHTTP.onreadystatechange = function() {
if ((xmlHTTP.readyState == 4) && (xmlHTTP.status == 200)) {
myCallbackFunction(xmlHTTP);
}
};
xmlHTTP.open('GET', 'myUrl.aspx');
try {
xmlHTTP.setRequestHeader("User-Agent", ".");
xmlHTTP.setRequestHeader("Accept", ".");
xmlHTTP.setRequestHeader("Accept-Language", ".");
xmlHTTP.setRequestHeader("Content-Type", ".");
} catch(e) {}
xmlHTTP.send();
これらのヘッダーの一部をクリアすることが可能であることを読んだが、 IE6で機能する方法を見つけていません。それらをnullに設定すると、タイプ不一致例外が発生するため、それらを単に「。」に置き換えました。当面。それらをクリアする別の方法や、送信されたHTTPヘッダーを減らす別の方法はありますか?
また、 'Referrer'ヘッダーを置換または短縮する方法はまったくないようです。
解決
setRequestHeader()メソッドは、引数として指定されたHTTPヘッダーが既にリクエストヘッダーのリストの一部である場合、値を追加します。
つまり、ヘッダーを追加することはできますが、ヘッダーを置き換えることはできません。
これは現在のブラウザーの動作と完全には一致しませんが、ブラウザーが向かう場所である可能性があります。その場合、この分野での努力は長期的には時間の無駄です。いずれにしても、ヘッダーを設定する現在のブラウザーの動作は非常に多様であり、通常は信頼できません。
「Referrer」ヘッダーを置換または短縮する方法はまったくないようです。
‘ Referer’を誤って使用している人がいることを考えれば、それは私を驚かせることはありません。 [sic]アクセス制御メカニズムとして。
現在のページのURLが長すぎないことを確認することもできますが、正直に言うと、この最適化の時期尚早な匂いがすべて私にあります。リクエストが何であれ1つのIPパケットに収まるため、目に見えるパフォーマンスの大きな違いはありません。
Mibbitは非常に膨大な量のトラフィックを消費するため、Mibbit(リンク先のブログで述べたように)を試す価値があるかもしれませんが、単純な会社全体のアプリケーションの場合、クロスブラウザは考えていません-and-proxy-testing-burden:end-user-benefit ratio of messing with the headersは価値があります。
他のヒント
IE 6以前のバージョンは、 MSXML.XMLHTTP
から作成されたActiveXObject(実際には IXMLHTTPRequest )、IE 7およびMozillaなどの他の最新のブラウザーは、 XmlHttpRequest
と呼ばれる組み込みオブジェクトを使用します。これがおそらく、MSXML実装ではRequestヘッダーを null
に設定できないが、組み込みオブジェクトでは設定できる理由です。
したがって、すべてのヘッダーをまとめてクリアする方法はないと思います。提示するMibbitへのリンクは、すべてのヘッダーを1つずつヌルに設定する機能のみを提供します。通常のシナリオでは、ヘッダーを削減することは、トラフィックの負荷を減らすのに非常に重要でないことが判明する場合があります。
とはいえ、リクエストヘッダーを空の文字列""
ではなく"。"
に設定する理由を知りたいと思います。
この種のマイクロ最適化を忘れて、代わりにプッシュモデルを検討します。出発点として:
- Flashは永続的なソケットを作成し、イベントをjavascriptに仲介できます。
- 同期HTTP(BOSH)を介した双方向ストリームを実装できます。 http://xmpp.org/extensions/xep-0124.html をご覧ください。 li>
これらは通常、バックエンドのXMPPサーバーとペアになっています。