Правильно ли, что Nginx сообщает коды состояния HTTP/1.1 с помощью SPDY (3.1)?
Вопросы
- Должен ли я смотреть на заголовки ответа, как
X-Firefox-Spdy
определить, какой протокол был фактически использован? - Могу ли я предположить, что Nginx сообщит коды состояния HTTP/2, как только реализация будет завершена, потому что это ожидаемое поведение, или есть что-то в кодах состояния, которых я не знаю?
Информация, найденная при составлении этого вопроса:
- Nginx игнорирует клиентский запрос HTTP 1.0 и отвечает по HTTP 1.1
- Apache с поддержкой SPDY показывает HTTP/1.1, а не 2.0
Расследование и детали
В настоящее время я проверяю настройки своего сервера, и меня немного смущают коды состояния http, которые я вижу в консоли разработчика моего браузера.
Мой сервер работает под управлением Ubuntu 14.04 с обновленной версией Nginx ( PPA). Nginx настроен на использование SPDY и самозаверяющего сертификата. Я думаю, что SPDY настроен правильно, так как тест Qualys SSL Labs сообщил, что сервер предлагает SPDY 3.1 (и, конечно, существует множество плагинов для браузера), но это HTTP/1.1 200
правильный?
Вот полный запрос от моего сервера:
Request-URL: https://myserver/lib/dojo/something.js?123456789
Request-Methode: GET
Status-Code: HTTP/1.1 200 OK
Request-Header 13:50:30.000
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:40.0) Gecko/20100101 Firefox/40.0
Referer: https://myserver/index.php
Pragma: no-cache
Host: myserver
DNT: 1
Connection: keep-alive
Cache-Control: no-cache
Accept-Language: de-DE,en-US;q=0.8,de;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Accept: */*
Sent Cookie
-xxx-
Response-Header Δ1ms
X-Firefox-Spdy: 3.1
Strict-Transport-Security: max-age=15768000; includeSubDomains
Server: nginx/1.9.3
Last-Modified: Tue, 08 Sep 2015 08:46:10 GMT
Expires: Thu, 31 Dec 2037 23:55:55 GMT
Etag: "-xxx-"
Date: Sat, 12 Sep 2015 11:50:30 GMT
Content-Type: application/javascript
Content-Length: 435035
Cache-Control: max-age=315360000
Accept-Ranges: bytes
Вот запрос на отчёт о внешнем активе HTTP/2.0 200
:
Request-URL: https://fonts.googleapis.com/css?family=Ubuntu
Request-Methode: GET
Status-Code: HTTP/2.0 200 OK
Request-Header 13:50:31.000
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:40.0) Gecko/20100101 Firefox/40.0
Referer: https://myserver/index.php
Pragma: no-cache
Host: fonts.googleapis.com
DNT: 1
Connection: keep-alive
Cache-Control: no-cache
Accept-Language: de-DE,en-US;q=0.8,de;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Accept: text/css,*/*;q=0.1
Response-Header Δ87ms
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
X-Firefox-Spdy: h2
X-Content-Type-Options: nosniff
Timing-Allow-Origin: *
Server: GSE
Expires: Sat, 12 Sep 2015 11:50:31 GMT
Date: Sat, 12 Sep 2015 11:50:31 GMT
Content-Type: text/css
Content-Length: 308
Content-Encoding: gzip
Cache-Control: private, max-age=86400
alternate-protocol: 443:quic,p=1
Alt-Svc: quic=":443"; p="1"; ma=604800
access-control-allow-origin: *
Я прочитал это объявление о том, как NGINX планирует поддерживать HTTP/2, что помогло мне понять, почему я все еще могу видеть запросы к приложениям с HTTP/1.1. Однако я сам не скомпилировал Nginx с патчем и не знал, что искать в источнике, но я предполагаю, что Nginx pre-HTTP/2 просто сообщает HTTP/1.1
коды состояния, даже если он использует SPDY, тогда как другое программное обеспечение (например, GSE) может вести себя по-другому.