请求转发和重定向
1 | // 请求转发 |
Servlet封装响应并返回给请求的客户端,该响应由ServletResponse类型的response对象表示,在HTTP请求场景下,容器提供的响应对象的具体类型为HttpServletResponse
HTTP的响应消息分为三部分:状态行、响应头、响应正文。
状态行对应的方法是
1 | public void setStatus(int sc); |
响应头对应的方法为
1 | public void addHeader(String name, String value); |
响应正文对应的方法为
1 | public ServletOutputStream getOutputStream() throws IOException; |
通过gzip相关指令可以配置Gzip压缩,对响应数据进行在线实时压缩。
相关配置参数说明:
gzip: on; # 开启或关闭gzip功能,默认为off
gzip_buffers: 16 8K; # 配置Gzip压缩文件时使用的缓存空间大小,语法结构为gzip_buffers number size;
number表示需要向系统申请的缓存空间的个数;size表示指定每个缓存空间的大小,默认number*size=128K
gzip_comp_level: 9; # 压缩级别,压缩程度越高,压缩效率最低,最费时间
gzip_min_length:# 配置最小压缩的数据大小,如果响应页面的大小大于该值,才开启Gzip功能(一些小文件会导致压缩后的大小比原文件还大),默认为20,建议设置为1k(1024)
gzip_http_version:1.0; # 配置只有高于指定版本的HTTP协议才能开启Gzip,默认为1.1,目前绝大多数浏览器都支持Gzip自解压,一般采用默认值即可
gzip_proxied:any; # 设置是否对被代理服务器返回的数据进行压缩,前提是后端服务器返回的响应头中包含有Via头,默认为off,可选值包含有
off 关闭nginx对后端服务器返回结果进行Gzip压缩
expired 当后端服务器响应头中包含有expired头时,对数据进行Gzip压缩
no-cache 当后端服务器响应头中包含有Cache-Control且值为no-cache时,对数据进行Gzip压缩
no-store 当后端服务器响应头中包含有Cache-Control且值为no-store时,对数据进行Gzip压缩
private 当后端服务器响应头中包含有Cache-Control且值为private时,对数据进行Gzip压缩
no_last_modified 当后端服务器响应头中不包含有Last-Modified时,对数据进行Gzip压缩
no_etag 当后端服务器响应头中不包含有ETag时,对数据进行Gzip压缩
auth 当后端服务器响应头中包含有标识HTTP授权Authorization时,对数据进行Gzip压缩
any 无条件对数据进行压缩
gzip_vary: on; # 开启压缩标记,开启后在响应头部添加 Vary: Accept-Encoding,默认为off,
gzip_types: 默认为text/html, 可以 text/plain application/x-javascript text/css application/xml text/javascript; # 对指定类型的文档进行Gzip压缩
gzip_static:on; # 对于存在服务器上.gz作为后缀的文件,且客户端浏览器支持gzip压缩,就直接返回压缩后的数据,可选值
on 开启
off 关闭
always 一直发送.gz文件,而不检查客户端浏览器是否支持Gzip压缩
介绍JWT之前先说一下为什么需要JWT?
由于HTTP是无状态协议,而服务端其实需要知道部分的客户端信息来识别身份,所以之前我们在javaweb中经常使用session和cookie来进行会话管理,从而找到用户信息。但是cookie和session的方式存在一些问题
服务端保存大量数据,增加了服务端的压力
服务端保存用户状态,不支持集群化部署
当然使用redis存储session解决了这些问题。
但是Restful风格的接口其实有个规范就是服务的无状态性。
既然要使用无状态,那么如何才能实现无状态呢?说一下简单地流程
而JWT就是一种JSON风格的轻量级的授权和身份认证规范,可实现无状态、分布式的Web应用授权
JWT由三部分组成