跨越相关知识(JSONP、Nginx 反向代理( proxy))

为什么会存在跨域这个问题

因为存在浏览器同源策略,所以才会有跨域问题。那么浏览器是出于何种原因会有跨域的限制呢。其实不难想到,跨域限制主要的目的就是为了用户的上网安全。

浏览器的同源策略

同源策略是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。

同源的定义

所谓同源是指:两个页面具有相同的域名、协议、端口,三个要素缺一不可

跨域的原理

跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的。
同源策略,是浏览器对 JavaScript 实施的安全限制,只要协议、域名、端口有任何一个不同,都被当作是不同的域。
跨域原理,即是通过各种方式,避开浏览器的安全限制。

跨域解决方案

有以下几种办法:
在这里插入图片描述
分享几个常用到的办法:

  • 1、JSONP:

(Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据。
ajax 请求受同源策略影响,不允许进行跨域请求,而 script 标签 src 属性中的链 接却可以访问跨域的 js 脚本,利用这个特性,服务端不再返回 JSON 格式的数据,而是 返回一段调用某个函数的 js 代码,在 src 中进行了调用,这样实现了跨域。)

步骤:

  1. 去创建一个script标签
  2. script的src属性设置接口地址
  3. 接口参数,必须要带一个自定义函数名,要不然后台无法返回数据
  4. 通过定义函数名去接受返回的数据
//动态创建 script
var script = document.createElement('script');

// 设置回调函数
function callbackFunction(data) {
    console.log(data);
}

//设置 script 的 src 属性,并设置请求地址
script.src = 'https://api.ycsnews.com/test?callback=callbackFunction';

// 让 script 生效
document.body.appendChild(script);

JSONP 的缺点: JSON 只支持 get,因为 script 标签只能使用 get 请求; JSONP 需要后端配合返回指定格式的数据。

  • 2、Nginx 反向代理( proxy)
    配置一个代理服务器,反向代理访问跨域的接口
    跨域配置:
    (Vue-CLI 是基于 webpack 的,通过 webpack-dev-server 在本地启动脚手架,也就是在本地启动了一个 Node 服务,来实时监听和打包编译静态资源,由于都是封装好的,只需要配置即可,我们在 vue.config.js 中配置代理如下:)
module.exports = {
  //...
  devServer: {
    proxy: {
      '/api': 'http://www.hahaha.com'
    }
  }
}

如上所示时,当你请求 /api/abc 接口时就会被代理到 http://www.hahaha.com/api/abc

其他跨越解决办法详解可跳转至跨越解决方案

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
跨域是指在浏览器中发起不同源(即不同协议、域名或端口)之间的网络请求时,由于浏览器的安全策略限制,会出现请求被拦截的情况。为了解决跨域问题,可以通过在服务器端进行反向代理来实现跨域请求。 Nginx是一个高性能的HTTP和反向代理服务器。在处理跨域问题时,可以使用Nginx进行反向代理转发请求。假设有两个不同域名的网站 A 和 B,A 需要获取 B 中的某个资源。 首先,在Nginx的配置文件中设置跨域请求的规则。可以使用 `add_header` 指令设置 `Access-Control-Allow-Origin` 响应头,将合法的域名添加到该头中,以允许指定的域名跨域访问。 然后,配置 Nginx 实现请求的反向代理转发。在 Nginx 的配置文件中,使用 `location` 指令来指定要转发的请求路径,并使用 `proxy_pass` 指令将请求转发到目标服务器的地址。同时,可以设置 `proxy_set_header` 指令来传递请求头信息。 最后,重启或重新加载 Nginx 服务让配置文件生效,并测试跨域请求。当浏览器发起跨域请求时,Nginx 接收到请求后会将其转发到目标服务器,再将响应返回给浏览器。由于 Nginx反向代理设置了合法的跨域请求头,浏览器就会允许跨域访问,从而解决了跨域问题。 需要注意的是,为了保证安全性,应该仔细配置 Nginx 的访问权限,避免未授权的访问。此外,还应该遵守跨域请求的安全策略,尽量减少跨域请求的频率,使用合适的跨域请求技术,例如 JSONP、CORS 等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值