2015-09-08 60 views
5

Istnieje wiele pytań dotyczących SO, jak uzyskać nagłówki http z javascript, ale z jakiegoś powodu nie pokazują nagłówka HTTP_CF_IPCOUNTRY.Uzyskaj nagłówek HTTP_CF_IPCOUNTRY Cloudflare z javascript?

Jeśli spróbuję zrobić z php echo $_SERVER["HTTP_CF_IPCOUNTRY"];, to działa, więc CF działa dobrze.

Czy można uzyskać ten nagłówek za pomocą javascript?

+0

Który javascript masz na myśli - klient lub serwer (Node)? – hindmost

+0

Strona js klienta. –

Odpowiedz

5

Zakładając, że mówisz o JavaScript po stronie klienta: nie, nie jest to możliwe.

  1. Przeglądarka wysyła żądanie HTTP do serwera.
  2. Ogłoszenia serwerowe co adres IP żądanie pochodzi od
  3. Serwer patrzy się, że adres IP w bazie danych i wyszukuje krajowi Dopasowany
  4. Serwer przechodzi ten kraj do PHP

Te dane nigdy nawet zbliża się do przeglądarki.

Aby uzyskać dostęp do kodu JavaScript, należy go odczytać za pomocą kodu po stronie serwera, a następnie umieścić go w odpowiedzi z powrotem do przeglądarki.

2

@ Odpowiedź Quentina jest prawidłowa i odnosi się do każdego klienta javascript próbującego uzyskać dostęp do nagłówków serwera.

Jednakże, ponieważ to pytanie jest specyficzne dla Cloudlfare i specyficzne dla uzyskania 2 literowego kraju ISO w nagłówku HTTP_CF_IPCOUNTRY, uważam, że mam obejście, które najlepiej pasuje do zadawanego pytania.

Poniżej znajduje się fragment kodu, który używam na moim frontend Ember App, siedząc za Cloudflare ... i lakier ... i 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'); 

wydajność jest naprawdę bardzo wielka, don” Nie obawiaj się wywoływać tej funkcji, nawet zanim zadzwonisz do innych API lub funkcji. Stwierdziłem, że jest tak szybki, a czasem nawet szybszy od pobierania statycznych zasobów z pamięci podręcznej Cloudflare. Możesz uruchomić profil w Pingdom, aby to potwierdzić.