Django 访问媒体文件时仅获取Cors头错误,应用程序的其余部分工作正常(DRF、Pythonywhere、React)

Django 访问媒体文件时仅获取Cors头错误,应用程序的其余部分工作正常(DRF、Pythonywhere、React),django,django-rest-framework,cors,pythonanywhere,django-cors-headers,Django,Django Rest Framework,Cors,Pythonanywhere,Django Cors Headers,这在chrome和firefox上都有发生。我有一个react应用程序,在我尝试访问上传的mp3媒体文件之前,它可以与我的django rest framework后端进行良好的通信。然后我得到: 已被CORS策略阻止:请求的资源上不存在“Access Control Allow Origin”标头。如果不透明响应满足您的需要,请将请求的模式设置为“No CORS”,以获取禁用CORS的资源 如果我点击chrome控制台中的错误媒体链接,它会将我带到上传的mp3,它会播放得很好 我的应用程序部署

这在chrome和firefox上都有发生。我有一个react应用程序,在我尝试访问上传的mp3媒体文件之前,它可以与我的django rest framework后端进行良好的通信。然后我得到:

已被CORS策略阻止:请求的资源上不存在“Access Control Allow Origin”标头。如果不透明响应满足您的需要,请将请求的模式设置为“No CORS”,以获取禁用CORS的资源

如果我点击chrome控制台中的错误媒体链接,它会将我带到上传的mp3,它会播放得很好

我的应用程序部署在Pythonywhere上。My settings.py:


INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'tagging',
    'rest_framework',
    'corsheaders',
    'rest_framework.authtoken',
]

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware',
...

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'STATIC')

MEDIA_URL = '/media/'

MEDIA_ROOT = os.path.join(BASE_DIR, 'MEDIA')

CORS_ALLOW_ALL_ORIGINS = True


REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',
    ]
}
网址:

我在Pythonywhere web应用程序中设置了静态和媒体文件:

URL:/STATIC/目录:/home/username/project/STATIC

URL:/MEDIA/目录:/home/username/project/MEDIA


不知道为什么会发生这种情况,非常感谢您的帮助。

如果您可以访问nginx配置文件,请查看您的服务器配置。如果有
媒体的位置
,则应手动添加所需的标题

这个问题与媒体文件由nginx而不是你的应用程序提供这一事实有关,因此django corsheaders对这些资源没有影响:

server {
        ...

        location /media/ {
            add_header Access-Control-Allow-Origin *;
            root /path/to/your/project/root;
        }
}

如果您希望使用CORS头提供静态文件,则需要从web应用程序提供这些文件,而不使用静态文件映射。

如何提供应用程序?(反向代理?、nginx?apache?)我相信nginx。我意识到这与我如何通过wavesurferjs给媒体打电话有关。还可以,;感谢您的帮助,但显然pythonanywhere不允许您配置nginx配置文件。我如何在pythonanywhere上使用Django Rest框架进行配置?当我在我的OP中使用相同的url模式尝试这样做时,我得到了404。我在PythonAnywhere论坛上所能找到的关于媒体URL的所有信息就是人们说要像静态URL一样映射文件
server {
        ...

        location /media/ {
            add_header Access-Control-Allow-Origin *;
            root /path/to/your/project/root;
        }
}