是否可以将http get / post请求拆分为多个 - 从客户端调用它时?

时间:2017-06-18 15:43:57

标签: ajax http https get

这就是我正在做的事情。从内容存储服务器读取文件内容。我正在做的就是从客户端调用https GET请求来获取文件内容。

https://contentserver.xyz.com/file_id(从客户端调用)

file_id - 表示文件的唯一值。

现在我的内容服务器不知道文件元。因此,它再次调用metaserver来获取文件的元内容,如

http://metaserver.xyz.com/file_id(内部S2S沟通)

现在可以拆分从客户端调用的请求

  

https://contentserver.xyz.com/file_id

分为两个

  

https://contentserver.xyz.com/file_id

     

https://metaserver.xyz.com/file_id

即;调用请求https://contentserver.xyz.com/file_id时,默认情况下应调用其他请求https://metaserver.xyz.com/file_id

我不确定这是否可行。但是很想知道天气有什么可能的方法来实现这个目标吗?

2 个答案:

答案 0 :(得分:1)

当您在浏览器上发布来自javascript的ajax请求时,它会异步发送。您将回调传递给成功返回或拒绝请求的时间。

因此,如果您一个接一个地发布其中两个,则会立即发送它们,并且在完成后将触发每个回调。

但这假设您的内容服务器不需要文件元,只是将其返回给浏览器。

另请注意,从浏览器调用其他域可能会产生CORS个问题。

答案 1 :(得分:1)

如果文件内容请求取决于文件元信息,则无法并行发送这两个请求。首先需要获取文件元信息。

否则,RxJS可用于管理这两个异步请求,当{em> meta 和 content 请求都是forkJoin帮助汇总结果时完成。

这是一个简单的例子:

const Rx = require('rxjs/Rx');

var meta = Rx.Observable.create(function (observer){
  $.get('https://metaserver.xyz.com/file_id', function(data) {
    observer.next(body);
    observer.complete();
  });
});

var content = Rx.Observable.create(function (observer){
  $.get('https://contentserver.xyz.com/file_id', function(data) {
    observer.next(body);
    observer.complete();
  });
});

var source = ['meta', 'content'];
Rx.Observable.forkJoin([meta, content], function(){
  let responseObj = {};
  for(let i=0;i<source.length;i++){
    responseObj[source[i]] = arguments[i];
  }
  return responseObj;
}).subscribe(function(val) {
  // val is the final value, containing meta and content information.
});

请注意forkJoin表示(doc):

  

当所有可观测量完成时,从每个观察者发出最后一个值。