场景复现:调用GET请求:http://ip:port/stdies/list,产生跨域问题:http://ip:port/stdies/list, from origin 'http://ip:port' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
要解决REST-API的跨域问题,你可以考虑以下几种方法:
1. 在服务端启用跨域资源共享(CORS):如果你有权限访问REST-API服务器的配置,可以尝试在服务端启用CORS。在REST-API的配置中,你可以指定允许的来源、请求方法等信息,以便让客户端能够跨域访问API。
2. 代理转发请求: 在你的应用程序后端,可以设置一个代理服务器,将来自客户端的API请求转发到REST-API服务器。这样客户端就只需要和你的后端通信,而你的后端负责和REST-API进行通信,从而规避了跨域限制。如采用Spring架构项目,于项目中利用RestTemplate调用api接口,在进行跨域配置,所开放的接口可解决跨域问题。
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**") // 所有接口
.allowCredentials(true) // 是否发送 Cookie
.allowedOriginPatterns("*") // 支持域
.allowedMethods("GET", "POST", "PUT", "DELETE") // 支持方法
.allowedHeaders("*")
.exposedHeaders("*");
}
}
3. 使用反向代理: 在服务器端设置一个反向代理,将客户端的请求先发送到反向代理服务器,然后由反向代理服务器转发请求到REST-API服务器。通过反向代理,可以实现对客户端请求和服务器响应的控制和修改。利用Nginx实现反向代理,简单易用且强大,相关部署教程可参考:Nginx Windows详细安装部署教程
4. JSONP(JSON with Padding): 如果REST-API支持JSONP,你可以尝试使用JSONP来进行跨域请求。不过需要注意的是,JSONP具有一定的安全风险,因此需要谨慎使用。
5. 使用WebSocket:如果以上方法都无法解决跨域问题,你可以考虑使用WebSocket来建立客户端和REST-API服务器之间的持久连接,WebSocket不受同源策略限制。
解决REST-API的跨域问题在选择解决方案时,需要根据具体情况和实际需求来进行权衡和决定。同时,为了确保系统安全,建议在实施任何跨域解决方案之前,仔细评估可能的安全风险,并采取相应的安全措施。