2

単一ページの js アプリがあり、ログを含むカスタム ヘッダーをサーバーに送信していますが、サーバーが 8k を超える要求を受け入れないため、これらのヘッダーのサイズを制御する必要があります。

これまでの私の解決策は、アプリケーションから送信されるすべての ajax リクエストを傍受することでした。

特にすべてのリクエストをインターセプトするために、 jQuery Global Ajax Eventsを使用しています。ローカルイベントなのでajaxSend使えません。beforeSend

コールバックでリクエスト ヘッダーにアクセスできないようです。すべてのリクエストのヘッダーを読み取り、大きすぎる場合はログ ヘッダーを切り詰める必要があります。

4

1 に答える 1

4

beforeSend送信前にリクエストを変更するために使用します。これはすべて、リンク先のドキュメントで説明されています。

グローバルajaxSendイベントは、リクエストを改ざんするのに役立ちません。あなたが得ることができるグローバルに最も近いものは callであり、その後のすべての ajax 呼び出しのデフォルトになるようにオプションをajaxSetup渡します。beforeSend


XMLHttpRequestオブジェクトからリクエスト ヘッダーを取得する簡単な方法はないようです。ただし、ロギングヘッダーを自分で設定していると想定しているため、これらのヘッダーの設定にフックして、それらへのアクセス可能な参照を保存できる場合があります。

XMLHttpRequest.prototype.readableHeaders = {};
XMLHttpRequest.prototype.proxiedSetRequestHeader = XMLHttpRequest.prototype.setRequestHeader;
XMLHttpRequest.prototype.setRequestHeader = function(header, value) {
    this.proxiedSetRequestHeader(header, value);
    this.readableHeaders[header] = value;
};

jqXHR.readableHeadersこのようにして、特定のログ ヘッダーのオブジェクトを直接検査し、必要に応じて文字列を切り捨てるためにもう一度beforeSend呼び出すことができるはずです。setRequestHeader

ヘッダーを取得するには、jqXHR オブジェクトから XMLHttpRequest の基になるインスタンスにアクセスする必要があります。関数を使用xhr()してインスタンスを取得します。

$.ajaxSetup({
  beforeSend: function (jqXHR, settings) {
    console.log( settings.xhr().readableHeaders );
  }
});
于 2012-09-27T11:01:40.737 に答える