仅发送带有200个响应的OPTIONS请求

时间:2019-01-07 11:19:02

标签: django angular

我的情况与此question有点相似,但是有些不同,也没有答案。

我的后端是python,前端是Angular。实时服务器是Ngnix / Unix,而开发服务器是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',
)

1 个答案:

答案 0 :(得分:0)

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

df
    Name1   Name2      ID1     ID2
0   John    Jack        0       1
1   John    Albert      0       2
2   Jack    Eva         1       3
3   Albert  Sara        2       5
4   Eva     Sara        3       5

您还需要在CORS_ORIGIN_WHITELIST = [ 'localhost:4800', '127.0.0.1:4800' ] 之后添加中间件

SecurityMiddleware

您还需要向您的'corsheaders.middleware.CorsMiddleware', 中添加'corsheaders',

此外,您可以简单地设置INSTALLED_APPS,除了上面列出的内容之外,还可以使用CORS。