Saya ingin menyertakan beberapa petunjuk sumber daya sebelum masuk di situs saya sehingga browser dapat (misalnya) terhubung ke CDN jQuery sebelum mereka benar-benar melihat tag skrip yang memanggil CDN. Saya tidak yakin apakah saya harus menyertakan atribut "crossorigin" atau berapa nilainya. The spek mengatakan, sebagian,
Untuk memulai preconnect, agen pengguna harus menjalankan langkah-langkah ini:
[...]
- Biarkan corsAttributeState menjadi kondisi saat ini dari
crossorigin
atribut konten elemen .- Biarkan kredensial menjadi nilai boolean yang ditetapkan
true
.- Jika corsAttributeState adalah
Anonymous
dan asal tidak sama dengan asal Dokumen saat ini, setel kredensial kefalse
.- Mencoba untuk mendapatkan koneksi dengan asal dan kredensial .
Saya tidak tahu bagaimana menafsirkan algoritma ini. Jika saya terhubung ke CDN, yang akan membiarkan siapa pun mengunduh kontennya tanpa kredensial apa pun, nilai apa yang harus saya gunakan untuk atribut "crossorigin"?
html
performance
cross-origin
bdesham
sumber
sumber
Jawaban:
Saya sedang mencari hal yang sama dan saya menemukan ini
Ini menyatakan di sini bahwa jika Anda tidak menggunakan atribut asal silang agen pengguna hanya melakukan pencarian dns tetapi tidak membuat koneksi dengan domain tertentu. Jadi atribut crossorigin diperlukan jika Anda harus melakukan prekoneksi ke cross domain, seperti ini:
Juga jika Anda ingin mengirim beberapa kredensial ke domain lintas tertentu, Anda dapat mengatur nilai menjadi crossorigin karena
crossorigin = use-credentials
jika tidak saya pikir nilai defaultnya adalah anonim.sumber
crossorigin
juga akan membuang-buang koneksi, karena koneksi baru harus dibuka sehingga tidak menggunakan CORS.Sejauh ini saya mengerti penggunaan
crossorigin
, khususnya dalam hal nilainyaanonymous
danuse-credentials
, Anda harus menggunakannyacrossorigin="use-credentials"
jika:Selain dokumentasi yang dikutip oleh Anda saya punya ini dan itu . Tapi memang dokumentasinya menyesatkan dan mengandung kesalahan ejaan: yang pertama menyebutnya
use-credentials
, yang kedua -user-credentials
.Bagaimanapun, dalam pemahaman saya:
crossorigin
sama sekali equalscrossorigin="anonymous"
crossorigin
sama dengancrossorigin="use-credentials"
Mungkin seseorang akan mengoreksi saya.
PS : Versi halaman Mozilla saat ini untuk subjek berarti:
Berarti: tidak ada
crossorigin
sama sekali,crossorigin
ataucrossorigin="use_credentials"
semua ditangani sebagaicrossorigin="anonymous"
.sumber
crossorigin
sama dengancrossorigin="anonymous"
.Itu tergantung pada dua hal:
Untuk jQuery, Anda tidak akan menggunakan
crossorigin
. Skrip tidak termasuk jenis sumber daya yang digunakan browser untuk mengunduh CORS .Font, di sisi lain, gunakan CORS.
crossorigin
atributnya.crossorigin
. JikaInilah pos Stack Overflow tempat saya mengalami masalah yang sama.
Saya belum menyelami ketika kredensial CORS diperlukan. Saya belum melihat contoh di mana mereka dibutuhkan, jadi kemungkinan Anda aman dengan
crossorigin
(yaitu `crossorigin =" anonim ").sumber
Semua jawaban sejauh ini tampaknya disederhanakan, tidak lengkap atau sebagian salah (topiknya kompleks, semuanya membingungkan dan tidak didokumentasikan dengan baik!), Jadi inilah pemahaman saya:
Untuk dapat menggunakan kembali koneksi yang dibuat oleh
<link rel=preconnect>
, hal-hal tergantung pada jenis konten yang ingin Anda ambil, dari mana, apakah permintaan akan mengirim kredensial browser (yang dapat dibuat oleh browser secara eksplisit atau implisit):Permintaan sama-asal (
example.com
permintaan sub-sumber dariexample.com
)preconnect
Pertama-tama tidak perlu sama sekali; browser membuat koneksi tetap terbuka setelah memuat halaman cukup lama. Jika ada beberapa koneksi yang akan dibuka, browser memutuskan sendiri apakah dan berapa banyak yang akan dibuka (tergantung apakah server mengumumkan dukungan HTTP / 2 dalam jabat tangan TLS, pengaturan browser, dll.)untuk diperiksa : bagaimana jika permintaan asal-sama memiliki
crossorigin
atribut: apakah itu digunakan atau diabaikan?Permintaan berasal dari silang (
example.com
meminta sumber daya darianother.com
)crossorigin
atribut yang secara eksplisit diatur dalam HTML (crossOrigin
dalam JS - case penting), preconnect juga harus memilikinya, dengan nilai yang sama (mungkin kecuali dalam kasus di mana itu tidak masuk akal dancrossorigin
diabaikan - tidak sepenuhnya jelas untuk saya belum)<script type=module>
: diperiksa<img>
,<style type=stylesheet>
,<iframe>
, klasik<script>
dll (dimulai melalui HTML atau JS) tanpacrossorigin
secara eksplisit ditentukan , maka preconnect yang HARUS TIDAK memilikicrossorigin
atribut set.crossorigin=anonymous
fetch
atauXHR
:credentials !== omit
; dalam kasus XHRwithCredentials === true
:): preconnect harus memilikicrossorigin=use-credentials
crossorigin=anonymous
Untuk kasus terakhir (ambil / XHR), buka panel jaringan di Chrome / Firefox devtools, klik kanan permintaan, dan pilih
copy as fetch
dari dropdown. Ini akan membuat potongan JS, yang akan memberi tahu Anda jika permintaan itu diaktifkan CORS ("mode"=="cors"
) dan kredensial ("credentials"=="include"|"same-origin"
).Namun, perhatikan trik di atas tidak berfungsi dengan benar untuk permintaan non-XHR / fetch, karena misalnya
fetch
dan<img>
menggunakan algoritma yang berbeda untuk membuat koneksi, seperti yang dijelaskan sebelumnya.Akhirnya, dalam HTML,
<link ...crossorigin>
===<link ...crossorigin=anonymous>
.Catatan dan tautan tambahan:
sumber