php - Apache GZip 无法使用文本文件和 js 文件?
问题描述
我正在尝试使用 Apache mod_deflate 模块添加 GZip 压缩。除文本文件(“.txt”)外,所有内容都被压缩。压缩 HTML 文件和 JS 文件时也面临问题。
例如:假设一个脚本文件(“main.js”)托管在http://example.com
文件内容:
情况 1:
// Contents of main.js
console.log("Hello World");
console.log("Hello World");
console.log("Hello World");
console.log("Hello World"); console.log("Hello World");
情况 2:
// Contents of main.js
Hello World! Hello World!
Hello World! Hello World! Hello World!
Hello World! Hello World! Hello World! Hello World!
Random Contents
在情况1,当我访问时http://example.com/main.js
,它显示内容编码:gzip。
在案例 2 中,当我访问时http://example.com/main.js
,它不显示任何 content-encoding: gzip 标头。
所以 GZip 仅适用于 .js 文件的案例 1。
GZip 不适用于文本文件(.txt 扩展名)并且不显示任何 content-encoding: gzip 标头。
// .ht 访问代码
<IfModule mod_deflate.c>
<IfModule mod_mime.c>
AddType text/plain .txt
</IfModule>
SetOutputFilter DEFLATE
</IfModule>
我的软件清单
- 阿帕奇版本 - 2.4.39
- PHP 版本 - 7.3
- 操作系统 - Windows 10
- 软件 - Wamp 64Bit
解决方案
如果您在 .htaccess 文件中添加默认的 mod_deflate 和 mod_gzip conf 会进行一些更改吗?
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
AddOutputFilterByType DEFLATE application/x-font
AddOutputFilterByType DEFLATE application/x-font-opentype
AddOutputFilterByType DEFLATE application/x-font-otf
AddOutputFilterByType DEFLATE application/x-font-truetype
AddOutputFilterByType DEFLATE application/x-font-ttf
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE font/opentype
AddOutputFilterByType DEFLATE font/otf
AddOutputFilterByType DEFLATE font/ttf
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE image/x-icon
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/xml
# Remove browser bugs (only needed for really old browsers)
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
Header append Vary User-Agent
</IfModule>
<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_include mime ^text/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_include handler ^cgi-script$
</IfModule>
推荐阅读
- c++ - SortedVector 没有正确调用函数?
- flask - 如何在事件处理程序之外发出 socketio 消息
- c - 即使向量不同,也多次使用相同的函数
- swift - 如何在符合协议的非 RawRepresentable 枚举上实现 CustomStringConvertible?
- node.js - mongoose 加载 json 会删除 Schema Types ObjectId 数据吗?
- amazon-s3 - 无法从 Amazon S3 加载 Snowflake 外部表
- node.js - 猫鼬得到`TypeError:user.save不是一个函数`
- clang - 给定一个 LLVM IR,我们可以生成 Clang AST 吗?
- javascript - BehaviorSubject 问题,next() 不起作用
- kubernetes - 无法在 stackstorm HA(K8) 上安装包