Усі відповіді поки що здаються або спрощеними, неповними або частково неправильними (тема складна, речі названі в оманах і недостатньо задокументовані!), Тож ось моє розуміння:
Щоб мати можливість повторно використовувати з'єднання, створене компанією <link rel=preconnect>, все залежить від того, який вміст ви хочете отримати, звідки, чи надсилатиме запит облікові дані браузера (які браузер може встановлювати явно або неявно):
Запит того самого походження ( example.comзапитує субресурс від example.com)
В preconnectпершу чергу немає потреби в цьому; браузер тримає з'єднання відкритим після завантаження сторінки досить довго. Якщо необхідно відкрити кілька з’єднань, браузер самостійно вирішує, чи і скільки їх відкрити (залежно від того, якщо сервер оголошує підтримку HTTP / 2 в рукостисканні TLS, налаштуваннях браузера тощо)
щоб перевірити : що, якщо запит того самого походження має crossoriginатрибут: він використовується чи ігнорується?
Запит перехресного походження ( example.comзапитує субресурс від another.com)
- якщо фактичний запит має
crossoriginатрибут, явно встановлений у HTML ( crossOriginу JS - важливий випадок), попередній зв’язок також повинен мати його з однаковим значенням (можливо, за винятком випадків, коли він не має сенсу і crossoriginігнорується - не повністю зрозумілий для мені ще)
- інше, якщо запит, якщо для
<script type=module>: перевірити
- інакше, якщо запит і «стара школа» запит
<img>, <style type=stylesheet>, <iframe>, класичний і <script>т.д. (ініційовані з допомогою HTML або JS) без crossoriginявно зазначеного , то preconnect не повинен мати crossoriginнабір атрибутів.
- в іншому випадку, якщо запит є запитом шрифту перехресного походження , попереднє з'єднання повинно мати
crossorigin=anonymous
- інше, якщо запит має поперечне походження
fetch або XHR:
- якщо це робиться в авторизованому режимі (тобто файли cookie приєднуються або використовується основний auth HTTP; у випадку вилучення це означає
credentials !== omit; у випадку XHR withCredentials === true:): попереднє з'єднання повинно матиcrossorigin=use-credentials
- якщо він не перебуває в обліковому режимі: попереднє підключення повинно мати
crossorigin=anonymous
Для останнього випадку (fetch / XHR) перейдіть до мережевої панелі в розробниках Chrome / Firefox, клацніть правою кнопкою миші запит і виберіть copy as fetchзі спадного меню. Це створить фрагмент JS, який підкаже вам, чи цей запит увімкнено CORS ( "mode"=="cors") та підтверджено ( "credentials"=="include"|"same-origin").
Зверніть увагу , однак трюк вище не працює для не-XHR / вибірок запитів, тому що, наприклад , fetchі <img>використовують різні алгоритми для встановлення з'єднання, як описано раніше.
Нарешті, в HTML, <link ...crossorigin>=== <link ...crossorigin=anonymous>.
Додаткові примітки та посилання: