返回

跨域组件 django-cors-headers 的全面指南

闲谈

使用 Django-CORS-Headers 简化 Django 中的跨域资源共享

跨域资源共享 (CORS) 是一种机制,允许来自不同域的 Web 应用程序进行通信。它通过协商一组 HTTP 头来实现,这些头允许或拒绝跨域请求。

对于 Django 应用程序,django-cors-headers 组件提供了一种简便的方法来处理 CORS 请求。它提供了中间件,用于指定允许的域、HTTP 方法和标头,从而控制对 Django 资源的访问。

安装和配置 django-cors-headers

要安装 django-cors-headers,请使用 pip:

pip install django-cors-headers

在 Django 项目的 settings.py 文件中,配置 django-cors-headers:

# 允许所有域访问资源
CORS_ORIGIN_ALLOW_ALL = False

# 允许指定的域访问资源
CORS_ORIGIN_WHITELIST = [
    'http://localhost:8000',
    'http://127.0.0.1:8000',
]

# 允许在跨域请求中发送凭据
CORS_ALLOW_CREDENTIALS = True

# 指定预检请求的有效期
CORS_PREFLIGHT_MAX_AGE = 86400

禁用特定视图的 CORS 检查

对于需要禁用 CORS 检查的特定视图,可以使用 @cors_exempt 装饰器:

from corsheaders.decorators import cors_exempt

@cors_exempt
def my_view(request):
    # ...

设置说明

  • CORS_ORIGIN_ALLOW_ALL: 允许所有请求访问资源。默认情况下,它设置为 False,这意味着必须明确允许域才能访问资源。
  • CORS_ORIGIN_WHITELIST: 允许指定域访问资源的列表。
  • CORS_ALLOW_CREDENTIALS: 指示服务器是否允许在跨域请求中发送凭据(如 cookie)。默认情况下,它设置为 False
  • CORS_PREFLIGHT_MAX_AGE: 指定预检请求的有效期(以秒为单位)。默认情况下,它设置为 86400 秒(一天)。

优先级

django-cors-headers 的中间件应排在 CsrfViewMiddleware 中间件之前。这确保了 CORS 检查在 CSRF 检查之前发生,避免了潜在的冲突。

调试和故障排除

  • 检查 CORS_ORIGIN_ALLOW_ALLCORS_ORIGIN_WHITELIST 设置是否正确。
  • 确保服务器正在发送正确的 CORS 头。使用浏览器开发人员工具检查响应头。
  • 禁用其他可能干扰 CORS 处理的中间件或第三方库。
  • 查看 Django 日志以查找与 CORS 相关的错误消息。

结论

django-cors-headers 是一款功能强大的组件,用于简化 Django 中的跨域请求处理。通过遵循本指南,您可以轻松配置和使用此组件来保护和管理对应用程序资源的访问。启用跨域请求将允许您构建更强大、更灵活的 Web 应用程序,跨多个域进行无缝通信。

常见问题解答

  1. 如何禁用特定视图的 CORS 检查?

    • 使用 @cors_exempt 装饰器。
  2. 如何允许所有域访问资源?

    • CORS_ORIGIN_ALLOW_ALL 设置为 True
  3. 如何指定允许的域?

    • 将允许的域添加到 CORS_ORIGIN_WHITELIST 列表中。
  4. 如何允许在跨域请求中发送凭据?

    • CORS_ALLOW_CREDENTIALS 设置为 True
  5. 如何设置预检请求的有效期?

    • 设置 CORS_PREFLIGHT_MAX_AGE 配置。