Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> 關於伺服器

解決 GZIP 壓縮衝突導致 PHP 驗證碼/頁面錯誤 330 (ERR_CONTENT_DECODING_FAILED)

編輯:關於伺服器

現象:ECShop 等 PHP 系統驗證碼顯示紅叉,直接存取驗證碼 URL (如 /admin/index.php?act=captcha) 瀏覽器報錯:

錯誤 330 (net::ERR_CONTENT_DECODING_FAILED):未知錯誤

根本原因

雙重 GZIP 壓縮:PHP 程式碼中啟用 ob_start('ob_gzhandler') 或框架配置開啟 GZIP,同時 Web 伺服器 (Apache mod_deflate / Nginx gzip / IIS 動態壓縮) 也對輸出進行壓縮。瀏覽器收到雙重壓縮資料流,解壓失敗拋出 330 錯誤。驗證碼、圖片、二進位串流最易觸發。

解決方案:統一壓縮層級,二選一

方案 A:關閉應用層 GZIP (推薦,由 Web 伺服器統一處理)

優點:集中管理、支援靜態/動態混合、可精細控制 MIME 類型、避免 PHP 輸出二進位內容被誤壓。

系統關閉方法
ECShop管理中心 → 商店設定 → 基本設定 → 是否啟用 Gzip 模式:禁用
Discuz! (X 系列)1. FTP 下載 config/config_global.php → $_config['output']['gzip'] = 0;
2. 或資料庫執行:UPDATE pre_common_setting SET svalue='0' WHERE skey='gzip';
3. 後台 → 全域 → 伺服器優化 → 關閉 Gzip
Discuz! (7.2 及舊版)FTP 下載 forumdata/cache/cache_settings.php → 'gzipcompress' => 0 → 上傳覆蓋 → 後台關閉
phpwinddata/bbscache/config.php → $db_obstart = '0'; → 後台 → 論壇核心設定 → 核心功能 → 禁止 GZIP
ShopEx 4.7.1替換根目錄 index.php 為修正版 (官方補丁包)
ShopEx 4.7.2+include/mall_config.php 末尾加入:define('SYS_GZIP', false);
SaBlogcache/cache_settings.php 第 64 行 'gzipcompress' => '0'
動網 PHP 版global.php 將 $db_obstart = 1 改為 0
Supesite/X-Spacedata/system/config.cache.php → 'gzipcompress' => 0

方案 B:關閉 Web 伺服器層壓縮 (不推薦,失去靜態資源壓縮優勢)

  • Apache:註解 LoadModule deflate_module 或 SetOutputFilter DEFLATE。
  • Nginx:gzip off; 在 http/server/location 層。
  • IIS:關閉「動態內容壓縮」/「靜態內容壓縮」。

驗證修復

  1. 清除瀏覽器快取 / 按 Ctrl+F5 強制重新整理。
  2. 直接存取驗證碼 URL,應正常顯示圖片 (Content-Type: image/png/jpeg, 無 Content-Encoding: gzip 或僅單層)。
  3. 開發者工具 Network 面板確認回應標頭無重複 Content-Encoding: gzip。

結語:GZIP 雙重壓縮是 PHP 應用遷移至支援壓縮的 Web 伺服器時常見問題。統一由 Web 伺服器層處理壓縮,應用層全面關閉 為最佳實踐,兼顧效能、相容性與維護簡易性。

Copyright © Windows教程網 All Rights Reserved