博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS 页面 POST 传递参数跳转到新页面
阅读量:6134 次
发布时间:2019-06-21

本文共 2198 字,大约阅读时间需要 7 分钟。

场景

有个页面 a.vm,对 ajax 请求的结果进行判断后,获取结果里面的数据传递给一个 URL(b.htm),跳转到新的页面 b.htm

遇到的问题

  1. 因为一开始是 GET 请求,所以当传递的数据过大的时候,会报错 nginx 414 request-uri too long

    • 客户端请求头缓冲区大小,如果请求头总长度大于小于128k,则使用此缓冲区

client_header_buffer_size 128k;
  • 请求头总长度大于128k时使用 large_client_header_buffers 设置的缓存区

  • large_client_header_buffers 指令参数4为个数,128k为大小,默认是8k。申请4个128k。

large_client_header_buffers 4 128k;

当http 的URI太长或者request header过大时会报414 Request URI too large或400 bad request错误

造成这样的原因

  1. cookie中写入的值太大造成的,因为header中的其他参数的size一般比较固定,只有cookie可能被写入较大的数据

  2. 请求参数太长,比如发布一个文章正文,用urlencode后,使用get方式传到后台

本次的故障原因是由问题 2 引起的。即当请求头过大时,超过 large_client_header_buffer 时,nginx可能返回 Request URI too large (414) 或者 Bad-request(400) 错误。

当Request line的长度大于large_client_header_buffer的一个buffer(128k)时,nginx会返回"Request URI too large" (414)错误,对应上面的场景2。

请求头中最长的一行也要小于large_client_header_buffer,当不是Request line的最长行大于一个buffer(128k)时,会返回"Bad-request"(400)错误,对应上面的场景1。

临时解决办法

修改 nginx 参数

主要是调大以下参数值:

client_header_buffer_size 512k;large_client_header_buffers 4 512k;

但是调大这个值会出现一个问题,当我的服务器腾挪数据量比较大的时候,可能又要修改这样不是一个办法,最终的解决办法就是由 GET 请求方式修改为 POST 请求方式

最终解决办法

使用 jquery.redirect.js 框架来处理这样的情况,主要使用到的函数是 $.redirect

代码如下:

$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;            });

转载地址:http://tqeua.baihongyu.com/

你可能感兴趣的文章
几条简单SQL的系统级抽象
查看>>
保护模式汇编系列之二 - 中断和异常处理
查看>>
使用JavaMail创建邮件和发送邮件
查看>>
【SICP练习】119 练习3.50
查看>>
Android图片压缩(质量压缩和尺寸压缩)
查看>>
nilfs (a continuent snapshot file system) used with PostgreSQL
查看>>
【SICP练习】150 练习4.6
查看>>
HTML(四)
查看>>
Shell脚本 使用sed流编辑器一键修改CentOS网卡IP地址
查看>>
利用pscp和psftp工具,在windows和linux之间传输文件
查看>>
我的友情链接
查看>>
Python实现windows下模拟按键和鼠标点击的方法
查看>>
vsftpd 自动安装脚本
查看>>
mybatis 3.3 源码阅读(一)
查看>>
tr以及管道经典练习题以及详细过程
查看>>
Linux新手训练营--基础篇
查看>>
Tigase输出从客户端和服务器的请求应答日志
查看>>
shell学习笔记
查看>>
liunx基础命令
查看>>
python异常处理
查看>>