中间件

Starlette使用中间件来扩展功能和在请求处理流程上进行请求接收和请求处理之间的额外处理过程。其中Starlette也提供了不少内置的中间件来完成相应的功能。中间件可以使用Starlette类中提供的add_middleware()方法来添加到处理流程中。add_middleware()方法针对不同的中间件,接受不同的命名参数。

以下就几个常用的中间件进行简单的介绍。

CORSMiddleware

CORSMiddleware位于starlette.middleware.cors包中,用于提供跨域配置。其在add_middleware()方法中接受的参数有以下这些。

  • allow_origins,字符串列表类型,用于配置允许访问的请求来源。['*']表示全部来源。
  • allow_origin_regex,字符串类型,使用正则表达式配置允许访问的请求来源。
  • allow_methods,字符串列表类型,用于配置允许访问的请求方法。['*']表示全部。
  • allow_headers,字符串列表类型,用于配置允许HTTP请求头。
  • allow_credentials,布尔类型,用于配置是否允许跨域Cookie。
  • expose_headers,配置响应头中哪些内容可以被浏览器访问到。
  • max_age,配置浏览器缓存CORS响应的最大时长。

SessionMiddleware

SessionMiddleware用于提供基于Cookie的会话支持。加载SessionMiddleware后,可以使用request.session来访问保存在会话中的内容。SessionMiddleware在add_middleware()方法中接受的参数有以下这些。

  • secret_key,用于加密Session的密钥。
  • session_cookie,用于保存Session ID的Cookie名称。
  • max_age,Session最长的存活时间,默认为2周。
  • same_site,用于配置是否允许跨站发送Session Cookie。
  • https_only,配置是否仅在HTTPS站上使用Session。

HTTPSRedirectMiddleware

HTTPSRedirectMiddleware十分简单,也不需要任何配置,主要是强制将HTTP和WS等非安全连接转向至HTTPS和WSS安全连接。

TrustedHostMiddleware

TrustedHostMiddleware主要用于配置可信网站,用于防止HTTP头攻击。在配置时只接受一个参数:allowed_hosts,字符串列表类型,用于列举可信主机。

GZipMiddleware

GZipMiddleware用于对响应进行压缩,降低响应在网络上的传输时间。在配置时只接受一个参数:minimum_size,整型值,用于表示低于此大小(字节数)的响应将不会被压缩,该值默认为500。

BaseHTTPMiddleware

BaseHTTPMiddleware并不是一个可以直接使用的中间件,而是一个中间件的抽象基类。通过继承BaseHTTPMiddleware类并实现其中的async def dispatch(self, request, call_next)方法可以自定义一个中间件。

BaseHTTPMiddleware的__init__()构造函数通常需要为以下格式:def __init__(self, app, **kwargs),其中app为当前Starlette应用的实例,而后面的**kwargs命名参数则是可以从add_middleware()方法处获取的命名参数。