CORS跨域请求
CORS跨域请求
允许跨域请求
只需要在服务器设置响应头Access-Control-Allow-Origin
, 不然的话可以从服务器拿到响应,但是浏览器不会把这个响应显示出来。
(index):1 Access to XMLHttpRequest at 'http://localhost:9001/demo/name' from origin 'http://localhost:9002' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
方案:
response.setHeader("Access-Control-Allow-Origin", "http://localhost:9002");
请求响应中会携带:Access-Control-Allow-Origin: http://localhost:9002
访问成功,可以获取数据。
Access-Control-Allow-Origin: http://localhost:9002
Content-Length: 6
Content-Type: text/html;charset=UTF-8
Date: Fri, 01 Nov 2019 01:24:33 GMT
跨域请求携带cookie
//服务器端允许跨域请求携带cookie。
response.setHeader("Access-Control-Allow-Credentials", "true");
# 同源访问,会携带cookie。但是不同源的访问服务器不会响应cookie。尽管代码中设置了。
# http://localhost:9001/demo/name
Access-Control-Allow-Origin: http://localhost:9002
Content-Length: 6
Content-Type: text/html;charset=UTF-8
Date: Fri, 01 Nov 2019 01:24:33 GMT
Set-Cookie: age=25
# 不同源访问,并没有返回cookie
Access-Control-Allow-Origin: http://localhost:9002
Content-Length: 6
Content-Type: text/plain;charset=UTF-8
Date: Fri, 01 Nov 2019 01:15:22 GMT
/*
服务端
*/
@RestController
@RequestMapping("/demo")
public class DemoController {
@RequestMapping("/name")
public String name(HttpServletResponse response){
response.setHeader("Access-Control-Allow-Origin", "http://localhost:9002");
// response.setHeader("Access-Control-Allow-Credentials", "true");
return "刘备";
}
}
bugs
Access to XMLHttpRequest at 'http://localhost:9001/demo/name' from origin 'http://localhost:9002' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
# 请求头
Accept: */*
Origin: http://localhost:9002
Referer: http://localhost:9002/
Sec-Fetch-Mode: cors
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36
# 响应头
Content-Length: 6
Content-Type: text/plain;charset=UTF-8
Date: Thu, 14 Nov 2019 00:35:24 GMT
# 响应体
刘备
现象:浏览器可以拿到服务器的响应但是因为浏览器的同源策略,浏览器不会把响应给js代码。