在Js页面通过POST传递参数跳转到新页面详解


Posted in Javascript onAugust 25, 2017

场景

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

遇到的问题

因为一开始是 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 large400 bad request错误

造成这样的原因

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

请求参数太长,比如发布一个文章正文,用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;
   });

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
Raphael一个用于在网页中绘制矢量图形的Javascript库
Jan 08 Javascript
JavaScript判断访问的来源是手机还是电脑,用的哪种浏览器
Dec 12 Javascript
JavaScript 事件绑定及深入
Apr 13 Javascript
jquery ui resize 中border-box的bug修正
Apr 26 Javascript
JavaScript正则表达式的分组匹配详解
Feb 13 Javascript
javascript 封装Date日期类实例详解
May 28 Javascript
vue使用axios时关于this的指向问题详解
Dec 22 Javascript
详解Node 定时器
Feb 26 Javascript
javascript实现计算指定范围内的质数示例
Dec 29 Javascript
VScode格式化ESlint方法(最全最好用方法)
Sep 10 Javascript
JS实现拖拽元素时与另一元素碰撞检测
Aug 27 Javascript
vue 页面跳转的实现方式
Jan 12 Vue.js
Vue上传组件vue Simple Uploader的用法示例
Aug 25 #Javascript
DVA框架统一处理所有页面的loading状态
Aug 25 #Javascript
基于JavaScript实现评论框展开和隐藏功能
Aug 25 #Javascript
js求数组中全部数字可拼接出的最大整数示例代码
Aug 25 #Javascript
Vue.js进行查询操作的实例详解
Aug 25 #Javascript
Vue实例中生命周期created和mounted的区别详解
Aug 25 #Javascript
Vue.js框架路由使用方法实例详解
Aug 25 #Javascript
You might like
PHP版国家代码、缩写查询函数代码
2011/08/14 PHP
解析MySql与Java的时间类型
2013/06/22 PHP
php cli配置文件问题分析
2015/10/15 PHP
Zend Framework基于Command命令行建立ZF项目的方法
2017/02/18 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
ExtJS 2.0实用简明教程 之ExtJS版的Hello
2009/04/29 Javascript
JavaScript 利用StringBuffer类提升+=拼接字符串效率
2009/11/24 Javascript
基于jQuery的输入框在光标位置插入内容, 并选中
2011/10/29 Javascript
jQuery 1.7.2中getAll方法的疑惑分析
2012/05/23 Javascript
jquery中append()与appendto()用法分析
2014/11/14 Javascript
js+css实现回到顶部按钮(back to top)
2016/03/02 Javascript
微信js-sdk界面操作接口用法示例
2016/10/12 Javascript
Vue2实现组件props双向绑定
2016/12/02 Javascript
原生JS获取元素集合的子元素宽度实例
2016/12/14 Javascript
jquery实现图片平滑滚动详解
2017/03/22 jQuery
JS实现手写parseInt的方法示例
2017/09/24 Javascript
Koa 使用小技巧(小结)
2018/10/22 Javascript
简单分析js中的this的原理
2019/08/31 Javascript
Python创建系统目录的方法
2015/03/11 Python
两个命令把 Vim 打造成 Python IDE的方法
2016/03/20 Python
python:socket传输大文件示例
2017/01/18 Python
Python登录并获取CSDN博客所有文章列表代码实例
2017/12/28 Python
ubuntu环境下python虚拟环境的安装过程
2018/01/07 Python
Win8.1下安装Python3.6提示0x80240017错误的解决方法
2018/07/31 Python
python类共享变量操作
2020/09/03 Python
CSS3 please 跨浏览器的CSS3产生器
2010/03/14 HTML / CSS
数据库面试要点基本概念
2013/10/31 面试题
vue 中 get / delete 传递数组参数方法
2021/03/23 Vue.js
人事部经理岗位职责
2014/03/07 职场文书
老人祝寿主持词
2014/03/28 职场文书
电子商务专业应届生求职信
2014/05/28 职场文书
人事主管岗位职责说明书
2014/07/30 职场文书
报考公务员诚信承诺书
2014/08/29 职场文书
实习证明模板
2015/06/16 职场文书
《吃水不忘挖井人》教学反思
2016/02/22 职场文书
选购到合适的激光打印机
2022/04/21 数码科技