2015-12-07 15 views
7

Nie wiem dokładnie, jak o to poprosić, więc postaram się wyjaśnić na przykładzie.W jaki sposób HTTP/2 i CNAME współpracują ze sobą?

mam te zasoby na example.com, to HTTP/2 włączony serwer:

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

co chcę, aby załadować jeden z tych plików za pośrednictwem domeny aliasu cdn.example2.com który wskazuje na domenie example.com. Tak, rzeczywiste zasoby wewnątrz HTML powinien wyglądać następująco:

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

Moje pytanie brzmi: będą wszystkie zasoby w drugim przykładzie być ładowane przez przeglądarkę na jednego połączenia, jak zostaną one załadowane kiedy nie jest alias domeny?

Dzięki za pomoc.

Odpowiedz

4

Jeśli aliasy są rozdzielane na różne adresy IP, nie ma możliwości załadowania zasobów za pośrednictwem tego samego połączenia (nazywanego "ponownym użyciem połączenia" przez HTTP/2, jeśli się nie mylę). To jest problem z CDN od tutaj.

Ale dla spokoju ducha i całkowitej radości z CDN, ponowne użycie połączenia jest trudne i może nie mieć go, nawet jeśli wszystkie twoje domeny rozstrzygają się na to samo IP, co ma miejsce w twoim pytaniu.

Aby zachować aktualność w przyszłości, możesz zadbać o to, by witryny posiadały rozszerzenia certyfikatów configured correctly, aby umożliwić ponowne użycie połączenia.

W obecnych wersjach Firefoksa i Chrome nie zaobserwowałem ponownego użycia połączenia, nawet po wykonaniu certyfikatów z należytą starannością i oczywiście mając pewność, że te dwie domeny wskazują na to samo IP.

I po prostu trochę jedzenia do przemyślenia: HTTP/2 przez TLS requires SNI, co dzieje się tylko podczas otwierania połączenia. Tak więc, gdy po raz pierwszy łączysz się z jedną domeną, na przykład example.com, serwer uzyskuje dane SNI. Jednak serwer nie uzyska takich danych, jeśli to samo połączenie zostanie ponownie użyte w celu wysłania żądania na adres cdn.example.com. Niektóre serwery lub scenariusze użycia mogą być wrażliwe na tę asymetrię i mogą mieć coś wspólnego ze sposobem, w jaki przeglądarki implementują (lub nie) ponowne użycie połączenia. Ale są to tylko spekulacje naprawdę ...

+0

Aliasy w moim przykładzie zawsze będą rozwiązywać ten sam adres IP. Nie będą? –

+0

Masz rację, naprawiając to teraz. – dsign

+0

To, co dostaję, jest technicznie możliwe, ale nie jest aktualnie realizowane. Czy mam rację? –

4

Specyfikacja nie wymaga ponownego użycia, ale zawiera wyraźne informacje o tym, kiedy ponowne użycie jest dopuszczalne - na przykład dwa hosty, które rozpoznają ten sam adres IP.

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

Połączenia, które są wykonane z serwerem pochodzenia, bezpośrednio lub
przez tunel utworzony za pomocą metody connect (sekcja 8.3), mogą
być ponownie wykorzystane do wniosków ze stwardnieniem innego organu URI
składników. Połączenie może być ponownie użyte, o ile serwer źródłowy jest autorytatywny (sekcja 10.1). W przypadku połączeń TCP bez TLS,
zależy to od hosta, który rozwiązał ten sam adres IP.

Dla zasobów "https" ponowne użycie połączenia jest dodatkowo zależne od
posiadającego certyfikat, który jest ważny dla hosta w URI.Certyfikat wystawiony przez serwer MUSI spełniać wszystkie testy, które wykonałby klient, tworząc nowe połączenie TLS dla hosta
w URI.

Powiązane problemy