Nginx kullanarak SXG dosyalarını alma ve sunma ve alt kaynağı önceden getirmenin zorlukları.
İmzalanmış HTTP Takası (SXG) distribütörü olarak orijinal içerik üreticiler adına SXG dosyalarını gönderebilirsiniz. SXG'yi destekleyen web tarayıcıları, bu tür SXG dosyalarını orijinal içerik üreticilerden gönderilmiş gibi gösterir. Bu sayede gizliliği ihlal etmeden siteler arası önceden yükleme uygulayabilirsiniz. Bu kılavuzda, SXG'nin nasıl doğru bir şekilde dağıtılacağı gösterilmektedir.
Tarayıcılar arası destek
Chrome şu anda SXG'yi destekleyen tek tarayıcıdır. Fikir Birliği Var ve Daha güncel bilgiler için Kaynak İmzalı HTTP Takasları başlığının Standartlaştırma bölümüne bakın.
SXG dosyalarını alma
Accept
istek başlığında, sunucunun istekle birlikte bir SXG dosyası döndürmesini istediğinizi belirtin:
Accept: application/signed-exchange;v=b3,*/*;q=0.8
Bu kılavuzda, SXG dosyalarınızı /var/www/sxg
konumuna yerleştirdiğiniz varsayılmaktadır.
Basit bir SXG dosyası sunma
Tek bir SXG dosyası dağıtmak için aşağıdaki üstbilgileri ekleyin:
Content-Type: application/signed-exchange;v=v3
X-Content-Type-Options: nosniff
nginx
'i yapılandırın:
http {
...
types {
application/signed-exchange;v=b3 sxg;
}
add_header X-Content-Type-Options nosniff;
location / {
more_set_headers "Content-Type: application/signed-exchange;v=b3";
alias /var/www/sxg/;
try_files $uri.sxg $uri =404;
autoindex off;
}
...
Yeni yapılandırmayı nginx
ürününe yükleyin:
sudo systemctl restart nginx.service
nginx
, SXG dosyalarını sunmaya başlayacak.
Chrome sunucunuza eriştiğinde, çubukta orijinal içerik yayıncısının adresi görünür!
Alt kaynakları önceden getir
Çoğu web sayfası CSS, JavaScript, yazı tipleri ve resimler gibi birden çok alt kaynaktan oluşur. SXG'nin içeriği, içerik üreticinin özel anahtarı olmadan değiştirilemez. Bu durum, tarayıcı alt kaynakları çözümlemeye çalıştığında sorunlara neden olur.
Örneğin, https://website.test/index.html
konumundaki index.html.sxg
ile https://website.test/app.js
bağlantısının olduğunu varsayalım. Kullanıcının tarayıcısı https://distributor.test/example.com/index.html.sxg
adresinden SXG dosyasını aldığında https://website.test/app.js
bağlantısını bulur.
Tarayıcı, gerçek erişimde doğrudan https://website.test/app.js
öğesini getirebilir, ancak gizliliği korumak için bu işlem önceden yükleme aşamasında yapılmamalıdır.
Kaynak, önceden yükleme aşamasında getirildiyse içerik üretici (website.test
) hangi içerik dağıtıcısının (distributor.test
) kaynak istediğini tespit edebilir.
Distribütör, app.js.sxg
öğesini kendi hizmetinden yayınlamak ister ve https://website.test/app.js
öğesini söz konusu alt kaynağın dağıtımcı sürümü (ör. https://distributor.test/website.test/app.js.sxg
) olacak şekilde değiştirmeye çalışırsa imza uyuşmazlığına neden olur ve SXG geçersiz hale gelir.
Bu sorunu çözmek için artık Chrome'da deneysel bir SXG alt kaynağı önceden getirme özelliği bulunmaktadır.
Bu özelliği about://flags/#enable-sxg-subresource-prefetching
adresinden etkinleştirebilirsiniz.
Alt kaynağı önceden getirme özelliğini kullanmak için aşağıdaki koşulların karşılanması gerekir:
- Yayıncı, SXG'ye şu gibi bir yanıt başlığı girişi yerleştirmelidir:
link: <https://website.test/app.js>;rel="preload";as="script",<https://website.test/app.js>;rel="allowed-alt-sxg";header-integrity="sha256-h6GuCtTXe2nITIHHpJM+xCxcKrYDpOFcIXjihE4asxk="
. Bu, SXG'nin belirli bütünlük karmasıyla değiştirilebilecek alt kaynağı belirtir. - Distribütör, SXG'yi sunarken şu gibi bir yanıt başlığı eklemelidir:
link: <https://distributor.test/website.test/app.js.sxg>;rel="alternate";type="application/signed-exchange;v=b3";anchor="https://website.test/app.js"
. Bu,app.js
yolunu belirtir ve alt kaynağa karşılık gelir.
nginx-sxg-module
, bütünlük karmalarını hesaplayıp yukarı akış yanıtlarındaki bağlantı başlıklarına yerleştirebildiğinden ilki nispeten kolaydır. Ancak ikinci yöntem daha zordur. Çünkü içerik dağıtıcı, SXG'de belirtilen alt kaynakların farkında olmalıdır.
https://website.test/app.js
dışında alt kaynak yoksa nginx yapılandırmanıza eklemeniz gereken tek şey şu şekildedir:
add_header link <https://distributor.test/website.test/app.js.sxg>;rel="alter...
Ancak bu tür durumlar nadirdir çünkü tipik web siteleri birçok alt kaynaktan oluşur. Ayrıca distribütör, SXG dosyası sunarken uygun bağlayıcı bağlantı başlığını eklemelidir. Şu anda bu sorunu çözmenin kolay bir yolu yoktur. Güncellemeler için bizi takip etmeye devam edin.
Geri bildirim gönder
Chromium mühendisleri, webpackage-dev@chromium.org adresinden SXG dağıtımıyla ilgili geri bildiriminizi öğrenmekten memnuniyet duyar. Ayrıca spesifikasyon tartışmasına katılabilir veya ekibe bir hata bildirebilirsiniz. Geri bildirimleriniz, standartlaştırma sürecine büyük katkıda bulunacak ve uygulama sorunlarının çözülmesine yardımcı olacaktır. Teşekkürler!