• django添加跨域头


    一、简介

    一、什么是跨域

    浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域

    二、浏览器的同源策略

    同源策略限制了从同一个源加载的文档或脚本如何与来自另一个源的资源进行交互。这是一个用于隔离潜在恶意文件的重要安全机制

    三、同源的定义

    如果两个页面的协议,端口(如果有指定)和主机都相同,则两个页面具有相同的。我们也可以把它称为“协议/主机/端口 tuple”,或简单地叫做“tuple". ("tuple" ,“元”,是指一些事物组合在一起形成一个整体,比如(1,2)叫二元,(1,2,3)叫三元)

     下表给出了相对http://store.company.com/dir/page.html同源检测的示例:

    URL结果原因
    http://store.company.com/dir2/other.html 成功  只有路径不同
    http://store.company.com/dir/inner/another.html 成功  只有路径不同
    https://store.company.com/secure.html 失败 不同协议 ( https和http )
    http://store.company.com:81/dir/etc.html 失败 不同端口 ( http:// 80是默认的)
    http://news.company.com/dir/other.html 失败 不同域名 ( news和store )

    四、如何允许跨源访问

    使用 CORS 允许跨源访问 

    五、如何阻止跨源访问

    • 阻止跨域写操作,只要检测请求中的一个不可测的标记(CSRF token)即可,这个标记被称为Cross-Site Request Forgery (CSRF) 标记。必须使用这个标记来阻止页面的跨站读操作。
    • 阻止资源的跨站读取,需要保证该资源是不可嵌入的。阻止嵌入行为是必须的,因为嵌入资源通常向其暴露信息。
    • 阻止跨站嵌入,需要确保你的资源不能是以上列出的可嵌入资源格式。多数情况下浏览器都不会遵守 Conten-Type 消息头。例如,如果您在HTML文档中指定 <script> 标记,则浏览器将尝试将HTML解析为JavaScript。 当您的资源不是您网站的入口点时,您还可以使用CSRF令牌来防止嵌入。

    二、使用

    一、通过django中间件进行添加跨域头

    创建中间件文件core.py

    from django.middleware.common import CommonMiddleware
    
    class MiddlewareMixin:
        def __init__(self, get_response=None):
            self.get_response = get_response
            super().__init__()
    
        def __call__(self, request):
            response = None
            if hasattr(self, 'process_request'):
                response = self.process_request(request)
            response = response or self.get_response(request)
            if hasattr(self, 'process_response'):
                response = self.process_response(request, response)
            return response
    
    
    class CORSMiddleware(MiddlewareMixin):
    
        def process_response(self, request, response):
            # 添加响应头
            response["Access-Control-Allow-Origin"] = "*"
    
            # 允许携带Content-Type请求头
            # response["Access-Control-Allow-Headers"] = "Content-Type"
    
            # 允许请求的方法
            # response["Access-Control-Allow-Methods"] = "DELETE,PUT,POST"
    
            return response

    settings.py添加中间件

    MIDDLEWARE = [
        .......
        "app_name.cors.CORSMiddleware",
    ]

    通过添加中间件,当前端通过ajax发送请求时(GET、POST),前端即可收到api返回的数据。

    本文参考https://developer.mozilla.org/zh-CN/docs/Web/Security/Same-origin_policy

  • 相关阅读:
    解决Xcode8打印了nw_socket_handle_socket_event Event mask
    调用系统框架使用设备系统语言的设置,相册相机设置为中文
    ios开发 之 设置多种文字颜色/背景色/文字下划线/行间距 NSString
    IOS 开发中 Whose view is not in the window hierarchy 错误的解决办法
    UITableView设置cell的separator 分割线
    iOS用户点击推送消息进入应用后自动跳转到对应的ViewController
    随感
    JS获取当前网页大小以及屏幕分辨率等
    js将秒转换为 分:秒 函数
    css实现强制不换行/自动换行/强制换行
  • 原文地址:https://www.cnblogs.com/ttyypjt/p/10999449.html
Copyright © 2020-2023  润新知