没有前端如何测试后端跨域问题

一、问题

前段时间对项目中的跨域做了相关的处理,网上有很多跨域的解决方案。前端解决,后端解决,nginx代理解决。我采用的是在后端中使用Cors来解决跨域的问题。但是前端项目还没有搭建起来,并不知道Cors的解决方案是否会生效,于是在今天进行了测试。

二、解决方案

  • 直接在浏览器中打开控制台进行测试。
    在这里插入图片描述
  • 浏览器的控制台console直接输入代码
    GET请求
var token= "你的token"; //没有就省略
var xhr = new XMLHttpRequest();
xhr.open('GET', '请求类路径');
xhr.setRequestHeader("x-access-token",token); //没有就省略
xhr.send(null);
xhr.onload = function(e) {
    var xhr = e.target;
    console.log(xhr.responseText);
}

POST请求

var xhr = new XMLHttpRequest();
xhr.open('POST', '请求路径',true);
xhr.setRequestHeader('content-type', 'application/json');
var sendData = {salesmanTel:"4564564"};
 //将用户输入值序列化成字符串
xhr.send(JSON.stringify(sendData));
xhr.onload = function(e) {
    var xhr = e.target;
    console.log(xhr.responseText);
}

注意:使用浏览器测试,如果不生效,有可能是你没有打开一个网站。比如google浏览器,你不可以在google的首页测试,是没有用的。

三、思路

  • 我们的项目是基于springboot搭建的java项目,配置了相关的bean,让其对请求进行拦截处理。
public class DevopsCorsFilter {
    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        // 好像需要制定域
        corsConfiguration.addAllowedOrigin("*");
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");
        corsConfiguration.setAllowCredentials(true);
        UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
        urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
        return new CorsFilter(urlBasedCorsConfigurationSource);
    }
}
  • 但是因为不确定这种解决方案可以到达跨域的要求,为了方便测试,我先使用spring自带的@CrossOrigin注解来进行跨域的处理 。
  • 对于@CrossOrigin注解,大家可以参考这篇文章 @crossOrigin介绍及使用
  • 如果我使用 @CrossOrigin 再加上使用浏览器跨域访问解决,那就说明我上面 CorsConfiguration bean的配置是正确的。
    在这里插入图片描述

四、测试

  • 在浏览器输入相关的配置(我的接口没有做鉴权,所有没有token)
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://localhost:8081/devops/app/user/getPageQuery');
xhr.send(null);
xhr.onload = function(e) {
    var xhr = e.target;
    console.log(xhr.responseText);
}
  • 在浏览器执行后 结果如下 :
    在这里插入图片描述
  • @CrossOrigin注解注释掉后 结果如下 :在这里插入图片描述
  • 由此可见浏览器中是可以测试跨域问题的。
  • 这个时候 我再将 我的 CorsConfiguration bean注入到spring中
    在这里插入图片描述
  • 在浏览器这测试结果如下:
    在这里插入图片描述

五、总结

如果看到这里了,说明你还是用心读完了。遇到问题不可怕,找对方案,解决问题就好了。

### Nginx 配置解决前后端问题的最佳实践 #### 1. 统一处理 CORS 请求 为了有效处理资源共享 (CORS),可以通过在 Nginx 中设置响应头来允许来自特定源的请求。这不仅适用于简单的 GET 和 POST 请求,还涵盖了需要预检的复杂请求。 ```nginx location /api/ { add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; if ($request_method = 'OPTIONS') { return 204; } proxy_pass http://backend; } ``` 上述配置中定义了一个 `/api/` 的位置路径,并设置了必要的 `Access-Control-*` 响应头以支持 CORS[^1]。 #### 2. 定义前后端服务器节点 对于前后端分离的应用架构,在 Nginx 配置文件中的 `http` 上下文中定义上游组(upstream blocks)。这些块用于指定实际提供服务的后端前端服务器地址。 ```nginx upstream backend { server hostname_backend:8080; } upstream frontend { server hostname_frontend:8081; } ``` 此部分配置明确了哪些主机名对应于各自的端口,从而简化了后续代理转发规则的设计[^2]。 #### 3. 实现 HTTPS 访问并强制重定向至安全连接 当涉及敏感数据传输时,建议启用 SSL/TLS 加密通信。同时为了让客户端始终通过加密通道访问资源,应当实施 HTTP 到 HTTPS 的自动重定向机制。 ```nginx server { listen 80; server_name example.com; rewrite ^ https://$host$request_uri? permanent; } server { listen 443 ssl; server_name example.com; ssl_certificate cert.pem; ssl_certificate_key key.pem; location / { try_files $uri $uri/ /index.html; } location /api/ { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # Add CORS headers here as shown earlier... } } ``` 这段代码展示了如何监听两个不同的端口分别处理未加密与已加密流量,并确保所有非HTTPS请求都被永久性地转向到对应的HTTPS版本页面上去;同时也包含了之前提到过的 API 接口上的 CORS 设置[^3]。 #### 4. 合理规划项目结构适应前后端分离模式 考虑到现代 Web 应用往往采取前后端完全解耦的方式构建,因此有必要针对此类场景优化部署方案。即使是在单台物理设备上运行多个独立的服务实例,也可以借助像 Docker 这样的容器化工具轻松管理各个组件间的依赖关系和服务发现过程[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值