ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

nodeJS解决跨域(同源策略)的简单三种方法(jsonp,cors,服务器代理)

2021-10-14 11:04:37  阅读:184  来源: 互联网

标签:use 跨域 nodeJS app express cors jsonp var


产生跨域请求问题的原因

因为在浏览器中有一个同源策略,这是浏览器最基本的安全功能,但是只在浏览器中有,在服务器中没有这个问题。
同源就是指:协议,域名,端口号都相同,任意一个不满足,就触发了同源策略,我们把触发了同源策略的请求叫做跨域请求。

  • jsonp

     <script src="http://domain/api?name=xujie&pwd=123456&callback=jsonp""></script>
    <script>
    	//函数名与地址的cb或者callback的值一致
    	function jsonp(res){
    		console.log(res)
    	}
    </script>
    

    jsonp的使用简单且兼容性不错,但是仅限于get请求

  • CORS
    实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信,所以只需对服务器进行设置。
    1

    服务器端对于CORS的支持,主要就是通过设置Access-Control-Allow-Origin来进行的。该属性表示哪些域名可以访问资源,如果设置通配符则表示所有网站都可以访问资源。如果浏览器检测到相应的设置,就可以允许Ajax进行跨域的访问。

     //在后端接口中设置
    header('Access-Control-Allow-Origin:域名');
    //当域名为*时支持所有网站都可以访问资源
    

    2
    通过下载cors包来解决(简单粗暴)
    安装代码:npm i cors -g
    用法:

    var express=require('express')
    var cors=require('cors') //导入cors包
    var app=express()
    app.use(express.static('public'))
    // app.use(cors())  //设置这个就允许所以域名跨域
    app.use('/xujie',cors(),function(req,res){
        //在参数中写入cors()就是允许自定义可跨域访问的域名
        res.json({name:8888})
    })
    
  • 代理

    通过访问我们自己的服务器,让我们自己的服务器去帮我们请求资源,再返回给我们。
    安装一个包

     npm i http-proxy-middleware -s
    

    代码写法:

    var express=require('express')
    var app=express()
    const {createProxyMiddleware} = require('http-proxy-middleware')
    app.use(express.static('public'))
    
    app.use('/xujie',createProxyMiddleware({
        target:'http://localhost:8888',
        changeOrigin:true
    }))
    app.listen(7777)
    

标签:use,跨域,nodeJS,app,express,cors,jsonp,var
来源: https://blog.csdn.net/EVILORHERO/article/details/120759043

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有