2015-09-08 41 views
5

有很多SO問題如何使用JavaScript獲取http標頭,但由於某些原因,它們不顯示HTTP_CF_IPCOUNTRY標頭。用JavaScript獲取Cloudflare的HTTP_CF_IPCOUNTRY標頭?

如果我嘗試使用php echo $_SERVER["HTTP_CF_IPCOUNTRY"];,它可以工作,所以CF工作得很好。

是否有可能得到這個頭與JavaScript?

+0

你的意思是 - 客戶端還是服務器端(Node)? – hindmost

+0

客戶端js。 –

回答

5

假設你在談論客戶端JavaScript:不,這是不可能的。

  1. 瀏覽器向服務器發出HTTP請求。
  2. 服務器通告哪個IP地址的請求從
  3. 附帶的服務器在數據庫中查找該IP地址和查找匹配的國家
  4. 服務器通過該國PHP

數據從未甚至靠近瀏覽器。

要訪問JavaScript,您需要使用服務器端代碼讀取它,然後將其放入瀏覽器的響應中。

2

@昆汀的答案是正確的,適用於任何嘗試訪問服務器標頭的JavaScript客戶端。

但是,因爲這個問題是特定於Cloudlfare的,並且特定於在HTTP_CF_IPCOUNTRY標頭中正常獲取2個字母的國家/地區ISO,所以我相信我的解決方法最適合所問的問題。

下面是摘錄的代碼,我在我的前端灰燼App使用,坐在後面的CloudFlare ......和清漆...和... FASTBOOT

function parseTrace(url){ 
    let trace = []; 
    $.ajax(url, 
     { 
      success: function(response){ 
       let lines = response.split('\n'); 
       let keyValue; 

       lines.forEach(function(line){ 
        keyValue = line.split('='); 
        trace[keyValue[0]] = decodeURIComponent(keyValue[1] || ''); 

        if(keyValue[0] === 'loc' && trace['loc'] !== 'XX'){ 
         alert(trace['loc']); 
        } 

        if(keyValue[0] === 'ip'){ 
         alert(trace['ip']); 
        } 

       }); 

       return trace; 
      }, 
      error: function(){ 
       return trace; 
      } 
     } 
    ); 
}; 

let cfTrace = parseTrace('/cdn-cgi/trace'); 

的表現真的真的很棒,不要」即使在您調用其他API或函數之前,也不要害怕調用此函數。我發現它比從Cloudflare的緩存中檢索靜態資源快,有時甚至更快。你可以在Pingdom上運行一個配置文件來確認。