首页 > 解决方案 > 仅发送带有 200 响应的 OPTIONS 请求

问题描述

我的情况与这个问题有点相似,但有点不同,也没有答案。

我的后端是 python,前端是 Angular。Live sever 是 Ngnix/Unix,而 dev 是 Windows。每个请求只发送 OPTIONS 请求,成功响应为 200,但不遵循 GET/POST。它工作得很好,只有在生产服务器上才不能工作。控制台中没有 CORS 错误,后端是 debug=True 用于检查目的,但到目前为止没有问题,因为显然没有进行获取/发布。

在开发机器上,一切正常。以前的团队添加了一个自定义标题“语言”:

const clonedRequest = req.clone({ headers: req.headers.set('Language', lang) });

我注意到连接到现场时永远不会发送。在开发设置中,我看到以下标题:

Accept application/json
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Connection keep-alive
Content-Length 21
Content-Type application/json
Host 127.0.0.1:9000
Language en
Origin http://localhost:4800

Referer http://localhost:4800/start/forgot-pwd

从前端(开发或生产中)连接到生产时,未发送语言标头,但我怀疑它有问题。无论如何,我在后端的 CORS 看起来像这样:

CORS_ALLOW_HEADERS = (
    'accept',
    'accept-encoding',
    'authorization',
    'content-type',
    'dnt',
    'origin',
    'user-agent',
    'language',
    'x-requested-with',
)

标签: djangoangular

解决方案


您需要将特定来源列入白名单。使用corsheaders,例如:

CORS_ORIGIN_WHITELIST = [
    'localhost:4800',
    '127.0.0.1:4800'
]

您还需要在之后立即添加中间件SecurityMiddleware

'corsheaders.middleware.CorsMiddleware',

而且你还需要添加'corsheaders',到你INSTALLED_APPS

此外,CORS_ALLOW_CREDENTIALS = True除了我上面列出的内容之外,您还可以简单地设置 CORS 工作。


推荐阅读