2014-11-30 3 views
3

Возможно ли обнаружить поддержку браузера для HTTP2/SPDY на стороне клиента из браузера?Обнаружение поддержки HTTP2/SPDY в браузере

Я пытаюсь показать пользователям, поддерживает ли их браузер HTTP2/SPDY или использует традиционный протокол HTTP-протоколов HTTP/SPDY.

+0

Не Client- сторона pre tty много всегда означает JavaScript в браузере? –

ответ

2

Нет, не совсем. По крайней мере, таким образом, чтобы это имело смысл или действовало.

Фронтальный javascript будет работать после того, как сервер уже обслужил все активы. Все, что вы хотите делать, будет сделано на стороне сервера. Браузер, совместимый с SPDY, должен автоматически согласовывать с сервером SPDY.

Все, что вам нужно сделать, это настроить его для этого (nginx и apache). Вы также можете отправить заголовок Alternate-Protocol с вашими ответами https. В случае, если это возможно, браузер будет отвечать запросами SPDY в будущем (я не могу найти это в обновленной спецификации SPDY, так что это может быть устаревшая информация. Возьмите с солью).

Если вы хотите узнать, был ли сайт предоставлен с SPDY, в chrome есть chrome.loadTimes(). WasFetchedViaSpdy (очевидно, работает только в хромированном виде). Для firefox и safari вам нужно будет проверить заголовки (насколько я знаю, нет подобного апи, хотя для этого есть plugins). SPDYCheck - еще один отличный ресурс для проверки правильности установки сервера.

1

Спасибо, Патрик. Я принял ваш совет и использовал nginx's $http2 переменную и использовал PHP для возврата динамической переменной JS для обнаружения браузера. (Передача файла cookie или добавление заголовка ответа для обнаружения AJAX также являются опциями, если предпочитают другие читатели).

Nginx дополнения конфигурации

server { 
    ... 

    if ($http2) { 
     rewrite ^/detect-http2.js /detect-http2.js.php?http2=$http2 last; 
    } 
    # fallback to non-HTTP2 rewrite 
    rewrite ^/detect-http2.js /detect-http2.js.php last; 

    # add response header if needed in the future 
    add_header x-http2 $http2; 
} 

детектировать-http2.js.php

<? 
    header('content-type: application/javascript'); 
    if (isset($_REQUEST['http2'])) { 
     echo "var h2Version='". $_REQUEST['http2'] . "';\n"; 
    } 
?> 

детектировать-http2.html

<html> 
    <body> 
     <script src="https://DOMAIN_NAME/detect-http2.js"></script> 
     <script> 
      document.write('HTTP2-Supported Browser: '+ (typeof h2Version !== 'undefined')); 
     </script> 
    </body> 
</html> 
Смежные вопросы