浅析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 jqxGauge RadialGauge valueChanged事件

    以下是关于“jQWidgets jqxGauge RadialGauge valueChanged事件”的完整攻略,包含两个示例说明: 简介 jqxGauge 控件 RadialGauge 类的 valueChanged 事件在仪表盘的值发生变化时触发。事件的语法如下: $("#gauge").on(‘valueChanged’, fun…

    jquery 2023年5月10日
    00
  • 如何使用jQuery getScript

    下面是关于如何使用jQuery getScript的完整攻略。 jQuery getScript概述 $.getScript()是一个方便的方法,它允许你通过URL加载并执行JavaScript代码。使用它创建的脚本将在整个页面上下文中创建和执行。如果您想使用jQuery动态加载脚本而不必重复地编写JavaScript,那么getScript()是一个很好的…

    jquery 2023年5月12日
    00
  • 如何用jQuery获得一个div的高度

    要使用jQuery获得一个div的高度,我们可以使用height()方法。 以下是使用height()方法获取一个div高度的示例代码: var divHeight = $(‘#myDiv’).height(); console.log(divHeight); 在上面的代码中,我们首先使用$()函数引用页面上带有id为’myDiv’的div元素。然后我们调用…

    jquery 2023年5月12日
    00
  • js/jq仿window文件夹移动/剪切/复制等操作代码

    针对“js/jq仿window文件夹移动/剪切/复制等操作代码”的完整攻略,下面我给出详细的讲解: 1. 准备工作 在开始操作前,需要先准备好以下工作: 引入jQuery库(如果使用jQuery实现); 编写HTML文件结构; 编写CSS样式; 编写JS代码,实现移动/剪切/复制等操作。 2. HTML文件结构 下面是简单的HTML文件结构示例: <d…

    jquery 2023年5月27日
    00
  • jQuery UI的toggleClass方法

    以下是关于 jQuery UI 的 toggleClass() 方法的详细攻略: jQuery UI toggleClass() 方法 toggleClass() 方法用于在元素上切换一个或多个类。如果元素已有了该类,则该类将被删除。如果元素没有该类,则该类将被添加。 语法 $(selector).toggleClass(classname); 参数 cla…

    jquery 2023年5月11日
    00
  • 如何创建jQuery UI的自动完成功能

    要创建jQuery UI的自动完成功能,我们可以使用以下步骤: 引入jQuery和jQuery UI库文件。 创建一个输入框元素,例如<input type=”text” id=”myInput”>。 使用.autocomplete()函数初始化自动完成功能,例如$(“#myInput”).autocomplete(options)。 在opti…

    jquery 2023年5月9日
    00
  • jQuery实现简单全选框

    为了实现一个简单的全选/反选功能,我们可以通过 jQuery 的 on() 方法来监听点击事件,在事件处理函数中操作 DOM 元素来实现相应的功能。 首先,我们需要定义一个按钮或者复选框来作为全选/反选按钮,然后找到所有需要被选中/取消选择的复选框元素。我们可以通过在每个复选框元素上添加一个特殊的类名来实现这个目的,例如,我们可以给所有需要被选中/取消选择的…

    jquery 2023年5月28日
    00
  • jquery.validate 自定义验证方法及validate相关参数

    下面是关于jquery.validate自定义验证方法及validate相关参数的攻略,包含以下内容: jQuery.validate 的基础使用方法 自定义验证方法 validate 相关参数 示例说明 1. jQuery.validate 的基础使用方法 首先我们需要引入 jQuery 及 jQuery.validate 的相关文件,具体可以参考以下代码…

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