django - 仅发送带有 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',
)
解决方案
您需要将特定来源列入白名单。使用corsheaders,例如:
CORS_ORIGIN_WHITELIST = [
'localhost:4800',
'127.0.0.1:4800'
]
您还需要在之后立即添加中间件SecurityMiddleware
'corsheaders.middleware.CorsMiddleware',
而且你还需要添加'corsheaders',
到你INSTALLED_APPS
。
此外,CORS_ALLOW_CREDENTIALS = True
除了我上面列出的内容之外,您还可以简单地设置 CORS 工作。
推荐阅读
- c# - 颜色量化 - 流行度算法
- html - 使用 jQuery 将图像附加到 HTML,然后用新图像替换附加的图像
- angular - 如何使用 ngx-quill 构建 Angular 8?
- azure-ad-b2c - 在身份验证失败时继续 Azure B2C 用户旅程
- php - password_hash 和 password_verify 的问题,在一种情况下总是返回 true,在另一种情况下返回 false
- vba - 将工作表复制到具有粘贴值并保留格式的新工作簿
- reactjs - 为什么这对 redux 代码起作用?
- ruby-on-rails - heroku 生成与开发控制台相同的日志,但 AWS 中的相同应用程序没有生成相同的日志
- powershell - Powershell:将文件从网络复制到 PC 的基础 PC 模型
- python - 度量 F1 警告零除法