2015-12-07 6 views
7

Я не знаю точно, как его спросить, поэтому я попытаюсь объяснить на примере.Как работают HTTP/2 и CNAME вместе?

У меня есть эти ресурсы на example.com, в HTTP/2 включен сервер:

//example.com/css/file.css 
//example.com/js/file.js 
//example.com/images/file.png 

То, что я хочу, чтобы загрузить один из этих файлов через домен cdn.example2.com псевдоним, который указывает на домен example.com. Таким образом, фактические ресурсы внутри HTML должен выглядеть следующим образом:

//example.com/css/file.css 
//cdn.example2.com/js/file.js -> points to //example.com/js/file.js 
//example.com/images/file.png 

Мой вопрос здесь не: Должен ли все ресурсы во втором примере будет загружен браузером через одно соединение, как они будут загружены, когда нет псевдоним домена?

Спасибо за помощь.

ответ

4

Если псевдонимы разрешены для разных IP-адресов, невозможно загрузить ресурсы по одному и тому же соединению (так называемое «повторное использование соединения» по протоколу HTTP/2, если я не ошибаюсь). Это проблема с CDN отсюда.

Но для вашего спокойствия и полного удовлетворения CDN, повторное использование соединения является сложной задачей, и у вас может не быть этого, даже если все ваши домены разрешают один и тот же IP-адрес, как в случае с вашим вопросом.

Чтобы быть в будущем доказательством, вы можете убедиться, что на ваших сайтах есть расширения сертификатов configured correctly, чтобы включить повторное использование соединения.

В текущих версиях Firefox и Chrome я не наблюдал повторного использования соединений даже после создания сертификатов со всей тщательностью и, конечно же, уверен, что эти два домена указывают на один и тот же IP-адрес.

И только пища для мыслей: HTTP/2 над TLS requires SNI, что происходит только при открытии соединения. Поэтому, когда вы впервые подключаетесь к одному домену, например example.com, сервер получает данные SNI. Но сервер не получит такие данные, если одно и то же соединение повторно используется для отправки запроса на cdn.example.com. Некоторые серверы или сценарии использования могут быть чувствительны к этой асимметрии, и это может иметь какое-то отношение к тому, как браузеры используют (или нет) повторное использование соединения. Но это только ваши предположения ...

+0

Псевдонимы в моем примере всегда будут разрешаться на один и тот же IP-адрес. Не так ли? –

+0

Вы правы, исправляя это сейчас. – dsign

+0

То, что я получаю, технически возможно, но не реализовано в настоящее время. Я прав? –

4

Спецификация не требует повторного использования, но в ней явно указывается информация о допустимости повторного использования - например, два хоста, которые разрешают один и тот же IP-адрес.

https://tools.ietf.org/html/rfc7540#section-9.1.1

Соединения, которые сделаны на сервер происхождения, либо непосредственно, либо
через туннель создается с помощью метода CONNECT (раздел 8.3) может
быть повторно использованы для запросов с нескольких различных полномочий URI
компонентов. Соединение может быть повторно использовано до тех пор, пока исходный сервер
является авторитетным (раздел 10.1). Для TCP-соединений без TLS,
это зависит от того, что хост имеет тот же IP-адрес.

Для ресурсов «https» повторное использование соединения дополнительно зависит от
, имеющего сертификат, действительный для хоста в URI.Сертификат
, предоставленный сервером, ДОЛЖЕН удовлетворить любые проверки, которые клиент
будет выполнять при формировании нового соединения TLS для хоста
в URI.