美文网首页
Python | 跨域

Python | 跨域

作者: CarryLili | 来源:发表于2019-08-09 21:41 被阅读0次

    今日目标:带你们领略跨域的奥秘~

    • 1,为什么会出现跨域问题?
    • 2,跨域的定义是什么?
    • 3,如何避免跨域?

    我们平常写代码的时候,应该很少碰到这个问题,因为所有的逻辑代码都是写在同一个项目中,那到底什么时候会出现跨域?其实这里面牵涉到一个同源策略问题,接下来我们先探讨一下同源策略,接着进一步解析跨域。

    同源策略是浏览器的一个安全功能,不同源的客户端脚本(js文件)在没有明确授权的情况下,不能读写对方资源。只有同一个源的脚本赋予dom、读写cookie、session、ajax等操作的权限。

    同源政策的目的:是为了保证用户信息的安全,防止恶意的网站窃取数据。

    我们都知道 url由协议、域名、端口和路径组成,如果两个url的协议、域名和端口相同,则认为这两个url是同源的,否则,就为跨域。

    举个例子:

    前段时间我们接了一个项目,采用的开发模式是前后端分离,我们的前端和后端分别是两个不同的端口,这就涉及到跨域访问数据的问题,因为浏览器的同源策略,默认是不支持两个不同域名间相互访问数据的,而我们需要在两个域名间相互传递数据,这时,就出现了跨域问题,接下来跟大家分享一下如何解决这种问题。

    • 我们项目使用的是django框架,我们使用django-cors-headers扩展,来解决后端对跨域访问的支持。
    • 凡是出现在白名单中的域名,都可以访问后端。
    • CORS_ALLOW_CREDENTIALS 指明在跨域访问中,后端是否支持对cookie的操作。

    django-cors-headers如何使用?具体操作如下:

    1,安装
    pip install django-cors-headers
    
    2,添加应用
    INSTALLED_APPS = (
        ...
        'corsheaders',
        ...
    )
    
    3,设置中间层
    MIDDLEWARE = [
        'corsheaders.middleware.CorsMiddleware',
        ...
    ]
    
    4,添加白名单
    # CORS
    CORS_ORIGIN_WHITELIST = (
        '127.0.0.1:8080',
        'localhost:8080',
        'www.xxx.xx:8080',
        'api.xxx.xx:8000'
    )
    CORS_ALLOW_CREDENTIALS = True  # 允许携带cookie
    

    具体的流程如下:
    1、浏览器会第一次先发送options请求询问后端是否允许跨域,后端查询白名单中是否有这两个域名

    2、如过域名在白名单中则在响应结果中告知浏览器允许跨域

    3、浏览器第二次发送post请求,携带用户登录数据到后端,完成登录验证操作

    解决这种跨域问题,其实还有其他的解决方法,后面我们再慢慢分享

    参考文档:
    https://github.com/adamchainz/django-cors-headers

    相关文章

      网友评论

          本文标题:Python | 跨域

          本文链接:https://www.haomeiwen.com/subject/hgykjctx.html