前后端分离的项目中,前端和后端通常运行在不同的服务器或者端口上。这种情况下,当前端尝试获取后端的数据时,就会遇到跨域问题。跨域问题是由于浏览器的同源策略导致的。同源策略是一种约定,它规定了浏览器可以从哪些源(协议、域名、端口都相同)加载资源。 跨域问题指的是,当一个网页尝试从不同的源请求数据时,浏览器会阻止这个请求,以保护用户的安全。例如,如果你的前端运行在http://localhost:3000,而你的后端运行在http://localhost:8000,那么当前端尝试获取后端的数据时,就会遇到跨域问题。只要url中的ip:port任意一个不同,就被视为跨域。
django解决跨域问题遵从如下步骤:
1)settings.py文件的INSTALLED_APPS中添加corsheaders,一定要放在需要跨域请求的app前面。
2)settings.py文件的MIDDLEWARE中添加corsheaders.middleware.CorsMiddleware,务必写在CommonMiddleware的上方。
3)settings.py文件中新增CORS_ORIGIN_ALLOW_ALL = True,设置后端允许所有的源(任何网站或web应用)都可以访问Django 应用的资源,不受到同源策略的限制。
4)settings.py文件中新增CORS_ORIGIN_WHITELIST = (['http://*:*']),设置跨域白名单,*:*表示支持任意ip和端口。
5)settings.py文件中新增CORS_ALLOW_METHODS ,指定哪些 HTTP 方法可以被跨源请求
CORS_ALLOW_METHODS = (
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
'VIEW',
)
6)settings.py文件中新增CORS_ALLOW_HEADERS,指定哪些 HTTP 请求头可以被跨源请求
CORS_ALLOW_HEADERS = (
'x-requested-with',
'content-type',
'accept',
'origin',
'authorization',
'x-csrftoken',
'Content-Disposition',
'Cookie',
'user-agent',
'dnt',
'accept-encoding',
)
7)settings.py文件中新增CORS_ALLOW_CREDENTIALS = True,设置允许跨源请求携带凭证(如 Cookies 和 HTTP 认证信息)
8)settings.py文件中新增ALLOWED_HOSTS = ['*'],设置定义了哪些主机/域名可以访问Django应用。 '*'是一个通配符,表示允许所有主机可以访问。这个设置在生产环境中非常重要,因为它可以防止HTTP Host头攻击。在开发环境中,你通常可以设置为['*'],但在生产环境中,应该设置为实际主机名或者IP地址。