2015-09-08 12 views
5

Ci sono molte domande su come ottenere le intestazioni http con javascript, ma per qualche motivo non vengono visualizzate nell'intestazione HTTP_CF_IPCOUNTRY.Ottieni l'intestazione HTTP_CF_IPCOUNTRY di Cloudflare con javascript?

Se provo a fare con php echo $_SERVER["HTTP_CF_IPCOUNTRY"];, funziona, quindi CF sta funzionando bene.

E 'possibile ottenere questa intestazione con javascript?

+0

Quale javascript intendi: client o lato server (nodo)? – hindmost

+0

Lato client js. –

risposta

5

Supponendo che si parli di JavaScript lato client: no, non è possibile.

  1. Il browser invia una richiesta HTTP al server.
  2. Gli avvisi del server quale indirizzo IP della richiesta provenivano da
  3. Il server cerca l'indirizzo IP in un database e trova il paese di corrispondenza
  4. Il server passa quel paese a PHP

I dati mai va anche vicino al browser.

Per consentire a JavaScript di accedervi, è necessario leggerlo con il codice lato server e quindi riportarlo in risposta al browser.

2

@ La risposta di Quentin è corretta e vale per qualsiasi client javascript che tenta di accedere alle intestazioni del server.

Tuttavia, poiché questa domanda è specifica per Cloudlfare e specifica per ottenere normalmente l'ISO del paese di 2 lettere nell'intestazione HTTP_CF_IPCOUNTRY, credo di avere un work-around che si adatta meglio alla domanda posta.

Qui di seguito un estratto di codice che uso sul mio frontend Ember App, seduto dietro Cloudflare ... e vernici ... e 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'); 

La performance è davvero davvero grande, don' t aver paura di chiamare questa funzione anche prima di chiamare altre API o funzioni. Ho trovato che sia veloce o talvolta anche più veloce del recupero di risorse statiche dalla cache di Cloudflare. Puoi eseguire un profilo su Pingdom per confermarlo.

Problemi correlati