场景
最近在工作中遇到一个需求,有个页面 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 large或400 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; });
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对小牛知识库的支持。
本文向大家介绍用js通过url传参把数据从一个页面传到另一个页面,包括了用js通过url传参把数据从一个页面传到另一个页面的使用技巧和注意事项,需要的朋友参考一下 用js把数据从一个页面传到另一个页面的层里? 如果是传到新页面的话,你网站基于什么语言开发直接用get或者post获取,然后输出到这个层 通过url传参 如果是HTML页面的话JS传到新页面就window.location.href='
本文向大家介绍Angular 页面跳转时传参问题,包括了Angular 页面跳转时传参问题的使用技巧和注意事项,需要的朋友参考一下 首先,你需要已经配置过你的rout,比如: 其中注意第二个地址信息中的params属性,这个就是你要接受参数的对象,以key :value的形式定义 而在跳转页面时,两个方法都可以传参,一种是直接写在html中 此时传参跟在页面地址的后面 第二种就是写在control
在普通的web开发中,参数传递有这么几种形式: url: /another_page?id=3 表单: <form>...</form> 在vuejs中,不会产生表单的提交(这会引起页面的整体刷新). 所以有两种: url . 同传统语言. vuejs 内部的机制.(无法在url 中体现,可以认为是由js代码隐式实现的) 我们用一个实际的例子说明. 我们之前实现了 "博客列表页",接下来我们要实现
在开发HarmonyOS Web组件时,需要加载并执行来自不同源的JavaScript脚本文件。直接在HTML中使用<script src="..."></script>标签引入脚本,但受到同源策略的限制。 怎样可以外部脚本能够被加载并正常执行呀?
页面跳转可以是打开新的一页,也可以是当前页重定向,还可以是跳转到当前页的某个状态,下面会从打开w文件,打开其它后缀文件,使用路由等几个方面分别介绍一下在X5中的页面跳转。 目录 1、打开w文件 1.1、使用Shell提供的方法 1.2、使用弹出窗口打开 1.3、模拟门户的做法 2、打开html等其它类型的文件 2.1、使用打开w文件的方法 2.2、使用a链接跳转 2.3、页面重定向 2.4、使用w
页面跳转可以是打开新的一页,也可以是当前页重定向,还可以是跳转到当前页的某个状态,下面会从打开w文件,打开其它后缀文件,使用路由等几个方面分别介绍一下在X5中的页面跳转。 目录 1、打开w文件 1.1、使用Shell提供的方法 1.2、使用弹出窗口打开 1.3、模拟门户的做法 2、打开html等其它类型的文件 2.1、使用打开w文件的方法 2.2、使用a链接跳转 2.3、页面重定向 2.4、使用w