【问题标题】:How to gzip http request post(client) data for node.js server如何为node.js服务器压缩http请求发布(客户端)数据
【发布时间】:2015-06-02 09:19:31
【问题描述】:

我已经实现了 node.js 服务器应用程序,它接受来自客户端的发布数据(长 json 字符串)。有没有办法可以在浏览器端 gzip 发布数据并将其解压缩到 node.js 中?

我特别想压缩请求而不是响应。

【问题讨论】:

标签: node.js http gzip


【解决方案1】:

检查https://jsfiddle.net/gynz82tg/ 得到base64编码的请求字符串后,在nodejs中解压也是一样的。

var jsonStr = JSON.stringify({
  name: "JiangYD"
})
$('#origin').text(jsonStr);
var zip = new JSZip();
zip.file("data", jsonStr);
var content = zip.generate();
$('#compressed').text(content);

zip = new JSZip(content, {base64:true});
$('#decompressed').text(zip.file("data").asText());
<script src="https://raw.githubusercontent.com/Stuk/jszip/master/dist/jszip.js"></script>
<div id='origin'></div>
<div id='compressed'></div>
<div id='decompressed'></div>

更新 因为jsZip更新了API

https://jsfiddle.net/cvuqr6h4/

async function go(){
	const jsonStr = JSON.stringify({
  	name: "JiangYD"
	})
	$('#origin').text(jsonStr);
	let zip = new JSZip();
	zip.file("data", jsonStr);
	const content = await zip.generateAsync({type : "base64"});
	$('#compressed').text(content);

	zip = new JSZip();
	await zip.loadAsync(content, {base64:true});
	const decoded = await zip.file("data").async('string');
	$('#decompressed').text(decoded);
}

go();

【讨论】:

  • 在尝试 JSFiddle 时 - 我收到了跨域读取阻止 (CORB) 阻止了 MIME 类型为 text/plain 的跨域响应 。有关详细信息,请参阅 。你能提供一个固定的 JSFiddle 例子吗?谢谢!
  • 谢谢!!!我在您的示例中对其进行了一些修复 - 解码后的 div 中没有显示任何内容 - jsfiddle.net/L2royuex
  • 是的,base64 应该是压缩异步加载的选项。已更新。
【解决方案2】:

你可以试试这个:https://github.com/sapienlab/jsonpack

示例客户端代码:

<script src="jsonpack.js" />
<script>
 var BIG_JSON = {.....};
 var packed = jsonpack.pack(BIG_JSON);
 $.post('path_to_server',packed);
</script>

示例 Nodejs 代码:

var jsonpack = require('jsonpack/main');
app.on('/packed_data',function(req,res){
  try{
     jsonpack.unpack(req.data);
  }catch(e){
   //not good packed data. 
 }

})

这是一个示例代码,当然我不知道您使用什么框架或库,但您可以看到如何实现它。 无论如何要小心这一点,因为压缩和解压缩数据始终是一项繁重的 cpu 绑定任务。如果您有几兆字节的数据,您不想让您的用户通过手机、平板电脑等来完成这项任务!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    相关资源
    最近更新 更多