首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

express redirect获得响应304,但不执行任何操作

基础概念

Express 是一个基于 Node.js 平台的极简、灵活的 web 应用框架。redirect 是 Express 中的一个方法,用于将请求重定向到另一个 URL。HTTP 状态码 304 表示“未修改”,即客户端请求的资源在上次请求后没有发生变化,服务器可以直接返回 304 状态码,而不需要再次传输资源内容。

相关优势

  • 减少带宽消耗:通过返回 304 状态码,服务器可以避免重复传输未修改的资源,从而节省带宽。
  • 提高加载速度:客户端可以直接使用本地缓存的资源,减少加载时间。

类型

  • 永久重定向:使用 res.redirect(301, url),表示资源永久转移到新的 URL。
  • 临时重定向:使用 res.redirect(302, url),表示资源临时转移到新的 URL。
  • 无状态重定向:使用 res.redirect(303, url),表示客户端应使用 GET 方法获取资源。
  • 客户端缓存:使用 res.redirect(304, url),表示资源未修改,客户端可以使用本地缓存。

应用场景

  • 资源更新:当资源更新后,希望用户访问最新的资源时,可以使用重定向。
  • URL 重构:当网站结构发生变化时,可以通过重定向将旧 URL 指向新 URL。
  • 负载均衡:通过重定向将请求分发到不同的服务器上。

问题分析

当使用 Express 的 redirect 方法时,如果获得响应 304,但不执行任何操作,可能是以下原因:

  1. 缓存控制:客户端已经缓存了资源,并且服务器认为资源未修改。
  2. 中间件顺序:重定向中间件的顺序可能不正确,导致重定向逻辑未被执行。
  3. 响应头设置:响应头中的 ETagLast-Modified 设置不正确,导致服务器无法正确判断资源是否修改。

解决方法

  1. 检查缓存控制: 确保客户端没有缓存旧的资源。可以通过设置响应头来控制缓存策略,例如:
  2. 检查缓存控制: 确保客户端没有缓存旧的资源。可以通过设置响应头来控制缓存策略,例如:
  3. 调整中间件顺序: 确保重定向中间件在其他中间件之前执行。例如:
  4. 调整中间件顺序: 确保重定向中间件在其他中间件之前执行。例如:
  5. 正确设置响应头: 确保 ETagLast-Modified 头设置正确,以便服务器能够正确判断资源是否修改。例如:
  6. 正确设置响应头: 确保 ETagLast-Modified 头设置正确,以便服务器能够正确判断资源是否修改。例如:

示例代码

代码语言:txt
复制
const express = require('express');
const app = express();

app.use((req, res, next) => {
    if (req.path === '/old-path') {
        res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate');
        res.setHeader('Pragma', 'no-cache');
        res.setHeader('Expires', '0');
        res.redirect(301, '/new-path');
    } else {
        next();
    }
});

app.get('/new-path', (req, res) => {
    res.send('This is the new path');
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

参考链接

通过以上方法,可以解决 Express redirect 获得响应 304 但不执行任何操作的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Express-Request请求和Response响应

请求对象Request当请求路由的时候会计入路由的处理方法中,这个方法本质是中间件,包括三个参数,即请求对象Request,返回对象Response和执行下一步方法 nextRequest 常用属性Request.url...方法参数参数类型是否必选作用viewString是页面文件,用于渲染的文件路径localsObject否属性定义页面的局部变量callbackfunction否回调函数,返回可能的错误和呈现的字符串,但不执行自动响应...,发生错误是该方法在next(err) 内部调用Response.send() 方法 发送http响应send() 方法 只发送一个https响应至请求端,只接收一个参数,这个参数可以是任何类型之所以可以接收任何类型的参数是因为执行这个方法的时候会自动设置响应头数据类型...更为用途广泛,所有学习怎样返回json 数据也很重要res.json({ name:'iron man', title:'无敌'})Response.json() 方法只接受一个参数,可以是任何的...() 还可以设定 http状态码res.redirect(301,'/ceshi')

26030
  • Node JS 中间件如何工作?

    NodeJS development 什么是 Express 中间件? 中间件在字面上的意思是你在软件的一层和另一层中间放置的任何东西。...Express 中间件是在对 Express 服务器请求的生命周期内所执行的函数。 每个中间件都可以访问其被附加到的所有路由的 HTTP 请求和响应。...当 Web 服务器收到数据请求时,Express 将为你提供一个请求对象,其中包含有关用户及其所请求数据的信息。Express 还使你可以访问响应对象,可以在Web服务器响应用户之前对其进行修改。...收到请求后,与请求相匹配的每个中间件都将会按照初始化的顺序运行,直到有终止操作为止。...你可以用中间件进行日志记录、身份验证等操作。如下所示,以记录用户的最新活动并解析身份验证标头,用它确定当前登录的用户并将其添加到 Request 对象。 该函数在程序每次收到请求时执行

    3.2K30

    NodeJS背后的人:Express

    重定向响应 Express 中,你可以使用 res.redirect("重定向地址") 方法来发送重定向响应 方法会向客户端发送一个 HTTP 重定向状态码(默认是 302 Found)以及一个 Location...头部,告诉客户端去请求另一个 URL //重定向响应 app.get('/resRedirect',(req,res)=>{ //Express 使用 res.redirect() 进行重定向响应...来发送文件下载响应,这个方法指定的文件作为附件发送给客户端,浏览器触发文件下载操作⬇️️ //下载响应 app.get('/resDownload',(req,res)=>{ //Express...}); }) Express 的中间件 Express 的中间件本质是一个回调函数Middleware 主要目的是处理 HTTP 请求,对请求进行预处理、执行一些操作,将请求next 传递——》下一个中间件或路由处理程序...,也具有:requerst、response 参数对象; Express 中间件的主要作用: 处理公共 HTTP 请求和响应执行一些操作,如身份验证、日志记录、数据解析等 ··· 编程web领域很多语言都有中间件的概念可能叫法不同

    11810

    搞懂 HTTP 重定向 - 如何优雅地使用 301

    304 Not Modified 资源未修改,表示本地缓存仍然可用。...这里重点说一下 304304 是 HTTP 缓存中的一个重要内容,表示资源未修改,相当于将资源重定向到本地缓存。 关于 HTTP 缓存的详细内容,可以查看这篇文章:浏览器缓存策略之扫盲篇 2....当然,这一方式只在 JavaScript 的客户端执行环境有效。 上述所介绍的三种重定向方式中,按照优先级顺序如下:HTTP > HTML > JavaScript。...对于危险操作进行重定向:类似编辑删除等危险操作,为了避免用户刷新时重复触发危险操作,我们可以将其重定向到临时的进度展示页,比如使用 303。对于耗时较长的请求也可以这么处理。 4....既然是缓存行为,那么我们就可以通过常规的缓存清理方式来处理,包括但不限于以下几种方式: 控制台禁用缓存 清除历史记录 Network 面板清除缓存 这里大家可以自行尝试以下,如果不行的话,记得多试 1-

    21.1K52

    跟我一起探索 HTTP- 重定向

    HTTP 对此操作有一种特殊类型的响应,称为 HTTP 重定向(HTTP redirect)。 重定向可实现许多目标: 站点维护或停机期间的临时重定向。...原理 在 HTTP 协议中,重定向操作由服务器向请求发送特殊的重定向响应而触发。重定向响应包含以 3 开头的状态码,以及 Location 标头,其保存着重定向的 URL。...鼓励在 Link 标头中加入机器可读的 rel=alternate 304 Not Modified 发送用于重新验证的条件请求。表示缓存的响应仍然是新的并且可以使用。...在这种情况下,会返回一个303(See Other)重定向响应,该响应链接到一个页面,表示请求的操作已经被列入计划,并且最终会通知用户操作的进展情况,或者允许用户将其取消。...mod_alias 模块提供了 RedirectRedirect_Match 两种指令来设置 302 响应(默认值): ServerName example.com

    52350

    《图解HTTP》梳理(二)

    原因短语 1XX Informational(信息性状态码) 接收的请求正在处理 2XX Success(成功状态码) 请求正常处理完毕 3XX Redirection(重定向状态码) 需要进行附加操作以完成请求...304 返回时不包含任何响应的主体部分。304 与重定向无关系。 307 Temporary Redirect:临时重定向。与 302 含义相同。...403 Forbidden:服务器拒绝访问,原因可能是未获得文件系统的访问授权,访问权限出现某些问题等。...500 Internal Server Error:服务器端执行请求时发生错误。 503 Service Unavailable:服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。...(缓存)保存在代理服务器上 透明代理:转发请求或响应时,不对报文做任何加工的代理类型被称为透明代理(Transparent Proxy),反之为非透明代理 网关:转发其他服务器通信数据的服务器。

    59140

    一文牢记HTTP状态码(图解HTTP状态码)

    该状态码代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。另外,也不允许返回任何实体的主体。比如,当从浏览器发出请求处理后,返回204响应,那么浏览器显示的页面不发生更新。...该状态码表示服务端进行了范围请求,而服务器成功执行了这部分的GET请求。响应报文中包含Content-Range制定范围的实体内容。...3XX 重定向 3XX响应结果表明浏览器需要执行某些特殊的处理以正确处理请求。 301 Moved Permanently ? 永久重定向。...304 Not Modified ? 该状态码表示客户端发送附带条件的请求时,服务器允许请求访问资源,但未满足条件的情况。 304状态码返回时,不包含任何响应的主体部分。...304虽然被划分在3XX类别中,但是和重定向没有关系。 307 Temporary Redirect 临时重定向。该状态码与302有着相同的含义。

    11.3K22

    Express4.x API (三):Response (译)

    Express4.x API 译文 系列文章 技术库更迭较快,很难使译文和官方的API保持同步,更何况更多的大神看英文和中文一样的流畅,不会花时间去翻译--,所以我们看到express中文网更多的还是英文...所以我此次翻译的目的,一是熟悉express文档,二是锻炼自己英语阅读能力; 原文地址:express.com Response res对象表示一个Express应用程序在收到HTTP请求时发送的HTTP...(这句话翻译过来我有些不理解,我就不再翻译,res.end用于结束响应) 快速结束响应而无需任何数据,如果你需要对数据进行响应,取而代之的是使用诸如res.send和res.json res.send(...); res.status(404).end(); res.format(object) 在请求对象时,在AcceptHTTP头对象上执行content-negotiation。...Availability maxAge 以毫秒为单位设置max-age缓存控制头或者MS格式的字符串 0 root 相关文件的根目录 lastModified 设置last-modified头设置为操作系统上文件的最后修改日期

    1.6K100

    小结HTTP状态码

    意味着不会有一个异步的响应去表明当前请求的结果,预期另外的进程和服务去处理请求,或者批处理。 204 No Content:服务器成功处理了请求,但不需要返回任何实体内容,并且希望返回更新了的元信息。...205 Reset Content:服务器已经成功处理了请求,但是没有返回任何内容。与204响应不同,返回此状态码的响应要求请求者重置文档视图。...301 Moved Permanently:被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用响应返回的若干个URI之一。...304 响应禁止包含消息体,因此始终以消息头后的第一个空行结尾。请求的时候一般结合If-Modified-Since头部使用。 307 Temporary Redirect:307的意义如上302。...403 Forbidden:服务器已经理解请求,但是拒绝执行它。与401不同,403知道是你登录了,但是还是拒绝了你。 404 Not Found:请求失败,你请求所希望得到的资源未在服务器上发现。

    1.1K20

    面试官问你关于node的那些事(进阶篇)

    ()、res.redirect(),而这几个有什么不同呢?...更多请看文档 express Response ❞ res.end() ❝ 结束response - 如果服务端没有数据回传给客户端则可以直接用res.end返回,以此来结束响应过程 ❞ res.send...❝ 重定义到path所指定的URL,同时也可以重定向时定义好HTTP状态码(默认为302) ❞ res.redirect('http://baidu.com'); res.redirect(301,...如果给定的数字为0,PM2则会根据你CPU核心的数量来生成对应的工作线程 ❝ 拓展:我们可以通过借助cluster模块来实现多进程分页爬虫,Node多进程架构可以充分利用 cpu 资源,我们在一些耗时的操作上...❞ 通过内存快照,可以使用node-heapdump 官方文档获得内存快照进行对比,查找内存溢出 可视化内存泄漏检查工具 Easy-Monitor 官方文档 ?

    2.8K30
    领券