$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大小限制

  1. get
    Http Get方法提交的数据大小长度并没有限制,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制.
    如:IE对URL长度的限制是2083字节(2K+35)。

  2. 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。

0 0
原创粉丝点击