首页 > 解决方案 > 如何使用协议 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)?

标签: flaskhttps

解决方案


我在这里找到了解决方案。需要添加_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')}

推荐阅读