Как я могу определить на стороне сервера, поддерживает ли клиент SPDY?
Как я могу определить на стороне сервера, поддерживает ли клиент SPDY?
Я хочу, чтобы мой сайт был максимально быстрым. Вот что я думаю: (Примечание: моему веб-сайту не нужно передавать конфиденциальные данные.) Если браузер подключается к моему веб-сайту по протоколу HTTPS, но не поддерживает SPDY, это будет пустой тратой. Ненужные накладные расходы из-за HTTPS, верно? С другой стороны, если браузер подключается через HTTP и поддерживает SPDY, это будет упущенная возможность.
Похоже, что NPN - это технология, которую клиент и сервер используют для согласования SPDY или нет. Это происходит на веб-сервере до того, как он попадет в код моего приложения, верно? Полагаю, тогда мне действительно понадобится модифицированная версия NPN (даже не уверенная, действительно ли это что-то свое за пределами SPDY) или mod_spdy. В идеале такая версия должна иметь опцию под названием use_spdy_if_available_otherwise_redirect_to_http
,:-)
О, и если все это не достаточно сложно, я сейчас использую сервис CDN Cloudflare. Я почти уверен, что у меня нет возможности изменить то, как они действуют в этом отношении, и поэтому у меня нет шансов, верно?
2 ответа
Все данные являются конфиденциальными: сайты, которые вы посещаете, страницы, которые вы просматривали и т. Д. Объединяя эти данные на многих страницах, вы можете многое узнать о пользователе: его намерениях, интересах и т. Д. Следовательно, нам нужны HTTPS везде. Для получения дополнительной информации см. Наш доклад по вводу / выводу Google [1] на эту тему.
С точки зрения определения поддержки SPDY, да, вы хотите использовать NPN/ALPN (ALPN является преемником [2]). Клиент отправляет ProtocolNameList
в их рукопожатии, который рекламирует, какие протоколы они поддерживают. Большинство серверов будут использовать это для автоматического согласования SPDY, но если вы хотите контролировать это решение самостоятельно, вам придется изменить реализацию вашего сервера, чтобы вызвать своего рода обратный вызов, когда выполняется безопасное рукопожатие.
Тем не менее, учитывая то, что я говорил ранее о HTTPS везде, я бы советовал вам вообще против этого. Используйте HTTPS везде, и пусть браузер и сервер автоматически согласовывают SPDY, если он поддерживается.
Я согласен с советом Игригорика: не перенаправляйте пользователей с HTTPS на HTTP. Это просто не круто. Несмотря на это, у меня была эта проблема обнаружения сегодня, и мой ответ ниже.
В NGINX (у меня работает 1.7.7), $spdy
переменная будет установлена, если клиент соединяется с SPDY-соединением. Иначе, $spdy
не будет иметь значения. Например, я передаю пользовательский параметр URL в скрипт php:
server {
listen 443 ssl spdy;
...
...
# add SPDY rewrite param
if ($spdy) {
rewrite ^/detect-spdy.js /detect-spdy.js.php?spdy=$spdy last;
}
# fallback to non-SPDY rewrite
rewrite ^/detect-spdy.js /detect-spdy.js.php last;
# add response header if needed later
add_header x-spdy $spdy;
}