Pyramid 如何知道在 request.static_url 上呈现什么协议?
How does Pyramid know what protocol to render on request.static_url?
假设我有一个包含这一行的模板:
<script src="${request.static_url('appname:static/app/scripts/somescript.js')}"></script>
我有 2 个环境。在一个环境中,当您使用 https 请求页面时 - request.static_url 呈现 https 脚本源。在第二个环境中——当我使用 https 请求页面时——它出于某种原因呈现了 http。
Chrome 然后会抛出错误,因为该页面想要在使用 https 加载的页面上使用 http 下载脚本。
Pyramid 从哪里获取协议?如何让它采用页面加载时使用的协议?
我知道我可以给 add_static_view 一个绝对 url 但我当然更喜欢更简洁的解决方案。
Pyramid 使用 WSGI 环境获取wsgi.url_scheme
。您可以了解有关 WSGI environment on https://WSGI.org.
的更多信息
Pyramid 中的环境来自 Request 对象,并且在您的应用程序中可用 request.environ
。这是一本字典,因此您可以通过以下方式获得当前的 URL 方案:
request.environ['wsgi.url_scheme']
应用服务器在收到传入请求后正确构建 WSGI 环境。例如,如果您正在使用反向代理,并且没有正确传递用于连接到反向代理的方案,这可能会导致问题。
Waitress,Pyramid 默认使用的 WSGI 服务器有很好的中间件文档可以帮助解决这个问题:http://waitress.readthedocs.org/en/latest/#using-behind-a-reverse-proxy
假设我有一个包含这一行的模板:
<script src="${request.static_url('appname:static/app/scripts/somescript.js')}"></script>
我有 2 个环境。在一个环境中,当您使用 https 请求页面时 - request.static_url 呈现 https 脚本源。在第二个环境中——当我使用 https 请求页面时——它出于某种原因呈现了 http。 Chrome 然后会抛出错误,因为该页面想要在使用 https 加载的页面上使用 http 下载脚本。
Pyramid 从哪里获取协议?如何让它采用页面加载时使用的协议?
我知道我可以给 add_static_view 一个绝对 url 但我当然更喜欢更简洁的解决方案。
Pyramid 使用 WSGI 环境获取wsgi.url_scheme
。您可以了解有关 WSGI environment on https://WSGI.org.
Pyramid 中的环境来自 Request 对象,并且在您的应用程序中可用 request.environ
。这是一本字典,因此您可以通过以下方式获得当前的 URL 方案:
request.environ['wsgi.url_scheme']
应用服务器在收到传入请求后正确构建 WSGI 环境。例如,如果您正在使用反向代理,并且没有正确传递用于连接到反向代理的方案,这可能会导致问题。
Waitress,Pyramid 默认使用的 WSGI 服务器有很好的中间件文档可以帮助解决这个问题:http://waitress.readthedocs.org/en/latest/#using-behind-a-reverse-proxy