Rumah  >  Artikel  >  hujung hadapan web  >  Penjelasan terperinci tentang isu merentas domain JS_Pengetahuan asas

Penjelasan terperinci tentang isu merentas domain JS_Pengetahuan asas

WBOY
WBOYasal
2016-05-16 16:30:281305semak imbas

JavaScript ialah teknologi skrip dinamik bahagian hadapan yang sering digunakan dalam pembangunan web. Dalam JavaScript, terdapat sekatan keselamatan yang sangat penting yang dipanggil "Dasar Asal Sama". Dasar ini meletakkan sekatan penting pada kandungan halaman yang boleh diakses oleh kod JavaScript, iaitu, JavaScript hanya boleh mengakses kandungan dalam domain yang sama dengan dokumen yang mengandunginya.

Strategi keselamatan JavaScript amat penting apabila melaksanakan pengaturcaraan berbilang iframe atau berbilang tetingkap, serta pengaturcaraan Ajax. Menurut dasar ini, kod JavaScript yang terkandung dalam halaman di bawah baidu.com tidak boleh mengakses kandungan halaman di bawah nama domain google.com malah halaman antara subdomain yang berbeza tidak boleh mengakses satu sama lain melalui kod JavaScript. Kesan pada Ajax ialah permintaan Ajax yang dilaksanakan melalui XMLHttpRequest tidak boleh menyerahkan permintaan ke domain yang berbeza Contohnya, halaman di bawah abc.example.com tidak boleh menyerahkan permintaan Ajax ke def.example.com, dsb.

Walau bagaimanapun, apabila melakukan beberapa pengaturcaraan bahagian hadapan yang mendalam, operasi merentas domain sudah semestinya diperlukan Pada masa ini, "dasar asal yang sama" nampaknya terlalu keras. Artikel ini meringkaskan beberapa teknologi yang diperlukan untuk merentas domain mengenai isu ini.

Seterusnya kita akan membincangkan teknologi merentas domain dalam dua situasi: pertama, kita akan membincangkan teknologi merentas domain dalam subdomain yang berbeza, dan kemudian kita akan membincangkan teknologi merentas domain dalam domain yang berbeza sepenuhnya.

(1) Teknologi merentas domain dalam subdomain yang berbeza.
Kami akan membincangkan dua soalan secara berasingan: soalan pertama ialah cara membuat panggilan JavaScript merentas subdomain yang berbeza, soalan kedua ialah cara menyerahkan permintaan Ajax kepada subdomain yang berbeza.

Mari kita selesaikan masalah pertama dahulu. Katakan terdapat dua subdomain yang berbeza di bawah domain example.com: abc.example.com dan def.example.com. Sekarang andaikan terdapat halaman di bawah def.example.com, yang mentakrifkan fungsi JavaScript:

Salin kod Kod adalah seperti berikut:

fungsi funcInDef() {
.....
}

Kami ingin memanggil fungsi di atas dalam halaman di bawah abc.example.com. Katakan bahawa halaman di bawah abc.example.com yang akan kita bincangkan dibenamkan dalam halaman di bawah def.example.com dalam bentuk iframe Dalam kes ini, kita boleh cuba membuat panggilan berikut dalam iframe:

Salin kod Kod adalah seperti berikut:

window.top.funcInDef();

Baiklah, kami mendapati bahawa panggilan ini dilarang oleh "dasar asal yang sama" yang dinyatakan sebelum ini, dan enjin JavaScript akan terus mengeluarkan pengecualian.

Untuk melaksanakan panggilan di atas, kita boleh melakukannya dengan mengubah suai atribut domain dua halaman. Sebagai contoh, kami boleh menambah coretan kod JavaScript berikut pada bahagian atas dua halaman di atas abc.example.com dan def.example.com:

Salin kod Kod adalah seperti berikut: