Şimdiye kadar tüm cevaplar ya basitleştirilmiş, eksik ya da kısmen yanlış görünüyor (konu karmaşık, işler kafa karıştırıcı bir şekilde adlandırılmış ve iyi belgelenmemiş!), İşte benim anlayışım:
Tarafından oluşturulan bağlantıyı yeniden kullanabilmek için <link rel=preconnect>
, ne tür içerik almak istediğinize, isteğin tarayıcı kimlik bilgilerini gönderip gönderemeyeceğine (tarayıcı tarafından açıkça veya örtük olarak kurulabileceğine) bağlıdır.
İstek aynı kökenlidir ( example.com
alt kaynağı talep eder example.com
)
preconnect
İlk etapta hiç gerek yok ; tarayıcı, sayfayı bir süre yükledikten sonra bağlantıyı açık tutar. Açılacak birden fazla bağlantı varsa, tarayıcı açılıp açılmayacağına ve kaç tane açılacağına kendisi karar verir (sunucunun TLS el sıkışmasında HTTP / 2 desteğini duyurup duymadığına bağlı olarak, tarayıcı ayarları vb.)
denetlenecek : aynı kökenli istek crossorigin
özniteliğe sahipse : kullanılır veya yoksayılır mı?
İstek çapraz kökenli ( example.com
alt kaynak talepleri another.com
)
- Gerçek istek varsa
crossorigin
nitelik açıkça ayarlanmış HTML ( crossOrigin
JS - vaka önemlidir), önceden bağlanma ayrıca, buna sahip olmalıdır aynı değere sahip (belki de mantıklı değil ve nerede durumlar dışında crossorigin
göz ardı edilir - değil tamamen için temizleyin henüz ben)
- aksi takdirde, eğer istenirse
<script type=module>
: kontrol edilecek
- talebidir ve için "eski okul" istek eğer başka,
<img>
, <style type=stylesheet>
, <iframe>
, klasik <script>
vb (HTML veya JS ile kontrol) olmadan crossorigin
açıkça belirtilmiş , daha sonra önceden bağlanma ZORUNLU OLMAYAN crossorigin
nitelik kümesi.
- aksi halde, istek çapraz kökenli bir yazı tipi isteğiyse, preconnect
crossorigin=anonymous
- aksi halde, istek bir çapraz kökense
fetch
veya XHR
:
- kimlik bilgileri modunda yapılırsa (yani çerezler eklenir veya HTTP temel kimlik doğrulaması kullanılır; getirme durumunda bu demektir
credentials !== omit
; XHR durumunda withCredentials === true
:): preconnectcrossorigin=use-credentials
- kimlik bilgisi modunda değilse: preconnect
crossorigin=anonymous
Son durumda (getir / XHR), Chrome / Firefox cihazlarındaki ağ paneline gidin, bir isteği sağ tıklayın ve copy as fetch
bir açılır menüden seçim yapın . Bu, bu isteğin CORS etkin ( "mode"=="cors"
) ve kimlik bilgisi ( "credentials"=="include"|"same-origin"
) olup olmadığını bildiren bir JS snippet'i oluşturur .
Bununla birlikte, yukarıdaki hile XHR olmayan / getirme istekleri için doğru çalışmaz, çünkü örneğin fetch
ve daha <img>
önce açıklandığı gibi bağlantı kurmak için farklı algoritmalar kullanır.
Son olarak, HTML'de <link ...crossorigin>
=== <link ...crossorigin=anonymous>
.
Ek notlar ve bağlantılar: