回复 @cxjwin
面试吃瘪记录
根本原因是浏览器的同源策略:协议、域名、端口三者有一个不同,就是跨域。
一个常被误解的点:跨域限制的是浏览器让页面脚本读取响应,而不是阻止请求发出。对于简单请求,服务端其实已经收到并处理了,只是浏览器不把结果交给页面。所以跨域不能当作安全防护。
非简单请求(比如带自定义头、Content-Type 为 application/json),浏览器会先发 OPTIONS 预检请求,服务端允许后才发真正的请求。
解决方式:
① CORS:服务端返回 Access-Control-Allow-Origin 等响应头,这是标准做法。
② 反向代理:前端和接口放到同一个域名下,由 Nginx 转发。
③ JSONP:只支持 GET,已经过时。
服务端之间调用不经过浏览器,不存在跨域问题。
面试时可以这样答:浏览器同源策略限制脚本读取不同源的响应;用 CORS 响应头或反向代理同域解决,非简单请求会先发预检。
00156
