Ş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.comalt 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.comalt kaynak talepleri another.com)
- Gerçek istek varsa
crossoriginnitelik açıkça ayarlanmış HTML ( crossOriginJS - 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 crossorigingö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 crossoriginaçıkça belirtilmiş , daha sonra önceden bağlanma ZORUNLU OLMAYAN crossoriginnitelik 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 fetchbir 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 fetchve 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: