CORS(跨域)请求总结和测试
一、简单请求与非简单请求
跨域请求分为简单与非简单请求,同时满足以下两种条件的可以确定为简单请求。 简单请求的请求方法
请求方法 | 说明 |
head | 发送头部信息 |
get | |
post |
简单请求的HTTP头信息
http头信息 | 说明 |
accept | 指定客户端可以接受哪类信息,eg: image/git |
accept-language | 指定客户端可以接受的自然语言,如果没有指定,认为各语言都可以。eg:accept-language: zh-cn |
content-language | 描述实体报头和资源所用的自然语言。没有设置该规则认为实体内容将提供给所有的语言阅读 |
Last-Event-ID | 最后一次接收到事件的标识符 |
content-type | 实体报文和资源的类型,只限于三个值:application/x-www-form-unlencoded、multipart/form-data、text/plain |
二、简单请求处理原理
请求头 | 说明 |
Access-Control-Allow-origin | 指定可以跨域访问的网站,可以设置为*,表示所有res.setHeader("Access-Control-Allow-origin","http://localhost")
|
Access-Control-Allow-Credentials | 有这个头或者值为true,表示可接受跨域的cookies。而withCredentials是客户端设置是否传递cookies到服务器。 |
Access-Control-Expose-Headers | 默认cors请求。客户端的xmlHttpRequrest只能拿到Cache-Control、Content-Language、Content-Type、Exprise、Last-Modified、Pragma等6个字段,其他头就需要通过Access-Control-Expose-Headers来指定 |
注意事项
设置了Access-Control-Allow-Credentials为true,或者有这个头,那么Access-Control-Allow-Origin就不能用*。
发送cookie时,Access-Control-Allow-Origin不能为*,cookie依然同源,只有服务器域名设置的cookie才会上传的。
原网页代码中的document.cookie也无法读取服务器域名下的cookie(客户端),通过xmlHttp.getResponseHeader("set-cookies")也不可以的。
xmlHttp可以获取到foo、boo对象
res.setHeader("Access-Control-Allow-origin","*"); res.setHeader("Access-Control-Expose-Headers", "foo,boo"), res.setHeader("foo", "foo"); res.setHeader("boo", "boo");
三、非简单请求处理原理
如果请求方法是PUT、DELETE,或者Content-type的类型为applicetion/json的。非简单请求两大步骤:
预验证“请求”,浏览器会发送请求方法为options的请求,然后会带上如下三个头
头部名称 | 说明 |
Origin | 表示发送请求发送的源域名 |
Access-Control-Request-Method | 需要跨域执行的请求方法(也可以叫动作) |
Access-Control-Request-Headers | 指定cors请求会额外发送的头部信息,给客户端自定义头部的机会 |
服务判断是否指定了Access-Control-Allow-Origin头,并且值是可匹配的,验证通过则输出信息如下头部内容:
头部名称 | 说明 |
Access-Control-Allow-Methods | 表明服务器支持的cors请求方法,多个用逗号隔开 |
Access-Control-Allow-Headers | 如果请求有了Access-Control-Request-Headers头,必须返回此头,表明服务器支持的所有头部信息,多个用逗号隔开 |
Access-Control-Allow-Credentials | 与简单请求一致 |
Access-Control-Max-Age | 指定本次预验证的有效期,单位:秒 |
注意:
Access-Control-Request-Headers和Access-Control-Request-Method不需要开发者来设置,这是浏览器自动识别的.Access-Control-Request-Headers根据请求的自定义头生成,而Access-Control-Request-Method根据请求的方法生成。
headers设置不对的表现:
3. 正确的设置:
四、跨域cookie的处理(不行)
跨域是设置不了cookie的。服务端输出的cookie无效
ajax获取set-Cookies头(客户端),会提示错误
Atas ialah kandungan terperinci CORS(跨域)请求总结和测试. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Apakah pendapat anda tentang furmark? 1. Tetapkan "Mod Jalankan" dan "Mod Paparan" dalam antara muka utama, dan juga laraskan "Mod Ujian" dan klik butang "Mula". 2. Selepas menunggu seketika, anda akan melihat keputusan ujian, termasuk pelbagai parameter kad grafik. Bagaimanakah furmark layak? 1. Gunakan mesin pembakar furmark dan semak hasilnya selama kira-kira setengah jam Ia pada asasnya berlegar sekitar 85 darjah, dengan puncak 87 darjah dan suhu bilik 19 darjah. Casis besar, 5 port kipas casis, dua di hadapan, dua di atas, dan satu di belakang, tetapi hanya satu kipas dipasang. Semua aksesori tidak overclock. 2. Dalam keadaan biasa, suhu biasa kad grafik hendaklah antara "30-85℃". 3. Walaupun suhu ambien terlalu tinggi pada musim panas, suhu biasa ialah "50-85℃"

Penyelesaian kepada masalah silang domain PHPSession Dalam pembangunan pemisahan front-end dan back-end, permintaan merentas domain telah menjadi kebiasaan. Apabila menangani isu merentas domain, kami biasanya melibatkan penggunaan dan pengurusan sesi. Walau bagaimanapun, disebabkan oleh sekatan dasar asal penyemak imbas, sesi tidak boleh dikongsi secara lalai merentas domain. Untuk menyelesaikan masalah ini, kita perlu menggunakan beberapa teknik dan kaedah untuk mencapai perkongsian sesi merentas domain. 1. Penggunaan kuki yang paling biasa untuk berkongsi sesi merentas domain

"Ujian Inaction" bagi MMORPG dongeng fantasi baharu "Zhu Xian 2" akan dilancarkan pada 23 April. Apakah jenis kisah pengembaraan dongeng baharu yang akan berlaku di Benua Zhu Xian beribu-ribu tahun selepas karya asal? The Six Realm Immortal World, akademi abadi sepenuh masa, kehidupan abadi percuma, dan semua jenis keseronokan di dunia abadi sedang menunggu rakan-rakan abadi untuk meneroka secara peribadi! Pra-muat turun "Wuwei Test" kini dibuka Rakan-rakan Fairy boleh pergi ke laman web rasmi untuk memuat turun Anda tidak boleh log masuk ke pelayan permainan sebelum pelayan dilancarkan sudah selesai. Waktu pembukaan "Zhu Xian 2" "Inaction Test": 23 April 10:00 - 6 Mei 23:59 Bab pengembaraan dongeng baharu sekuel ortodoks kepada Zhu Xian "Zhu Xian 2" adalah berdasarkan novel "Zhu Xian" sebagai cetak biru Berdasarkan pandangan dunia karya asal, latar belakang permainan ditetapkan

Ringkasan fungsi system() di bawah Linux Dalam sistem Linux, fungsi system() ialah fungsi yang sangat biasa digunakan, yang boleh digunakan untuk melaksanakan arahan baris arahan. Artikel ini akan memperkenalkan fungsi system() secara terperinci dan menyediakan beberapa contoh kod khusus. 1. Penggunaan asas fungsi system() Pengisytiharan fungsi system() adalah seperti berikut: intsystem(constchar*command);

"Operation Delta" akan melancarkan ujian PC berskala besar yang dipanggil "Codename: ZERO" hari ini (7 Mac). Hujung minggu lalu, permainan ini mengadakan acara pengalaman flash mob luar talian di Shanghai, dan 17173 juga bertuah kerana dijemput untuk mengambil bahagian. Ujian ini hanya tinggal lebih empat bulan lagi daripada kali terakhir, yang membuatkan kami tertanya-tanya, apakah sorotan dan kejutan baharu yang akan dibawa oleh "Operasi Delta" dalam tempoh yang singkat? Lebih empat bulan yang lalu, saya mengalami "Operasi Delta" dalam sesi merasa luar talian dan versi beta pertama. Pada masa itu, permainan hanya membuka mod "Tindakan Berbahaya". Walau bagaimanapun, Operasi Delta sudah mengagumkan pada zamannya. Dalam konteks pengeluar utama yang berpusu-pusu ke pasaran permainan mudah alih, FPS sedemikian yang setanding dengan piawaian antarabangsa

Ujian fungsional mengesahkan kefungsian fungsi melalui ujian kotak hitam dan kotak putih, manakala liputan kod mengukur bahagian kod yang diliputi oleh kes ujian. Bahasa yang berbeza (seperti Python dan Java) mempunyai rangka kerja ujian, alat liputan dan ciri yang berbeza. Kes praktikal menunjukkan cara menggunakan Unittest and Coverage Python dan JUnit dan JaCoCo Java untuk ujian fungsi dan penilaian liputan.

Maven ialah alat pengurusan projek sumber terbuka yang biasa digunakan untuk tugas seperti membina projek Java, mengurus kebergantungan dan menerbitkan dokumen. Apabila menggunakan Maven untuk binaan projek, kadangkala kita mahu mengabaikan fasa ujian apabila melaksanakan arahan seperti mvnpackage, yang akan meningkatkan kelajuan binaan dalam beberapa kes, terutamanya apabila prototaip atau persekitaran ujian perlu dibina dengan cepat. Artikel ini akan memperincikan cara mengabaikan fasa ujian dalam Maven, dengan contoh kod tertentu. Mengapa Ujian Sering Diabaikan Semasa Pembangunan Projek

Pengenalan Penyepaduan berterusan (CI) dan penggunaan berterusan (CD) ialah amalan utama dalam pembangunan perisian moden yang membantu pasukan menyampaikan perisian berkualiti tinggi dengan lebih pantas dan lebih dipercayai. Jenkins ialah alat CI/CD sumber terbuka yang popular yang mengautomasikan proses binaan, ujian dan penggunaan. Artikel ini menerangkan cara menyediakan saluran paip CI/CD dengan Jenkins menggunakan PHP. Sediakan Jenkins Pasang Jenkins: Muat turun dan pasang Jenkins daripada tapak web rasmi Jenkins. Cipta projek: Cipta projek baharu daripada papan pemuka Jenkins dan namakannya agar sepadan dengan projek php anda. Konfigurasikan kawalan sumber: Konfigurasikan repositori git projek PHP anda sebagai Jenkin
