做项目的时候由于访问了不同的服务器,然后导致了跨域问题,报错情况为:
has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: Redirect is not allowed for a preflight request。

从网上找了解决办法,也就是采用CORS方案,在要访问的跨域服务器上的返回页面加上标头:
response.setHeader(“Access-Control-Allow-Origin”,request.getHeader(“Origin”));
response.setHeader(“Access-Control-Allow-Credentials”, “true”);
response.addHeader(“Access-Control-Allow-Methods”, “POST, GET, OPTIONS, DELETE, PUT”);
response.addHeader(“Access-Control-Allow-Headers”, request.getHeader(“Access-Control-Request-Headers”));
response.addHeader(“Access-Control-Max-Age”, “120”);

但是加了以后不管用。

我注意到后面有一句Redirect is not allowed for a preflight request:重定向不允许preflight request请求。我寻思着我这也没重定向啊。
于是我查看了我的请求:

发现我的请求URL:http://localhost:8080/ReadCard2后面好像少了一个斜杠’/’
换成http://localhost:8080/ReadCard2/果然没有报跨域问题了!

要是还存在报错,那么你的请求可能是复杂请求而部署简单请求,要是复杂请求,服务器一般不允许访问的,复杂请求发送之前会发送一个预检请求,询问服务器自己有没有权限。最好在过滤器里边处理预检请求(也就是返回指定的http的header,这些header的作用是给前端访问权限),因为你的预检请求会到不了jsp,因此jsp里边的代码进行预检请求的处理是无效的,根本不会执行到,serverlet里边我不知道能不能处理预检请求。

更多推荐

关于跨域 Response to preflight request doesn‘t pass access control check