全部產品
Search
文件中心

:通過CDN訪問與直接存取來源站點得到的結果不一樣

更新時間:Jun 30, 2024

通過CDN訪問與直接存取來源站點得到的結果不一樣,這個問題的原因可能在於CDN節點在回源請求時向HTTP Request Header中追加了特定參數,而來源站點對於這些參數有不同的處理邏輯,導致返回結果不一致。

問題描述

啟用CDN系列產品(CDN、DCDN)加速後,用戶端請求經過CDN節點與直接存取來源站點的結果不同。

問題原因

當用戶端請求達到CDN節點後,會進行下列判斷:

  • 命中緩衝 CDN節點直接返回結果給用戶端。

  • 未命中緩衝 CDN節點轉寄用戶端請求,同時在HTTP Request Header要求標頭中追加一些特定的參數,最終向來源站點發起回源請求。示意圖如下。

某些情況下,來源站點對於HTTP Request Header要求標頭中追加的特定參數會有不同的處理方式,導致用戶端請求被處理後的結果與直接存取來源站點不一致。例如:來源站點會判斷要求標頭中是否含有Via參數,以此確認請求是否來自Proxy 伺服器,然後做出不同的響應。

解決方案如下:

  1. 定位導致問題的要求標頭參數:

    • 直接存取來源站點並記錄返回結果。

    • 通過類比CDN節點添加特定要求標頭參數的方式訪問來源站點,並記錄返回結果。

    • 迴圈替換和測試不同的要求標頭參數,直到找到導致結果不一致的特定參數。

  2. 修改來源站點配置或刪除問題參數:

    • 檢查來源站點Web伺服器配置,根據實際需求調整對特定要求標頭參數的響應邏輯。

    • 如果該要求標頭參數對業務無實際作用,且使用的是阿里雲CDN產品,可以在CDN控制台配置中刪除該要求標頭參數。注意:SCDN和DCDN暫不支援此功能,如有需要,請提交工單聯絡阿里雲支援人員。

解決方案

步驟一:定位導致此問題的要求標頭參數

由於來源站點只針對特定的要求標頭參數返回不同的結果,所以需要先定位該特定的參數。定位步驟如下:

  1. 直接存取來源站點並記錄返回結果。

    curl -voa 'http://[$Your_Wesbite]' -x [$Origin_Server_IP]:[$Origin_Server_Port]
    說明
    • [$Your_Wesbite]:指您的網站網域名稱。

    • [$Origin_Server_IP]:指來源站點伺服器的公網IP地址。

    • [$Origin_Server_Port]:指來源站點伺服器的網站連接埠,通常該連接埠為80或443。

  2. 通過類比CDN節點添加特定要求標頭參數的方式訪問來源站點,並記錄返回結果。

    curl -voa 'http://www.[$Your_Wesbite].com' -x [$Origin_Server_IP]:[$Origin_Server_Port] -H 'Via:example.aliyundoc.com'
    說明

    此處以“Via:example.aliyundoc.com”為例,請根據實際情況自訂要求標頭參數及值。關於阿里雲CDN附加的要求標頭參數,請參見更多資訊

  3. 對比步驟1和步驟2的結果,檢查是否存在不一致的情況。

    • 結果一致。 請迴圈步驟1和步驟2,同時替換步驟2中的要求標頭參數,直到返回結果不一致。

    • 結果不同。 記錄結果不同時的要求標頭參數,然後繼續下一步驟。

步驟二:修改來源站點配置或者刪除問題參數

當定位到具體的要求標頭參數時,可參考下面兩種方式進行處理:

  • 修改來源站點配置。 請檢查來源站點的Web伺服器配置,是否存在根據不同的要求標頭有不同響應的配置。如果存在,請根據實際需求進行調整。

  • 在CDN控制台刪除追加的要求標頭參數。 如果定位到的要求標頭參數對您的業務沒有實際作用,您可以在CDN控制台配置刪除該要求標頭參數。關於如何刪除要求標頭參數,請參見刪除要求標頭參數

更多資訊

下面舉例介紹CDN節點追加的特定參數。

Via: cn2XXX6.l1, vcache10.cnXXX36, l2cnXXX5.l2, cache28.lXXX35
Eagleeye-Traceid: 24689aa4XXXX58162753e
Ali-Swift-Log-Host: example.aliyundoc.com
Ali-Swift-Stat-Host: demo.example.aliyundoc.com
X-Forwarded-For: 58.XX.XX.41
X-Client-Scheme: http
Ali-Cdn-Real-Ip: 58.XX.XX.41
Ali-Swift-5Xx-No-Retry: on
Cdn-Src-Ip: 127.0.0.1
Ali-Swift-Range-Cache: on
說明

下面列舉重要的參數說明。

  • Via:請求經過的CDN節點資訊。

  • Ali-Cdn-Real-Ip:用戶端真實IP地址。

  • Ali-Swift-Range-Cache:如果您啟用了Range回源,CDN節點就會追加該參數,詳情請參見配置Range回源

  • X-Forwarded-For:標準的HTTP XFF欄位。