发布网友
共1个回答
热心网友
这个问题是应用中比较常见的一个问题了。尤其是对于静态文件,
一般而言在nginx中会利用error_page指令对一些错误吗指定错误页。此时,如果请求命中了改规则,就会跳转的响应的页面。比如:
error_page 400 404 500 'http://xxx.error.html';上述的命令会导致302或301跳转。
一般的网站为了节省流量或者提高响应时间都会对静态文件做缓存,如果服务器返回304状态吗则会请求本地缓存的静态文件。一般而言,静态文件都会有一个Expires首部,表明该文件的过期时间。过期之后,才从服务器请求新资源,否则请求的都是本地缓存。
如果请求一个不存在的静态文件,比如/test.css,此时就会导致error_page指令的跳转。但是要注意的是请求静态文件的请求是完整的,因此,其中必然包含Expires首部,这就导致,即使已经存在了test.css文件,由于Expires的关系,还是会度本地的缓存,但是本地缓存有没有该文件,导致请求一致处于302状态。
修改的方案就是,采用命令的location对error_page错误页指定的网页进行rewrite:如下所示:
error_page 400 404 @fb;rewrite为请求的内部跳转(Internal rewrite),并且@fb中并没有设置Expires首部,因此就去掉了原请求中的Expires首部,从而避免前面提到的问题。