跳转到主要内容

一个为纯Django重定向响应添加HTTP/2服务器推送头的Django中间件

项目描述

Django HTTP/2服务器推送重定向

一个将HTTP/2服务器推送头添加到纯Django重定向响应的Django中间件。

此方法需要Django通过支持HTTP/2服务器推送的服务器进行代理。例如,nginx>=1.13.9apache2>=2.4.26并启用mod_http2,或者使用Cloudflare等CDN服务。

安装

此软件包在PyPI上可用,可以使用pip进行安装。

pip install django-push-redirect

配置

首先配置您的Web服务器以启用HTTP/2并启用服务器推送。

对于nginx,这看起来像这样

server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  ...

  location @python {
    proxy_set_header X-Forwarded-Proto $scheme;
    http2_push_preload on;
    ...
  }
}

Apache和其他服务器/服务的配置留给读者练习(换句话说,我不知道,如果你做了,请贡献!)。

现在请确保Django能够通过配置SECURE_PROXY_SSL_HEADER设置来检测请求是否安全,例如:

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

然后将'push_redirect.middleware.Http2ServerPushRedirectMiddleware'添加到项目的MIDDLEWARE中,确保它位于Django的CommonMiddleware之前。

MIDDLEWARE = [
    ...
    'push_redirect.middleware.Http2ServerPushRedirectMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
]

此中间件会在需要预加载的重定向响应上添加Link rel=preload头部。

如果一切配置正确,你应该会看到重定向不再需要额外的请求到web服务器。

响应取消选择

响应可以显式取消选择添加preload头部。这是通过在response对象上将allow_push_redirect设置为False来完成的,例如:

def opt_out(request):
    response = HttpResponseRedirect("/")
    response.allow_push_redirect = False
    return response

灵感/参考文献

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

django-push-redirect-1.1.0.tar.gz (8.7 kB 查看哈希值)

上传时间

由以下支持