正如@spotirca 已经指出的那样,response.writeHead()
没有缓存,但我认为值得扩展这个问题的另一个方面,即pipe()
.
pipe()
这里实际上是一个红鲱鱼,问题是重定向以使用现有的 HTTP 响应还是开始一个新的循环。重要的是要了解这两种解决方案所做的事情非常不同。
301重定向
response.writeHead(301, {"Location": "/login/index.html"});
response.end("");
这以永久重定向响应浏览器,即告诉浏览器当前 URL 应始终重定向到指定的 URL。如果您根据用户的会话状态将用户重定向到登录页面,那么这是绝对错误的,因为浏览器有理由缓存重定向并导致不良行为。
流媒体
require('fs').createReadStream('/login/index.html').pipe(response);
这可行,但意味着登录页面将在当前 URL 上提供。您还可以通过在同一个 URL 上提供不同的内容来打破标准的 HTTP 行为,因此正如@spotirca 指出的那样,这将对缓存产生影响。
我的建议
使用 302(临时)重定向/login/
然后从那里提供内容。
response.writeHead(302, {"Location": "/login/"});
response.end("");
我从不在 URL 上包含文件扩展名,因为它会降低您以后更改内容的能力,但是该方法的这方面意味着您需要有一个请求处理程序侦听该 URL 并提供静态文件。您可以使用pipe()
它并设置合适的缓存标头,但我的建议是使用Express或类似的框架来避免与自定义代码相关的错误。
例如
// A framework will do most of this for you
response.writeHead("Expires","Thu, 01 Dec 2994 16:00:00 GMT");
require('fs').createReadStream('/login/index.html').pipe(response);