nginx kullanarak SXG dosyalarını alma ve sunma ve alt kaynak ön 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 yayınlanmış gibi gösterir. Bu sayede gizliliği ihlal etmeden siteler arası önceden yükleme uygulayabilirsiniz. Bu kılavuzda, SXG'yi nasıl doğru şekilde dağıtacağınız gösterilmektedir.
Tarayıcılar arası destek
Chrome, şu anda SXG'yi destekleyen tek tarayıcıdır. Daha güncel bilgiler için Kaynak Tarafından İmzalanan HTTP Exchange'leri başlıklı makalenin Fikir Birliği ve Standartlaştırma bölümüne bakın.
SXG dosyalarını alma
Accept
istek başlığınızda, 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
'ye koyduğunuz varsayılmaktadır.
Basit bir SXG dosyası yayınlama
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
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
'e yükleyin:
sudo systemctl restart nginx.service
nginx
, SXG dosyalarını sunmaya başlar.
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 fazla alt kaynaktan oluşur. SXG'nin içeriği, içerik üreticinin özel anahtarı olmadan değiştirilemez. Bu durum, tarayıcı alt kaynakları çözmeye çalışırken sorunlara neden olur.
Örneğin, https://website.test/index.html
'daki index.html.sxg
'nin https://website.test/app.js
'ye bağlantısı 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
'ü kendi hizmetinden yayınlamak isterse ve https://website.test/app.js
'u distribütörün bu alt kaynağının sürümü (https://distributor.test/website.test/app.js.sxg
gibi) olacak şekilde değiştirmeye çalışırsa imza uyuşmazlığı oluşur ve SXG geçersiz olur.
Bu sorunu çözmek için Chrome'da deneysel bir SXG alt kaynağı ön getirme özelliği mevcuttur.
Bu özelliği about://flags/#enable-sxg-subresource-prefetching
adresinden etkinleştirebilirsiniz.
Alt kaynak ön 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'ye özgü bütünlük karmasıyla değiştirilebilecek alt kaynağı belirtir. - Distribütör, SXG'yi yayınlarken bir yanıt başlığı eklemelidir (ör.
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 içerik distribütörünün SXG'de belirtilen alt kaynakları bilmesi gerektiğinden ikinci yöntem daha zordur.
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 edin.
Geri bildirim gönder
Chromium mühendisleri, SXG dağıtımıyla ilgili geri bildirimlerinizi webpackage-dev@chromium.org adresinden bekliyor. Ayrıca özellik tartışmasına katılabilir veya ekibe 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!