前端跨域的原则与避免途径
1.跨域
跨域资源共享(Cross-Origin Resource Sharing, CORS)是为解决 Ajax 技术难实现跨域问题而提出的一个规范,这个规范试着从根本上解决安全的跨域资源共享问题。
2.option请求
option请求是一种探测性的请求,通过这个方法,客户端可以在采取具体资源请求之前,决定对该资源采取何种必要的措施。
3.跨域解决方案
若要允许跨域,传统的解决方案是服务器端设置 Access-Control-Allow-Origin: *
,但是这是一种不安全的方法,新的标准里已经不允许使用了。
若不解决跨域的话,不知道请求是否可以使用,为解决这个问题标准里增加了一种请求叫做preflighted request,也就是option方法。支持此协议的浏览器发送真正的请求前, 会先发送一个方法为 OPTIONS 的预请求(preflight request), 用于试探服务端是否能接受真正的请求,如果 options 获得的回应是拒绝性质的,比如 404\403\500 等 http 状态,就会停止 post、put 等请求的发出。
4.什么情况会出现option请求
- 请求方法不是GET/HEAD/POST;
- POST请求的Content-Type并非 application/x-www-form-urlencoded, multipart/form-data, 或text/plain;
- 请求设置了自定义的header字段.
5.解决方案
- 需要明确前端无法解决并且绕不过去;
- 后端处理跨域,绕过此问题;
- Nginx配置,需求请自性Google;
- 若是简单请求,不要自定义header字段。
6.避免途径
- 后端处理;
- Nginx配置;
- 前端尽量避免自定义header字段;
- header里面尽量比曼使用复杂字段,尤其是json;