HTML5 - CORS
Cross-origin resource sharing (CORS) เป็นกลไกในการอนุญาตทรัพยากรที่ถูก จำกัด จากโดเมนอื่นในเว็บเบราว์เซอร์
สมมติว่าหากคุณคลิกที่โปรแกรมเล่นวิดีโอ HTML5ในส่วนสาธิต html5 มันจะขออนุญาตกล้อง หากผู้ใช้อนุญาตก็จะเปิดกล้องเท่านั้นมิฉะนั้นจะไม่เปิดกล้องสำหรับเว็บแอปพลิเคชัน
การร้องขอ CORS
ที่นี่ Chrome, Firefox, Opera และ Safari ทั้งหมดใช้วัตถุ XMLHttprequest2 และ Internet Explorer ใช้วัตถุ XDomainRequest ที่คล้ายกัน
function createCORSRequest(method, url) {
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr) {
// Check if the XMLHttpRequest object has a "withCredentials" property.
// "withCredentials" only exists on XMLHTTPRequest2 objects.
xhr.open(method, url, true);
} else if (typeof XDomainRequest != "undefined") {
// Otherwise, check if XDomainRequest.
// XDomainRequest only exists in IE, and is IE's way of making CORS requests.
xhr = new XDomainRequest();
xhr.open(method, url);
} else {
// Otherwise, CORS is not supported by the browser.
xhr = null;
}
return xhr;
}
var xhr = createCORSRequest('GET', url);
if (!xhr) {
throw new Error('CORS not supported');
}
จัดการเหตุการณ์ใน CORS
ซีเนียร์ | ตัวจัดการเหตุการณ์และคำอธิบาย |
---|---|
1 | onloadstart เริ่มการร้องขอ |
2 | onprogress โหลดข้อมูลและส่งข้อมูล |
3 | onabort ยกเลิกคำขอ |
4 | onerror คำขอล้มเหลว |
5 | onload ขอโหลดสำเร็จ |
6 | ontimeout หมดเวลาก่อนที่คำขอจะเสร็จสมบูรณ์ |
7 | onloadend เมื่อคำขอเสร็จสมบูรณ์ไม่ว่าจะสำเร็จหรือล้มเหลว |
ตัวอย่างเหตุการณ์ onload หรือ onerror
xhr.onload = function() {
var responseText = xhr.responseText;
// process the response.
console.log(responseText);
};
xhr.onerror = function() {
console.log('There was an error!');
};
ตัวอย่าง CORS พร้อมตัวจัดการ
ตัวอย่างด้านล่างนี้จะแสดงตัวอย่างของ makeCorsRequest () และ onload handler
// Create the XHR object.
function createCORSRequest(method, url) {
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr) {
// XHR for Chrome/Firefox/Opera/Safari.
xhr.open(method, url, true);
} else if (typeof XDomainRequest != "undefined") {
// XDomainRequest for IE.
xhr = new XDomainRequest();
xhr.open(method, url);
} else {
// CORS not supported.
xhr = null;
}
return xhr;
}
// Helper method to parse the title tag from the response.
function getTitle(text) {
return text.match('<title>(.*)?</title>')[1];
}
// Make the actual CORS request.
function makeCorsRequest() {
// All HTML5 Rocks properties support CORS.
var url = 'http://www.tutorialspoint.com';
var xhr = createCORSRequest('GET', url);
if (!xhr) {
alert('CORS not supported');
return;
}
// Response handlers.
xhr.onload = function() {
var text = xhr.responseText;
var title = getTitle(text);
alert('Response from CORS request to ' + url + ': ' + title);
};
xhr.onerror = function() {
alert('Woops, there was an error making the request.');
};
xhr.send();
}