Tất cả các câu trả lời cho đến nay dường như sai một phần hoặc không đầy đủ (chủ đề rất phức tạp, mọi thứ được đặt tên khó hiểu và không được ghi chép rõ ràng!), Vì vậy đây là cách hiểu của tôi:
Để có thể sử dụng lại kết nối được tạo bởi <link rel=preconnect> , mọi thứ phụ thuộc vào loại nội dung bạn muốn tìm nạp, từ đâu, liệu yêu cầu sẽ gửi thông tin xác thực của trình duyệt (có thể được trình duyệt xác lập rõ ràng hoặc ẩn):
Yêu cầu có cùng nguồn gốc ( example.comyêu cầu nguồn phụ từexample.com )
Không cần thiết preconnectở nơi đầu tiên; trình duyệt giữ kết nối mở sau khi tải trang khá lâu.
để được kiểm tra : điều gì xảy ra nếu yêu cầu cùng nguồn gốc có crossoriginthuộc tính: nó được sử dụng hay bỏ qua?
Yêu cầu có nguồn gốc chéo ( example.comyêu cầu nguồn phụ từ another.com)
- nếu yêu cầu thực tế (trong HTML hoặc thông qua JS) có
crossoriginthuộc tính được đặt rõ ràng ( crossOrigintrong trường hợp JS là quan trọng), thì kết nối trước cũng phải có nó, với cùng một giá trị (có lẽ ngoại trừ trong trường hợp không có ý nghĩa và crossoriginbị bỏ qua - - chưa hoàn toàn rõ ràng cho tôi)
- khác, nếu yêu cầu nếu cho
<script type=module>: được kiểm tra
- khác, nếu yêu cầu là và "trường cũ" đề nghị
<img>, <style type=stylesheet>, <iframe>, cổ điển <script>vv (khởi xướng qua HTML hoặc JS) mà không crossoriginquy định một cách rõ ràng , thì preconnect không có crossoriginbộ thuộc tính.
- khác, nếu yêu cầu là một yêu cầu phông chữ chéo , kết nối phải có
crossorigin=anonymous
- khác, nếu yêu cầu là nguồn gốc chéo
fetch hoặc XHR:
- nếu nó được thực hiện trong chế độ xác thực (ví dụ: cookie được đính kèm hoặc xác thực cơ bản HTTP được sử dụng; trong trường hợp tìm nạp, điều này có nghĩa là
credentials !== omit, trong trường hợp XHR withCredentials === true:): phải kết nối trướccrossorigin=use-credentials
- nếu nó không ở chế độ xác thực: phải kết nối trước
crossorigin=anonymous
Đối với trường hợp cuối cùng (tìm nạp / XHR), hãy chuyển đến bảng điều khiển mạng trong devtools Chrome / Firefox, nhấp chuột phải vào yêu cầu và chọn copy as fetchtừ danh sách thả xuống. Điều này sẽ tạo một đoạn mã JS, nó sẽ cho bạn biết nếu yêu cầu đó được kích hoạt CORS ( "mode"=="cors") và được chứng nhận ( "credentials"=="include"|"same-origin").
Tuy nhiên, xin lưu ý rằng mẹo trên không hoạt động chính xác cho các yêu cầu không XHR / tìm nạp, vì ví dụ fetchvà <img>sử dụng các thuật toán khác nhau để thiết lập kết nối, như đã giải thích trước đây.
Cuối cùng, trong HTML, <link ...crossorigin>=== <link ...crossorigin=anonymous>.
Ghi chú và liên kết bổ sung: