$http传输数据量较大
来源:互联网 发布:神魔诛天战宠进阶数据 编辑:程序博客网 时间:2024/04/30 14:36
起因
小x说他使用之前的传输方式传输较大的数据量时,后台报错了。
之前的形式是:
cspServices.factory('a',function($http) { var service = {}; service.test=function(param,callback){ $http({ url:'/a/test', params: param, method: 'POST' }).success(function(res){ callback(res); }).error(function(res) { var pro = {}; pro.result=false; pro.reason='失败'; callback(pro); }); } })
注意其中$http的内容。那时候对angular一点都不了解,为了业务需求,写了这个。后来将所有需要传输的数据都放在param中。比如,要传输{ a:1, b:2}。则在调用的时候,用
a.test({a:1, b:2},function(callback){})
angularjs 中的$http的基本用法:
$http({ method: 'GET', url: '/someUrl'}).then(function successCallback(response) { // this callback will be called asynchronously // when the response is available }, function errorCallback(response) { // called asynchronously if an error occurs // or server returns response with an error status. });
method中我们常用以get 与 post为例。当method为get时,可以写如下参数:
$http({ method: 'GET', url: '/someUrl', params: params, headers:{ 'Content-Type':....}).then(function successCallback(response) { }, function errorCallback(response) { });
其中,params是需要传递的数据对象。在后台时,拿到params数据的方法就是req.query;
当method是POST/PUT/PATCH/DELETE时,需要写成:
$http({ method: 'POST', url: '/someUrl', data: {}, headers:{ 'Content-Type':....}).then(function successCallback(response) { }, function errorCallback(response) { });
在后台拿到数据的方法就是req.body.
注意:get与post大小限制
get
Http Get方法提交的数据大小长度并没有限制,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制.
如:IE对URL长度的限制是2083字节(2K+35)。post
理论上讲,POST是没有大小限制的。HTTP协议规范也没有进行大小限制,起限制作用的是服务器的处理程序的处理能力。
如:在Tomcat下取消POST大小的限制(Tomcat默认2M);
打开tomcat目录下的conf目录,打开server.xml 文件,修改debug="0"acceptCount="100"connectionTimeout="20000"disableUploadTimeout="true"port="8080"redirectPort="8443"enableLookups="false"minSpareThreads="25"maxSpareThreads="75"maxThreads="150"**maxPostSize="0"**URIEncoding="GBK
个人理解:
1. 多数浏览器对于POST采用两阶段发送数据的,先发送请求头,再发送请求体,即使参数再少再短,也会被分成两个步骤来发送(相对于GET),也就是第一步发送header数据,第二步再发送body部分。因此POST可以传输的量更大一些,但也更耗时一些。GET只需要一次传输,相对来说,则更安全可靠,且网络耗时更短。
2. GET请求可以被浏览器cache, 因此最好不要提交敏感数据,否则在历史浏览记录中容易被泄露。而POST则不会被cache;
3. GET参数是放在url后面的,不同的浏览器对url长度有限制。POST理论上没有(因为放在body里面);
4. GET提交的数据大小,不同浏览器有不同大小限制。POST提交数据大小由服务器设定。POST可传输数据比GET大的多;
5. 全部用POST肯定不合理。数据相对不敏感/请求频繁且较小的情况下,用GET。
- $http传输数据量较大
- webservice传输数据量较大的情况的解决方案
- java处理较大数据量到mysql
- PHPExcel导出数据量较大时内存溢出
- OracleBulkCopy处理数据量较大时超时问题
- WCF大数据量传输解决方案
- WCF大数据量传输解决方案
- WCF大数据量传输配置
- WCF大数据量传输配置
- 数据量较大时,把数据放入缓存中的处理办法
- oracle数据库数据量较大时更新数据较慢问题
- IE浏览器下载excel数据量较大时第一次下载失败
- 当数据量较大时,两个tab切换的效率问题
- 冒泡排序法,适合不是较大数据量的排序
- Http传输
- 串口通信如何传输大数据量
- c语言socket 传输 大数据量
- 减少TCP小数据量传输的延时
- nginx+tomcat集群负载均衡
- web.xml加载自定义配置文件(.xml)
- FJHttp.request获取网络数据示例
- git 问题总结
- 【Java开发手册之编程规约(八)】注释规约
- $http传输数据量较大
- JS远程监测-Linux平台设置
- getchar
- Python+Opencv识别两张相似图片
- FragmentPagerAdapter强制刷新
- 通过字段对List<HashMap<String,Object>>进行分类
- 用gulp压缩js和css
- Linux Kernel 学习笔记2:模块参数
- 【2017/4/13】linux关于如何增加swap大小