从零开始Node.js—10跨域CORS的实现

之前练习中一直使用浏览器直接发送请求,或使用ApiPost或者Postman发送请求。
但在前端开发中,常常面对的场景是点击按钮,发送请求,获取数据。

一、网页发送请求:ajax

网页发送请求通常借助于浏览器Ajax模块来实现。Ajax:"Asynchronous JavaScript And XML"即异步JavaScript和XML,是一种创建交互式网页应用的网页开发技术,核心是浏览器提供的XMLHttpRequest对象。详细使用可参见文章ajax使用的四大步骤

二、跨域:发的出去,但收不到

当请求的协议、域名、端口号与当前网页主页面main.html的协议域名端口号不一样,就会涉及到“跨域”。具体表现文请求可以从客户端传到服务端,服务端可以正确响应并返回,但是响应会被浏览器拦截,不会到达网页。


跨域:不是发布出去,而是收不到,被浏览器拦截

三、配置CORS接口

跨源资源共享 (CORS)(Cross-Origin Resource Sharing)是一种基于 HTTP 头的机制,通过对接口的响应头进行设置,来配合客户端发送的各种请求。CORS 主要在服务器端接口的响应头进行配置,客户端无须做任何额外的配置。

① 设置允许的域名

设置属性Access-Control-Allow-Origin

res.setHeader(Access-Control-Allow-Origin, '*' ) // 允许所有跨域网站的响应值
res.setHeader(Access-Control-Allow-Origin, 'www.baidu.com' ) // 跨域网站中仅允许baidu返回的响应者

② 设置允许的请求头

设置属性Access-Control-Allow-Headers
默认情况下,CORS 仅支持客户端向服务器发送如下的 9 个请求头:
Accept、Accept-Language、Content-Language、DPR、Downlink、Save-Data、Viewport-Width、Width 、Content-Type (值仅限于 text/plain、multipart/form-data、application/x-www-form-urlencoded 三者之一)。如果客户端向服务器发送了额外的请求头信息,则需要在服务器端,通过 Access-Control-Allow-Headers 对额外的请求头进行声明,否则这次请求会失败!

res.setHeader(Access-Control-Allow-Headers, 'Content-Type, X-Custom-Header' ) // 允许所有跨域网站的响应值

③ 设置允许的请求方法

设置属性Access- Cotrol-Allow-Meyhods
默认情况下,CORS 仅支持客户端发起 GET、POST、HEAD 请求。
如果客户端希望通过 PUT、DELETE 等方式请求服务器的资源,则需要在服务器端,通过 Access-Control-Alow-Methods来指明实际请求所允许使用的 HTTP 方法。

res.setHeader(Access-Control-Allow-Methods, 'POST, GET, HEAD, DELETE' ) // 允许这四个方法
res.setHeader(Access-Control-Allow-Methods, '*' ) // 允许所有方法

四、CORS请求类型

客户端在请求 CORS 接口时,根据请求方式和请求头的不同,可以将 CORS 的请求分为两大类,分别是:

  • 简单请求 (下两项均满足)
    • 请求方式:GET、POST、HEAD 三者之一
    • HTTP 头部信息不超过以下几种字段:无自定义头部字段
  • 预检请求(满足下面任意一项)
    • 请求方式为 GET、POST、HEAD 之外的请求 Method 类型
    • 请求头中包含自定义头部字段
    • 向服务器发送了 application/json 格式的数据

例子
在浏览器与服务器正式通信之前,浏览器会先发送 OPTION 请求进行预检,以获知服务器是否允许该实际请求,所以这一次的 OPTION请求称为“预检请求”。
响应码204,代表请求成功,但没有返回任何数据,只是浏览器的一次试探

响应码204,代表请求成功,但没有返回任何数据,只是浏览器的一次试探

在这里插入图片描述

预检请求的方法是OPTIONS,响应头中可以看到允许的方法类型
服务器成功响应预检请求后,才会发送真正的请求,并且携带真实数据,200那个

五、举例

在服务端引入cors库,这个库是由一系列响应头组成,同时包括了允许跨域,允许各种响应头和请求头

下载

npm install cors

使用

// 1.引入cors包
const cors = require('cors);
// 2.注册全局cors中间件
app.use(cors());
// 3.配置路由
app.get('/get', funA);

客户端无需多写任何配置代码,只需要采用兼容CORS的浏览器就行。只有支持 XMLHttpRequest Level2 的浏览器,才能正常访问开启了 CORS 的服务端接口(例如:IE10+、Chrome4+、FireFox3.5+)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node.js 代码文件中引入 express 和 cors 模块的步骤如下: 1. 首先,在项目的根目录中打开终端或命令提示符。 2. 使用以下命令安装 express 和 cors 模块: ```shell npm install express cors ``` 这将会在项目的 `node_modules` 文件夹中安装所需的模块。 3. 在 Node.js 代码文件中引入 express 和 cors 模块: ```javascript const express = require('express'); const cors = require('cors'); ``` 在代码中,我们使用 `require` 函数引入了 express 和 cors 模块。通过这样的引入方式,我们可以在代码中使用这些模块提供的功能。 4. 接下来,你可以根据需要在代码中使用 express 和 cors 模块的功能,例如创建一个 Express 应用、定义路由、处理跨域请求等。 完整的示例代码如下: ```javascript const express = require('express'); const cors = require('cors'); // 引入 express 和 cors 模块 const app = express(); // 创建一个 Express 应用实例 app.use(cors()); // 使用 cors 中间件处理跨域请求 // 在这里可以定义路由和其他中间件 // 例如: app.get('/', (req, res) => { res.send('Hello, World!'); }); // 启动应用 app.listen(3000, () => { console.log('Server is running on port 3000'); }); ``` 通过以上步骤,在 Node.js 代码文件中引入 express 和 cors 模块后,你可以使用它们提供的功能来构建和处理你的应用。记得根据你的实际需求,在应用中添加路由和其他中间件来处理请求和响应。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值