什么是跨域,如何解决跨域问题

跨域

协议域名端口,三者有一不一样,就是跨域

www.baidu.com和zhidao.baidu.com 就是跨域

如何解决跨域

最常见的解决方案:

  1. CORS,在服务器端设置响应头,如 Access-Control-Allow-Origin: *,前端无须设置,若要带 cookie 请求,前后端都需要设置。
  2. Reverse Proxy(服务器反向代理),在 nginx/traefik/haproxy 等反向代理服务器中设置为同一域名
  3. JSONP,

    原理是:动态插入script标签,通过script标签引入一个js文件,这个js文件载入成功后会执行我们在url参数中指定的函数,并且会把我们需要的json数据作为参数传入。

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

    详解见 JSONP 的原理是什么,如何实现

附代码: Nginx 关于跨域的配置

server {
  listen 80;
  server_name shanyue.tech;

  location / {
    # 避免非root路径404
    try_files $uri $uri/ /index.html;
  }

  # 解决跨域
  location /api {
    # 或者是 http://localhost:8080
    proxy_pass http://api.shanyue.tech;
  }
}

出现跨域问题的原因:

在前后端分离的模式下,前后端的域名是不一致的,此时就会发生跨域访问问题。

在请求的过程中我们要想回传数据一般都是 post/get 请求,所以出现跨域问题

跨域问题来源于 JavaScript 的同源策略,即只有在协议+主机名+端口号(如存在)相同的情况下才允许相互访问。也就是说 JavaScript 只能访问和操作自己域下的资源,不能访问和操作其他域下的资源。

同源策略

是由 NetScape 提出的一个著名的安全策略。所谓的同源,指的是协议,域名,端口相同。

浏览器处于安全方面的考虑,只允许本域名下的接口交互,不同源的客户端脚本,在没有明确授权的情况下,不能读写对方的资源。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
跨域(Cross-Origin)指的是在浏览器中,当一个网页的 JavaScript 代码尝试访问不同源(即不同域名、端口或协议)的资源时,就会触发跨域问题。浏览器为了保护用户的安全,限制了跨域资源的访问。 跨域问题可以通过以下几种方式进行解决: 1. JSONP(JSON with Padding):JSONP 是一种利用 `<script>` 标签可以跨域加载资源的特性来实现跨域请求的方法。服务器端返回的数据需要包裹在一个函数调用中,前端通过动态创建 `<script>` 标签来获取数据。但是 JSONP 只支持 GET 请求,并且存在安全性问题,容易受到 XSS 攻击。 2. CORS(Cross-Origin Resource Sharing):CORS 是一种现代浏览器支持的跨域解决方案。它通过在服务器端设置响应头来控制是否允许跨域请求。具体来说,服务器需要在响应头中设置 `Access-Control-Allow-Origin` 字段来指定允许的源(域名、端口或通配符 *),以及其他相关的 CORS 相关字段。通过这种方式,浏览器会根据响应头的配置判断是否允许跨域请求。 3. 代理服务器:可以通过在服务器端设置代理服务器来解决跨域问题。前端代码发送请求给同源的服务器,然后由服务器端代理转发请求到目标服务器,并将响应结果返回给前端。这种方式需要在服务器端进行配置,并且会增加服务器的负载。 4. WebSocket:WebSocket 是一种全双工通信协议,它可以在浏览器和服务器之间建立持久连接。由于 WebSocket 协议并不受同源策略的限制,因此可以用于跨域通信。 5. postMessage:postMessage 是一种在不同窗口或 iframe 之间进行跨域通信的方法。通过调用 `window.postMessage` 方法,可以在不同窗口之间传递消息。 需要注意的是,以上解决方案的可行性和适用性取决于具体的情况和需求。在使用时需要根据实际情况选择合适的解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值