跨域问题实战及分析

自己写了一个nodejs服务器,在html页面中调用接口,遇到了跨域问题,该怎么解决呢?

server.js
创建服务器

const express=require('express');
const app=express();//创建express服务器
app.listen(80,()=>{//启动服务器
    console.log('express server run  at http://127.0.0.1')
})
//监听get请求
//参数1: 客户端请求的url地址,
//参数2:请求对应的处理函数
//req  请求对象
//相应对象
app.get('/user', function(req, res) {
    res.send({name:'zs',age:20,gender:'男'})//res.send(),可以把处理好的内容返回给客户端
}) 

server.js 同级下新建一个 test.html页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script src="./jQuery.min.js"></script>
<script>
    $.ajax({
        method:'get',
        url:'http://127.0.0.1/user',
    }).done(function(res){
        console.log(res);
    })
    .fail(function(rej){
        
    })
</script>
</html>

加载test.html页面console 有报错:
Access to XMLHttpRequest at ‘http://127.0.0.1/user’ from origin ‘null’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
CORS是指跨源资源共享 报错是跨域的意思

跨域

跨域的概念很简单 前端请求的url的域名、端口、协议与当前页面的url的域名、端口、协议不同就是跨域,如果相同,就是处于相同域上

,即当一个请求URL的协议、域名、端口三者之间任意一个与当前页面URL不同则视为跨域,

产生的原因

跨域问题产生的原因主要是由浏览器的“同源策略”限制导致的,是浏览器对JavaScript 施加的安全限制。

同源策略

同源策略是一个重要的安全策略,它用于限制一个origin的文档或它加载的脚本如何能与另一个源的资源进行交互。能够减少恶意文档,减少可能被攻击媒介。 如果两个URL的协议、域名、端口号都相同,就称这两个URL同源。

可理解为请求的url的协议,域名,端口号和当前页面的url协议,域名,端口号相同就是一种同源

浏览器默认两个不同的源之间是可以互相访问资源和操作DOM的。两个不同的源之间若是想要访问资源或者操作DOM,那么会有一套基础的安全策略的制约,我们把这称为同源策略。它的存在可以保护用户隐私信息,防止身份伪造。

同源策略目的举例

同源策略的目的,是为了保证用户信息的安全,防止恶意的网站窃取数据。假设你成功登录了某个银行网站,自己的账户余额在你登录后都可以随意操作,大家都知道很多网站系统在你登录成功后都会给你的浏览器发送Cookie,Cookie中一般会记录你的部分信息甚至是登录状态,而当你在未退出银行网站的情况下,接着又去浏览了其他网站,如果其他网站可以读取银行网站的 Cookie,会发生什么?很显然,你的Cookie中信息会全部泄露,甚至其他网站还会使用你的Cookie来登录你的账号冒充你来操作你的账户,由于浏览器同时还规定,提交表单不受同源策略的限制,从而你的钱就会不翼而飞。这就是所谓的CSRF攻击,中文名称为:跨站请求伪造攻击,即攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账……造成的问题包括:个人隐私泄露以及财产安全。

同源策略的好处

浏览器的同源策略目的是为了保护用户的信息安全,为了防止恶意网站(大概查不到ip不能进行定位)窃取用户在浏览器上的数据,如果不是同源的站点,将不能进行如下操作 :

  • Cookie、LocalStorage 和 IndexDB 无法读写
  • DOM 和 Js对象无法获得
  • AJAX请求不能发送

最后,上述访问nodejs 服务器跨域问题该怎么解决?
通过Access-Control-Allow-Origin响应头,就告诉了浏览器。如果请求我的资源的页面是我这个响应头里记录了的"源",则不要拦截此响应,允许数据通行。

响应头中添加

‘Access-Control-Allow-Origin’: ‘浏览器中的url’,
‘Cache-Control’: ‘no-cache’,
‘Access-Control-Allow-Origin’: ‘*’

const express=require('express');
const app=express();//创建express服务器
app.listen(80,()=>{//启动服务器
    console.log('express server run  at http://127.0.0.1')
})
//监听get请求
//参数1: 客户端请求的url地址,
//参数2:请求对应的处理函数
//req  请求对象
//相应对象
app.get('/user', function(req, res) {
    res.set({  
        'Access-Control-Allow-Origin': 'file:///D:/StudyAndhi/nodejs/Express/test.html',
        'Cache-Control': 'no-cache',  
        'Access-Control-Allow-Origin': '*'  
      }); 
    res.send({name:'zs',age:20,gender:'男'})//res.send(),可以把处理好的内容返回给客户端
}) 

参考:https://blog.csdn.net/csdssdn/article/details/125344813
https://blog.csdn.net/qq_38571892/article/details/123418918

  • 19
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
关于Spring Cloud Gateway的实战,有很多方面可以探索和实践。以下是一些常见的实战主题和示例: 1. 路由配置:使用Spring Cloud Gateway进行路由配置,将请求转发到不同的后端服务。可以通过YAML或Java代码方式进行配置,并可以使用各种条件和断言来实现动态路由。 2. 过滤器:利用Spring Cloud Gateway的过滤器功能,对请求进行预处理或后处理。常见的过滤器包括鉴权、请求转发修改、请求日志记录等。 3. 限流和熔断:使用Spring Cloud Gateway的限流和熔断功能,保护后端服务免受过载和故障的影响。可以使用内置的限流和熔断策略,或者集成第三方限流和熔断组件。 4. 请求重试:在网络不稳定的情况下,使用Spring Cloud Gateway的请求重试功能,自动重新发送请求,提高系统的可靠性和容错性。 5. 跨域支持:通过Spring Cloud Gateway配置跨域资源共享(CORS),允许跨域访问资源,提高前后端分离架构的灵活性。 6. 动态路由:结合服务注册中心(如Eureka或Consul)和配置中心(如Spring Cloud Config),实现动态路由的管理和配置。 7. 监控和日志:使用Spring Cloud Gateway的监控和日志功能,对请求进行统计和分析,了解系统的性能和健康状况。 以上只是一些常见的实战主题,实际上Spring Cloud Gateway还有更多功能和扩展性可供实践。你可以根据自己的需求和场景,选择适合的实战方向,深入学习和应用Spring Cloud Gateway。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值