JSページPOST転送パラメータは、新しいページにジャンプします.


シーン
a.vmのページがあり、ajax要求の結果を判断した後、取得結果の中のデータが一つのURL(b.httm)に渡され、新しいページb.htmに遷移する.
遭遇した問題
  • 最初はGETから要求されたので、伝達されたデータが大きすぎると、エラーが発生します.
  • クライアント要求ヘッドバッファサイズは、要求ヘッドの合計長さが128 k未満である場合、このバッファ領域
  • を使用する.
    client_header_buffer_size 128k;
  • 要求ヘッドの総長さが128 kより大きい場合、nginx 414 request-uri too longで設定されたキャッシュエリア
  • を使用する.
  • large_client_header_buffersコマンドパラメータ4は個数で、128 kはサイズで、デフォルトは8 kです.4つの128 kを申請します
  • large_client_header_buffers 4 128k;
    httpのURIが長すぎたり、request headerが大きすぎたりすると、414 Request URI too largeまたは400 bad requestエラーが報告されます.
    このような原因をもたらします.
  • cookieに書き込まれた値が大きすぎて、headerにおける他のパラメータのsizeが一般的に固定されているため、クッキーだけが大きなデータ
  • に書き込まれる可能性がある.
  • 要求パラメータが長すぎて、例えば文章の本文を発表して、urlencodeを使った後、get方式を使って楽屋
  • に伝えます.
    今回の故障の原因は問題2によるものです.すなわち、要求ヘッドが大きすぎると、large_client_header_buffersを超えると、inxはlarge_client_header_bufferまたはRequest URI too large (414)にエラーを返すことができる.
    Requestラインの長さがBad-request(400)large_client_header_bufferより大きい場合、buffer(128k)nginxエラーを返し、上記のシーン2に対応する.
    要求ヘッダの中の一番長い行も"Request URI too large" (414)より小さくなければなりません.large_client_header_bufferの一番長い行が一つのRequest lineより大きい場合、buffer(128k)のエラーに戻り、上記のシーン1に対応します.
    臨時解決策
    nginxパラメータを変更
    主に以下のパラメータ値を大きくします.
    client_header_buffer_size 512k;
    large_client_header_buffers 4 512k;
    しかし、この値を大きくすると問題が発生します.私のサーバのデータ量が比較的大きい場合、またこのような方法を修正するかもしれません.最終的な解決方法は"Bad-request"(400)の要求方式によってGETの要求方式に変更されます.
    最終解決策
    jquery.redirect.jsフレームを用いてこのような状況を処理する場合、主に使用される関数はPOSTである.
    コードは以下の通りです
     $http({
                    method: "POST",
                    dataType: "json",
                    contentType: 'application/json',
                    url: url,
                    data: data,
                }).success(function (data) {
                    if (data.success) {
                        crId = data.data;
                        $scope.errMsg = "";
                        var url = "/xx.htm?id=" + id;
                        window.location.href = url
                    } else {
                        $scope.errMsg = data.message;
                        $scope.isDisabled = false;
                        $scope.errorCode = data.code;
                        $scope.trv.physics = data.data;
                        if(data.statusCode === -224){
                            var vms = data.data;
                            console.log("vms: " + vms);
    
                            $.redirect('/b.htm', {'vms': vms.toString(), 'resource': trv.resource, 'errMsg': $scope.errMsg});
                        }
    
                    }
                }).error(function (data) {
                    alert(data);
                    $scope.isDisabled = false;
                });