跨域问题小结

几次异地开发都遇到跨域问题,每次都得提醒后台在开发中设置一下 Access-Control-Allow-Origin:* 至于其中的原理,之前没有深入了解过,在这里记录一下吧。

解答

不设置 Access-Control-Allow-Origin:* 用浏览器访问对应 JSON 资源 (HTTP GET) 是可以访问到的。Postman 也是可以看到对应 JSON 的 (这句是废话)。那么由此推断 Access-Control-Allow-Origin:* 必然是作用在浏览器这一环,与服务器无关。


翻阅 HTTP 权威指南,Access-Control-Allow-Origin 属于 Response Header,那么问题就清晰了。甲请求乙,乙返回一个数据,但没说谁可以用,甲虽然拿到了这个数据,但迟迟不敢用。设置了 Access-Control-Allow-Origin 之后,相当于乙告知谁可以用这份数据,甲才敢放心大胆的用。

Wiki

Cross-Origin Resource Sharing (CORS) 是 W3c 工作草案,它定义了在跨域访问资源时浏览器和服务器之间如何通信。CORS背后的基本思想是使用自定义的 HTTP 头部允许浏览器和服务器相互了解对方,从而决定请求或响应成功与否。

提示

// Bad
`Access-Control-Allow-Origin:*`

// Good
`Access-Control-Allow-Origin: http://xxx.xxx.xxx.xxx`

设置为 * 并不是一个明智的举动,尤其是在线上版本。一般设置为下面这种格式较好。