$http传输数据量较大

起因

小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。

你可能感兴趣的:(angularjs)