2015-09-08 5 views
5

Есть много вопросов о том, как получить заголовки HTTP с помощью javascript, но по какой-то причине они не отображают заголовок HTTP_CF_IPCOUNTRY.Получите заголовок HTTP_CF_IPCOUNTRY Cloudflare с javascript?

Если я пытаюсь сделать с php echo $_SERVER["HTTP_CF_IPCOUNTRY"];, он работает, поэтому CF работает нормально.

Возможно ли получить этот заголовок с помощью javascript?

+0

Какой javascript вы имеете в виду - клиент или сервер (узел)? – hindmost

+0

Сторона клиента js. –

ответ

5

Предполагая, что вы говорите о стороне клиента JavaScript: нет, это невозможно.

  1. Браузер выполняет HTTP-запрос на сервер.
  2. Сервер замечает, что IP-адрес, запрос пришел от
  3. Сервер смотрит, что IP-адрес в базе данных и находит страну Комплект составят
  4. сервер передает эту страну PHP

В данных никогда даже приближается к браузеру.

Для доступа к нему JavaScript вам необходимо будет прочитать его с кодом на стороне сервера, а затем вернуть его обратно в браузер.

2

@ Ответ Квентина правилен и справедлив для любого клиента javascript, пытающегося получить доступ к заголовку сервера.

Однако, поскольку этот вопрос специфичен для Cloudlfare и специфичен для получения стандарта ISO в двух буквах в заголовке HTTP_CF_IPCOUNTRY, я считаю, что у меня есть работа, которая лучше всего подходит для заданного вопроса.

Ниже приведен фрагмент кода, который я использую на моем веб-интерфейсе Ember 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, чтобы подтвердить это.

Смежные вопросы