flask - 如何使用协议 https 返回位置标头 url?
问题描述
我有一个安全的 webapp,它带有一个基于烧瓶的 Web 和 Celery 容器,通过https进行通信。
Web 容器从客户端接收使用 https 协议的 POST fetch,启动后台任务,并返回包含任务状态 url 的响应:
jsonify({}), 202, {'Location': url_for('create_zip_file_taskstatus', task_id=task.id)}
客户端等待响应,然后获取任务状态的 url:
let create_zipfile_status_url = response.headers.get('location');
没有协议的位置本身的相对 url 很好:
url_for('create_zip_file_taskstatus', task_id=task.id): /status/c4bc9e2c-6ecd-4bf3-bc25-782f8e4e66c6
但是完整的 url 有一个http协议,这会导致 CORS 错误。
create_zipfile_status_url: http://localhost/status/7aba0d27-712d-4623-a37e-5262b53fe212
如何将位置标头 url 设置为使用协议 https(而不是 http)?
解决方案
我在这里找到了解决方案。需要添加_external=True, _scheme='https'
即更改
return jsonify({}), 202, {'Location': url_for('create_zip_file_taskstatus', task_id=task.id)}
至
return jsonify({}), 202, {'Location': url_for('create_zip_file_taskstatus', task_id=task.id, _external=True, _scheme='https')}
推荐阅读
- javascript - Collapsible 或 Accordion 哪个更适合隐藏答案?
- php - 数组到字符串的转换 SOAP
- android - 将在 Android 手机上“执行”短信的链接
- graphql - 在 GraphQL 中传递变量
- excel - 当使用 VBA 在另一个单元格中使用列表更改值时,如何对某些单元格使用复制值?
- symfony - 无法打开远程项目:环境“master”处于非活动状态
- ios - 如何在swiftui中的if-condition语句中显示警报视图?
- ios - 在用户提供的队列上同步或异步调用委托方法
- python - 如何构造 python 导入语句来检查调用命名空间中是否存在模块别名?
- android - Wifi Direct - 此设备地址不适用于 android 10