HTML5 – CORS

HTML5 – CORS

跨源资源共享(CORS) 是一种机制,允许来自另一个域的受限资源在Web浏览器中访问。

例如,如果您在HTML5演示部分中单击 HTML5-视频播放器 ,它将要求您的相机权限。如果用户允许权限,则只有它才可以打开相机,否则它将无法打开相机以供Web应用程序使用。

发送CORS请求

在这里,Chrome,Firefox,Opera和Safari使用XMLHttprequest2对象,而Internet Explorer使用类似的XDomainRequest对象。

function createCORSRequest(method, url) {
   var xhr = new XMLHttpRequest();

   if ("withCredentials" in xhr) {

      // 检查XMLHttpRequest对象是否具有“withCredentials”属性。
      // “withCredentials”仅存在于XMLHTTPRequest2对象上。
      xhr.open(method, url, true);
   } else if (typeof XDomainRequest != "undefined") {

      // 否则,检查XDomainRequest。
      // XDomainRequest仅存在于IE中,是IE实现CORS请求的方式。
      xhr = new XDomainRequest();
      xhr.open(method, url);
   } else {

      // 否则,浏览器不支持CORS。
      xhr = null;
   }
   return xhr;
}

var xhr = createCORSRequest('GET', url);

if (!xhr) {
   throw new Error('CORS不支持');
}

CORS中的事件处理

序号 事件处理程序和描述
1 onloadstart 启动请求
2 onprogress 加载和发送数据
3 onabort 中止请求
4 onerror 请求失败
5 onload 请求成功加载
6 ontimeout 请求完成之前发生超时
7 onloadend 请求完成(无论成功或失败)

onload或onerror事件的示例

xhr.onload = function() {
   var responseText = xhr.responseText;

   // 处理响应。
   console.log(responseText);
};

xhr.onerror = function() {
   console.log('发生错误!');
};

CORS带处理程序的示例

以下示例将显示makeCorsRequest()和onload处理程序的示例。

// 创建XHR对象。
function createCORSRequest(method, url) {
   var xhr = new XMLHttpRequest();

   if ("withCredentials" in xhr) {

      // Chrome / Firefox / Opera / Safari的XHR。
      xhr.open(method, url, true);
   } else if (typeof XDomainRequest != "undefined") {

      // IE的XDomainRequest。
      xhr = new XDomainRequest();
      xhr.open(method, url);
   } else {

      // 不支持CORS。
      xhr = null;
   }
   return xhr;
}

// 解析响应中的标题标记的助手方法。
function getTitle(text) {
   return text.match('<title>(.*)?</title>')[1];
}

// 进行实际的CORS请求。
function makeCorsRequest() {

   // 所有HTML5 Rocks属性都支持CORS。
   var url = 'http://www.tutorialspoint.com';

   var xhr = createCORSRequest('GET', url);

   if (!xhr) {
      alert('CORS不支持');
      return;
   }

   // 响应处理程序。
   xhr.onload = function() {
      var text = xhr.responseText;
      var title = getTitle(text);
      alert('从CORS请求到' + url + '的响应:' + title);
   };

   xhr.onerror = function() {
      alert('糟糕,请求时出错了。');
   };
   xhr.send();
}

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程