浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法

下面我来详细讲解“浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法”的完整攻略。

背景知识

在介绍 JSOPN 跨域请求原理及 CORS(跨域资源共享)解决方法前,我们需要先了解一些相关的背景知识。

什么是跨域?

跨域指的是浏览器不能执行其他网站的脚本。这里的“其他网站”是指,和当前网页有不同协议域名端口的网站。

什么是跨域请求?

跨域请求是指:当前发起请求的网页和请求的目标资源所在的网页,处于不同的域。

什么是 CORS 跨域资源共享?

CORS(Cross-Origin Resource Sharing)跨域资源共享,它允许浏览器向跨源服务器,发起 XMLHttpRequest 请求,从而克服了 AJAX 只能同源使用的限制。

JSOPN 跨域请求原理

当浏览器发起跨域请求的时候,会先向服务器发起一个 OPTIONS 请求,获取一些必要的信息(如允许跨域请求的方法等),之后才会正式发起 POST、GET 请求等请求方式。

JSOPN 通过添加一个 script 标签来向不同域名下的服务器发起请求,由于 script 标签的 src 属性不受同源策略限制,所以可以跨域。当然,在使用 JSOPN 跨域请求的时候,我们还需要在服务器端做一些额外的设置,这也是接下来要讲的主要内容。

CORS(跨域资源共享)的完美解决方法

在服务器端添加如下设置即可:

// 允许跨域的域名
const allowOrigin = [
  'http://www.example1.com',
  'http://www.example2.com'
];

app.use((req, res, next) => {
  // 设置允许跨域的域名
  const origin = req.headers.origin;
  if (allowOrigin.includes(origin)) {
    res.setHeader('Access-Control-Allow-Origin', origin);
    res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
    if (req.method === 'OPTIONS') {
      res.setHeader('Access-Control-Allow-Methods', 'PUT, POST, DELETE, GET');
      res.setHeader('Access-Control-Max-Age', '3600');
      res.setHeader('Access-Control-Allow-Credentials', 'true');
      res.writeHead(200);
      res.end();
    }
  }
  next();
});

上面的代码中,我们首先设置了允许跨域的域名,当请求的来源在其中的一个允许域名内时,我们会设置一系列的消息头,从而允许此次跨域请求。

示例一:

假设当前网站运行在 http://www.example1.com,现需要从 http://www.example2.com 获取数据,那么我们需要首先在 http://www.example2.com 的服务器端设置上述的跨域配置,之后在 http://www.example1.com 中执行如下代码即可获取到跨域的数据:

const url= 'http://www.example2.com/api/data';
const script = document.createElement('script');
script.src = url;
document.body.appendChild(script);

window.handleData = function (data) {
  console.log('跨域数据:', data);
}

示例二:

配合 AJAX 使用:

const xhr = new XMLHttpRequest();

// 配置参数
const url = 'http://www.example2.com/api/data';
const data = { name: '张三' };
xhr.open('POST', url);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.withCredentials = true;
xhr.onreadystatechange = function () {
  if (xhr.readyState === 4) {
    if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {
      const response = JSON.parse(xhr.responseText);
      console.log('跨域 AJAX 数据:', response);
    }
  }
};
xhr.send(JSON.stringify(data));

这样,就可以使用 AJAX 跨域请求了。

总结:

通过上述的介绍,我们可以发现 CORS 的使用相对来说比较简单,只需要在服务器端设置一些允许跨域请求的配置即可。在实际开发中,可以根据情况修改 allowOrigin 中的域名,实现精细化的跨域控制,提升应用的安全性与可控性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • jQWidgets jqxGrid sorttogglestates属性

    jQWidgets jqxGrid sorttogglestates属性 jQWidgets jqxGrid 是一种表格控件,用于在 Web 应用程序中创建表格。sorttogglestates 属性是 jqxGrid 控件的一个属性,用于自定义列的图标。本文将详细讲解 sorttogglestates 属性的使用方法,并提供两个示例说明。 属性 sortt…

    jquery 2023年5月10日
    00
  • jquery each()源代码

    下文将详细讲解 jQuery 中的 .each() 方法及其源代码、特性、用法以及示例说明。 源代码 这是 .each() 方法的源代码: jQuery.each = function( obj, callback ) { var length, i = 0; if ( isArrayLike( obj ) ) { length = obj.length; …

    jquery 2023年5月28日
    00
  • 关于setInterval、setTimeout在jQuery中的使用注意事项

    关于setInterval、setTimeout在jQuery中的使用注意事项 在jQuery中,借助setTimeout和setInterval可以很方便的实现定时器功能。以下是使用这两个方法时需要注意的一些事项: 1.执行环境setTimeout和setInterval在执行函数时,它们的执行环境是全局的,不是jQuery对象。因此,如果想在回调函数中使…

    jquery 2023年5月28日
    00
  • jQuery实现鼠标经过事件的延时处理效果

    下面是针对“jQuery实现鼠标经过事件的延时处理效果”的完整攻略: 什么是鼠标经过事件的延时处理效果? 鼠标经过事件的延时处理效果是指当鼠标经过某个元素时,会在一定的时间内等待,然后再执行相应的效果,例如弹出菜单或提示框等。它可以提升用户的体验,防止快速移动鼠标时出现误操作。 如何实现鼠标经过事件的延时处理效果? 以下是一些实现鼠标经过事件的延时处理效果的…

    jquery 2023年5月28日
    00
  • jQuery UI Tabs option()方法

    以下是关于 jQuery UI Tabs option() 方法的详细攻略: jQuery UI Tabs option() 方法 option() 方法用于获取或设置选项卡小部件的选项。可以使用该方法来动态更改选项卡的选项,例如更改选项卡的高度式或禁用某个选项卡。 语法 $(selector).tabs( "option", optio…

    jquery 2023年5月11日
    00
  • jQWidgets jqxResponsivePanel refresh()方法

    针对您提出的问题,我会详细讲解 “jQWidgets jqxResponsivePanel refresh()方法” 的完整攻略。 什么是 jqxResponsivePanel? jqxResponsivePanel 是 jQWidgets 的一个控件,是一个移动端自适应的面板控件。它可以根据不同平台的屏幕尺寸,动态地改变大小和布局,并且支持多种手势控制。 …

    jquery 2023年5月11日
    00
  • jquery分割字符串的方法

    当使用 jQuery 操作字符串变量时,有时候需要将字符串按照指定的分隔符进行分割,得到分割后的多个子字符串。本文将为您介绍 jQuery 中常用的字符串分割方法。 split()方法 jQuery 中默认继承了 JavaScript 的 split() 方法,用于将字符串按照指定的分隔符进行分隔。示例代码如下: var str = "Hello …

    jquery 2023年5月28日
    00
  • JS实现的简单拖拽功能示例

    下面是JS实现的简单拖拽功能示例的完整攻略: 一、准备工作 在HTML文档中添加一个元素,我们称之为“拖拽元素”,该元素将被用户用鼠标拖动。 <div id="drag">拖拽我</div> 二、绑定事件 为了使用户能够拖动该元素,我们需要将拖拽元素上的鼠标事件绑定到JavaScript函数。 const drag…

    jquery 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部