javascript - 在 php 中编码数据并在 Javascript (ajax) 中解压缩
问题描述
为了减小我的 json 文件的大小,我想压缩它。因此,我正在尝试压缩从 php 服务器发送的 json 数据文件:
header('Content-Encoding: gzip');
$output = gzencode(json_encode($data));
echo $output;
然后,在 javascript (ajax 方法) 中解压缩它:
$.ajax({
url: url,
type: "GET",
headers : {'Accept-Encoding': 'gzip '},
async: true,
success: function (data) {
console.log("sucess !!");
console.log(data);
...
)};
我还修改了 apache 服务器以自动解压缩它:
LoadModule deflate_module modules/mod_deflate.so
和 :
<IfModule mod_headers.c>
<FilesMatch ".(js|css|xml|gz|txt|json)$">
Header append Vary: Accept-Encoding
</FilesMatch>
但是,我无法正确获取数据(它仍然压缩)。
你能告诉我我做错了什么吗?
谢谢
解决方案
要为 API 使用 gzip,无需在应用程序级别实现它(在 PHP 中压缩数据并在 JS 中解压缩)。在这种情况下,数据应由 Web 服务器 (Apache) 压缩并由客户端(浏览器)解压缩。这个过程是透明的,独立于 PHP 或 JS 代码。
确保将 Web 服务器配置为对您的 API 端点使用压缩。要测试它curl -I -H 'Accept-Encoding: gzip,deflate' https://your.domain/api/endpoint/name
,请在浏览器 devtools 中运行或检查请求(在 Network 选项卡下)。
如果content-encoding: gzip
响应中有标头,则表示服务器使用 gzip 进行压缩。
推荐阅读
- r - 向ggplot条形图中的每个条形添加计数
- android - 运行/调试配置错误
- react-native - 如何在 React Native 中更改整个应用程序窗口的大小?
- neo4j - 为什么 Neo4j 用点 Neo4j 将我的号码转换为 Double
- regex - 如何在while循环中从grep输出分配变量
- td-engine - 无法更改 TDengine 数据库中的更新选项?
- oracle - oracle ords docker镜像的连接字符串无效
- swift - 在 SwiftUI 中,如何在 LinkedList 中“Foreach”节点?
- active-directory - adprep /rodcprep WS2008 和 WS2019
- elasticsearch - 为什么 Elasticsearch 中的 scaled_float 类型名称中有“float”?