跨域解决方案

本文最后更新于:2025年1月29日 凌晨

  1. 最推荐的方式:反向代理

    什么是反向代理呢,站在客户端的角度,代理服务器的就是反向代理。客户端不知道自己连接的是那个服务器,都有代理服务器去决定转发的规则。

    反向代理有诸多好处,比如:保障服务器的安全,因为它隐藏了真正的服务器端地址;负载均衡,通过转发策略向多个服务器进行请求转发;缓存静态内容;

    最常用的反向代理服务器当属 Nginx.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    server {
    listen 443 ssl;
    server_name backend1.example.com;

    ssl_certificate /etc/ssl/certs/server.crt;
    ssl_certificate_key /etc/ssl/certs/server.key;
    #...
    location /yourapp {
    proxy_pass http://url_to_app.com;
    #...
    }
    }

  2. 开发中使用的正向代理

    Webpack 构建的 Webpack-dev-server 插件支持代理的配置:

    1
    2
    3
    4
    5
    6
    7
    8
    devSeerver: {
    proxy: {
    // 以 /api 开头的请求会被转发到target 指定的地址
    '/api/': {
    target: 'http://localhost:8090'
    }
    }
    }

  3. CORS (Cross-Origin Resource Sharing)

    这种跨域方式,将请求类型分为两种——简单请求和非简单请求,分别做出处理

    浏览器发送请求的时候会在头部的 Origin 字段中带上本次的 “源” (协议+域名+端口)信息,服务器端会返回能够接受的源,“*” 表示接受任意源的请求。

  4. Websocket 解决跨域

    Websocket 和 HTTP 一样,也是基于 TCP 的一种网络协议,与 HTTP (HTTPS) 对应的是 WS (WSS),对于 Websocket 没有同源限制。

  5. JSONP (JSON with Padding)

    虽然 AJAX 请求必须同源,但是对 样式、js资源文件的请求却可以是不同源的。

    于是哦,可以通过 script 标签,向另一个服务器端请求文件时带上参数。然后,请求脚本文件后,执行脚本。脚本使用请求 url 中的参数,完成取数据的操作。


跨域解决方案
https://hercules11.github.io/blog/2022/05/29/跨域解决方案-2/
作者
wxc
发布于
2022年5月29日
许可协议