接口请求跨域了怎么办?看这里

什么是跨域

跨域,全称为Cross-Origin Resource Sharing,是一种允许当前域(domain)的资源被其他域(domain)的脚本请求访问的机制。这种情况通常出现在当一个请求的URL的协议、域名、端口三者之间任意一个与当前页面URL不同的情况。

跨域问题是浏览器的同源策略导致的,即协议,主机,端口三者都不一致时,不能互相访问。这是因为浏览器为了保护用户安全,实现的一种机制叫做同源策略。同源策略是一种约定,它是浏览器的一种安全功能,不能请求第三方网页。当协议、子域名、主域名、端口号中任何一个不相同时,都会产生跨域问题。

在Java代码中解决跨域问题,可以通过设置响应头来实现。以下是一个简单的示例:

import javax.servlet.http.HttpServletResponse;

public void setCrossDomainHeaders(HttpServletResponse response) {
    response.setHeader("Access-Control-Allow-Origin", "*"); // 允许所有域名访问
    response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT"); // 允许的请求方法
    response.setHeader("Access-Control-Max-Age", "3600"); // 预检请求的结果缓存时间
    response.setHeader("Access-Control-Allow-Headers", "x-requested-with, Content-Type"); // 允许的请求头
}

在处理跨域请求时,可以在Controller中使用这个方法来设置响应头。例如:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class CrossDomainController {

    @GetMapping("/cross-domain")
    public String crossDomain() {
        return "Hello, cross-domain!";
    }

    @GetMapping("/cross-domain-with-header")
    public String crossDomainWithHeader(HttpServletResponse response) {
        setCrossDomainHeaders(response);
        return "Hello, cross-domain with header!";
    }

    private void setCrossDomainHeaders(HttpServletResponse response) {
        response.setHeader("Access-Control-Allow-Origin", "*"); // 允许所有域名访问
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT"); // 允许的请求方法
        response.setHeader("Access-Control-Max-Age", "3600"); // 预检请求的结果缓存时间
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with, Content-Type"); // 允许的请求头
    }
}

这样,当客户端发起跨域请求时,服务器会返回相应的响应头,允许跨域访问。

你可能感兴趣的:(java服务端,java,前端,springboot)