Node.js学习笔记(八)#CORS跨域

目录

一、为什么会出现跨域问题

二、非同源带来的限制

三、Express中解决跨域问题

1.什么是CORS

2.使用CORS中间件解决跨域问题

① cors中间件简介

② cors中间件使用

3.设置响应头,处理跨域请求

① cors响应头 : Access-Control-Allow-Origin

② cors响应头 : Access-Control-Allow-Headers

扫描二维码关注公众号,回复: 16719919 查看本文章

③ cors响应头 : Access-Control-Allow-Methods


一、为什么会出现跨域问题

出于浏览器的同源策略限制,会出现跨域问题。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)。

简单来说,当一个请求url的协议域名端口三者之间任意一个与当前页面url不同即为跨域

当前页面url

被请求页面url

是否跨域

原因

http://www.test.com/

http://www.test.com/index.html

同源(协议、域名、端口号相同)

http://www.test.com/

https://www.test.com/index.html

跨域

协议不同(http/https)

http://www.test.com/

http://www.baidu.com/

跨域

主域名不同(test/baidu)

http://www.test.com/

http://blog.test.com/

跨域

子域名不同(www/blog)

http://www.test.com:8080/

http://www.test.com:7001/

跨域

端口号不同(8080/7001)

二、非同源带来的限制

1.无法读取非同源网页的 Cookie、LocalStorage 和 IndexedDB

2.无法接触非同源网页的 DOM

3.无法向非同源地址发送 AJAX 请求

三、Express中解决跨域问题

1.什么是CORS

CORS全称为Cross-Origin Resource Sharing,翻译为跨域资源共享。由一系列 HTTP 响应头组成,这些 HTTP 响应头决定浏览器是否阻止前端 JS 代码跨域获取资源。

浏览器的同源安全策略默认会阻止网页“跨域”获取资源。但如果接口服务器配置了 CORS 相关的 HTTP 响应头就可以解除浏览器端的跨域访问限制。

2.使用CORS中间件解决跨域问题

① cors中间件简介

cors是Express的一个第三方中间件。通过安装和注册cors中间件,可以很方便地解决跨域问题。

② cors中间件使用

Ⅰ.安装cors中间件

npm install cors

Ⅱ.导入cors中间件

const cors = require('cors')

Ⅲ.在路由之前调用 app.use(cors()) 配置中间件

app.use(cors())

3.设置响应头,处理跨域请求

① cors响应头 : Access-Control-Allow-Origin

指定允许访问该资源的外域URL,若设置为 *,则允许所有访问,如下仅支持来自http://127.0.0.1:2000的请求。

res.header('Access-Control-Allow-Origin', 'http://127.0.0.1:2000')

② cors响应头 : Access-Control-Allow-Headers

默认情况下,CORS 仅支持客户端向服务器发送如下的 9个请求头Accept、Accept-Language、 Content-Language、DPR、Downlink、Save-Data Viewport-Width、Widt、Content-Type (值仅限于text/plain、multipart/form-data、application/x-www-form-urlencoded 三者之一)。

如果客户端向服务器发送了额外的请求头信息,则需要在服务器端,通过 Access-Control-Allow-Headers 对额外的请求头进行声明,否则这次请求会失败。

res.header('Access-Control-Allow-Headers', 'Content-Type')

③ cors响应头 : Access-Control-Allow-Methods

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

res.header('Access-Control-Allow-Methods', 'GET,POST,PUT')

猜你喜欢

转载自blog.csdn.net/weixin_42214717/article/details/128285724
今日推荐