Tag: etag

如何使用Express.js返回304未修改的状态?

我正在使用节点,并表示iOS应用程序的后端。 数据存储在SQL Server数据库中,所以iOS应用程序查询服务器,服务器查询数据库,服务器接收数据库响应,然后将响应转发给iOS应用程序。 我试图找出caching如何工作。 我提供了大量的静态内容 – 例如博客文章。 所以我打算使用etags,但我不确定它应该如何工作。 我提出请求,获取内容,并在客户端caching响应。 好。 然后,我在之后的“If-None-Match”标题中存储上一个响应的etag。 那又怎样? Express.js是否自动处理? 它似乎并没有 – 我不能得到它产生一个304响应。 如果我在发送响应之前尝试检查响应头,则会得到空值,所以在发送响应之前我无法获取响应的etag。 那么,我该如何将请求etag与服务器发送的内容的etag进行比较呢? 我应该使用自定义生成的etags并将其caching在服务器上,然后将请求etags与此caching进行比较? 下面是我设置的一个非常简单的路线来testing这个,没有涉及到数据库。 我只是发送一个号码到服务器,并返回广场。 如果我发送一个etag请求到相同的url,我会得到相同的回应。 我可以检查请求的“If-None-Match”标题,但是为了确定是否应该发送304而不是200状态,我该如何比较呢? router.use("/square/:testId", function(req, res) { var obj = {}; obj["testId"] = req.params.testId; obj["result"] = req.params.testId * req.params.testId; res.setHeader('Cache-Control', 'public, max-age=5'); var h2 = JSON.stringify(res.headers,null,2); console.log("The response headers: " + h2); //Prints null res.status(200).send(obj); […]

Express eTag总是在变化

通过Node Express,我可以像API一样rest。 ETag是默认的,没有明确地打开或closures。 然而每当我testing打到服务器,它总是给我一个新的ETag,即使返回的JSON / HTML是完全一样的。 我也检查了返回的标题,他们看起来一样。 我testing了两种types的内容,一个API和一个静态HTML内容,如隐私页面。 任何想法如何检查是什么使它每次都有所不同?

快速删除Etag标题

我已经search了很多,但仍然找不到解决scheme,我使用nodejs默认情况下设置etag为true,我尝试了所有我在网上find的解决scheme,它仍然是设置,例如: res.set('etag', false); res.removeHeader('ETag'); app.disable('etag'); app.use(express.static(__dirname + '/public'), { etag: false }); 而且它仍然被设置,所以,我在这里失去了一些东西,因为我在节点或者expression方面并不是那么有经验。 我的问题显然是,如何禁用这个头,因为,我有一个页面有很多图像(A LOT),所有这些都是静态的, etag引起了很多阻塞,因为它发送请求来检查有效性,并防止浏览器依靠cache-control ,这是非常大的页面加载时间。 谢谢您的帮助

如果“无匹配”有效,则不进行修改

我正在优化Express JSON API供iOS和Android应用程序使用,当应用程序在If-None-Match标头中指定etag时,似乎无法使Express正确响应304标头。 我不需要设置Etag代,因为Express已经提供了这些代码; 但是当应用程序在第二个请求中再次指定etag时, 快递的回应仍然是200的数据,你可以看到我的邮递员testing: 我怎样才能启用这个function? 更新: iOS开发人员正在从Express服务器上看到正确的304 Not Modified响应,但我不明白为什么我在Postman中看不到它们 – Postman是否支持这种操作?

我应该使用什么编码来正确生成nodeJS中encryption的ETag?

在我的nodeJS应用程序中,我想为所有返回给客户端的内容生成ETags。 我需要ETag基于文件的实际内容而不是date,以便跨不同节点进程的同一文件具有相同的ETag。 现在我正在做以下工作: var fs = require('fs'), crypto = require('crypto'); fs.readFile(pathToFile, function(err, buf){ var eTag = crypto.createHash('md5').update(buf).digest('hex'); res.writeHead(200, {'ETag': '"' + eTag + '"','Content-Type':contentType}); res.end(buf); }); 我不知道我应该使用不同的encryption函数来编写适当的系统。 我应该使用非hex东西吗? 我应该得到fs.readFile调用返回一个hex编码的缓冲区? 如果是的话,会不会影响回报给用户的内容? 最好的和谢谢, 萨米

执行HEAD请求时,curl不会返回

我正在节点服务器上创build资源并将ETag附加到它们中的每一个上。 我正在使用在这个问题中find的方法我应该使用什么编码来正确地生成nodeJSencryption的ETag? 用于生成ETags。 但是,当我使用curl在命令行上执行HEAD请求时,如: $ curl -i -u username:password -X HEAD http://localhost:3000/aResource/0 答案是 HTTP/1.1 200 OK X-Powered-By: Express ETag: "1a37c148692f92ad6c97887f77c873e6" Content-Type: text/plain Date: Sat, 26 Oct 2013 01:06:28 GMT Connection: keep-alive ^C $ 我必须特别按下Control-C才能再次看到命令提示符。 另一方面,我觉得这很奇怪,因为我处理HEAD请求的方式是通过app.head节点和身份validation后,我正在调用该函数: function serveResourceEtag(req, res) { console.log("Following route through HEAD"); var anID = parseInt(req.params[resourceID], "utf8"); if (anID < serverData.resourceEtags.length) { res.writeHead (200, […]