乐趣区

老生常谈跨域问题

前段时间在网上跟一个大厂据说很 NB 的同行大佬聊天,然后大佬问了我一个问题,“在实际生产中前端怎么解决跨域问题”我当时就回答说我们目前的状况是需要服务端做一些配合解决的,然后大佬很不满意的暗示了我一下 JSONP 用过吗?我当时就觉得很不可思议,实际生产中就只有 get 请求吗?而且这玩意儿在实际生产中都基本不用的,我开始有点怀疑我是不是掉队了,所以今天大概梳理下这块的知识点。


浏览器在请求不同域的资源时,会因为同源策略的影响请求不成功,这就是通常被提到的“跨域问题”。作为前端开发, 跨域经常遇到,我们通常所说的 JS 跨域,指的是在处理跨域请求的过程中,技术面会偏浏览器端较多一些,那什么是跨域呢?
JavaScript 出于安全方面的考虑,不允许跨域调用其他页面的对象,当协议、子域名、主域名、端口号,其中的任意一个不同的时候都是不同的域,那也就是算做跨域。
请求跨域的时候并不是请求发不出去,请求能发出去,服务端能收到请求并正常返回结果,只是结果被浏览器拦截了,正是因为同源策略的限制,同源策略的要求是协议、域名、和端口号都完全一致才可以进行正常的通信。

需要说明的几个点:
1. 如果是协议和端口造成的跨域问题,前端是无能为力的。
2. 在跨域问题上,域只是通过访问 URL 的头部(.com 或者.cn 以及之前部分)来识别的,而不是根据域名对应的 IP 地址是否相同去判断的。
3. 在实际生产中 JSONP 的局限性很大,基本上不会去考虑,使用几率很小。


目前我们的状况是在服务器端头部增加配置:

header("Access-Control-Allow-Origin:*");
header("Access-Control-Allow-Methods:POST,GET");





各位路过的大佬有什么优秀的方案吗?请不吝赐教

退出移动版