跨域解决方案

愿对有缘人能有所帮助--<-<-<@

没思路时百度谷歌,有思路时尽量文档。毕竟文档才全面才标准

文章git地址:https://github.com/ShareCookies/front-end/blob/master/%E8%B7%A8%E5%9F%9F/%E8%B7%A8%E5%9F%9F.txt

 

跨域:
    同源策略(Sameoriginpolicy)浏览器最基本的安全功能。
    同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。
    注:
        1.如何算同源:具有相同的协议(protocol),主机(host)和端口号(port)
        2.非同源的请求后端是能接收到了请求并返回响应,但浏览器对会因为同源策略,而对非同源请求返回的结果进行拦截。
解决方案:
    1,2:
        https://blog.youkuaiyun.com/qq_38128179/article/details/84956552
    jsonnp:
        https://blog.youkuaiyun.com/hansexploration/article/details/80314948
    CORS:
        http://www.ruanyifeng.com/blog/2016/04/cors.html
        CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。
        它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。
        解决方案:
            https://blog.youkuaiyun.com/dadiyang/article/details/80289956
            服务器拦截请求,并设置些响应头即可实现跨域资源请求。
            注:
                1.该方案前端无需任何修改,只要后端设置一下即可。
            附:
                1.如果同时设置了下面两个响应头,则Origin的值要为请求源,否则前端console会(但是不影响请求和cookie存储..)报异常。
                    response.setHeader('Access-Control-Allow-Credentials',true);
                    response.setHeader('Access-Control-Allow-Origin','http://localhost:63342');
                    https://blog.youkuaiyun.com/cowshield/article/details/80841034
        例:
            ./CorsFilter.java
            附:
                Spring MVC 注解实现 CORS 跨域:
                    https://www.jianshu.com/p/13d53acc124f
        附:
            跨域设置cookie:
                https://blog.youkuaiyun.com/cowshield/article/details/80841034
                1.(目的为表明后端允许接收跨域的cookie等身份认证,所以浏览器你就不要阻止跨域请求带上cookie的行为了)
                    response.setHeader('Access-Control-Allow-Credentials',true);
                    response.setHeader('Access-Control-Allow-Origin','http://localhost:63342');
                    response.setHeader('Set-Cookie','token=cowshield');
                    注:
                        此时cookie属于的是服务器域名的,而不是请求端域名的。
                        解决方案:
                            I.
                                域名为:a.abc.com b.abc.com
                                那么cookie.setDomain("abc.com");即可。
                            II.
                                域名为:a.com b.com
                                该情况应该是没法携带cookie,把值放header或请求参数中吧。
                2.(目的为,为跨域的请求带上本域的cookie)
                    前端跨域请求设置withCredentials:
                        axios:
                            axios.defaults.withCredentials =true;
                        注:
                            *1.通过设置withCredentials 为true获得的第三方cookies,将会依旧享受同源策略,
                            即只有用服务器域名设置的Cookie才会上传,其他域名的Cookie并不会上传。
                            http://www.ruanyifeng.com/blog/2016/04/cors.html
                            https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/withCredentials
                            
                附:
                    前端请求的request headre 显示为:Provisional headers are shown(临时头部显示),
                    而且你在前端可能会一直看不到携带的cookie,
                    那么此时你应该去后端看下是否接收到cookie。
                        
    Nginx代理:
        hcg:
            访问代理,然后由代理再去请求数据
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值