Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取Etag并在设置为If None Match标头的后续请求中使用它的最佳方法是什么?_Javascript_Node.js_Etag_If None Match - Fatal编程技术网

Javascript 获取Etag并在设置为If None Match标头的后续请求中使用它的最佳方法是什么?

Javascript 获取Etag并在设置为If None Match标头的后续请求中使用它的最佳方法是什么?,javascript,node.js,etag,if-none-match,Javascript,Node.js,Etag,If None Match,我在这方面看到了很多其他问题,但由于Node.js是一种服务器端语言,“Etag支持”似乎是指nodejs应用程序创建、发送和处理要返回给客户端的代码。在我的情况下,当我将Etag值与匹配时(而不是304),如果没有匹配的头发送回其他请求,以查看资源是否有更改,我将请求但不发送资源,并将所有200个响应保存到我的firebase db,以供移动用户使用和更新 还有,在这种情况下正确的术语是什么。我是客户,我的移动应用程序用户是我的客户,所以他们是客户的客户 我在使用并且想知道是否有比设置一个本地

我在这方面看到了很多其他问题,但由于Node.js是一种服务器端语言,“Etag支持”似乎是指nodejs应用程序创建、发送和处理要返回给客户端的代码。在我的情况下,当我将Etag值与
匹配时(而不是304),如果没有匹配的
头发送回其他请求,以查看资源是否有更改,我将请求但不发送资源,并将所有200个响应保存到我的firebase db,以供移动用户使用和更新

还有,在这种情况下正确的术语是什么。我是客户,我的移动应用程序用户是我的客户,所以他们是客户的客户

我在使用并且想知道是否有比设置一个本地
etag
变量更简单的方法,检查它是否设置了,如果没有,然后使用一组标题一个没有空的
'if-None-Match'
,另一个与之匹配,并在响应抓取时使用它

 function callback(error, response, body) {
        if (!error && response.statusCode == 200) {
          var info = body;
          var etag = headers.etag;
          returnEtag(etag)
然后必须在
returnEtag()
函数中获取并返回它,并在第二组标题中使用它,依此类推

这会变得一团糟,更不用说我必须通过我的整个应用程序来管理每个
etag
,以更简单/更容易的方式处理每个不同的请求。是否有支持开箱即用的模块

文档说明我应该执行以下操作

所有响应都返回HTTP缓存控制头。它的内容指示缓存响应可用于减少不必要的API请求的时间。访问此API的客户端必须考虑此信息

除此之外,每个响应都返回一个HTTP ETag头。它的内容将在对HTTP中相同资源的后续请求中使用(如果没有匹配的头)。如果缓存的信息仍然有效,则API将返回状态代码304 Not Modified。访问此API的客户端必须使用此 技术,也称为条件GET


我使用自己的服务器访问此API,然后将数据保存到firebase,我的用户可以通过移动应用程序访问该firebase(将此其他公司API中的应用程序我的密钥远离移动应用程序用户)。

客户端不发送ETag。这些是从服务器到客户端的标记。和“如果没有匹配”一样,所以我对你想做什么感到困惑。我不知道,如果服务器从客户端接收ETag,它会对ETag执行任何操作。我甚至不确定这是否有意义。@Rob也许我误解了什么,所以我通过在底部添加更多信息更新了问题。客户端向服务器发出请求。该服务器向客户端返回一个响应,其中包括一个缓存控制头和一个ETag。然后,客户端可以根据缓存控制头和ETag确定是否需要从网络或缓存中获取该内容。服务器既不会向客户端发出请求,也不会获取这些头,所以听起来好像您获取的这些名称与来自谁的请求混淆了,我试图尽可能清楚地回答这个问题,但正如我在重新构造的问题中所述,如果我从API获取数据并将其转发给我的用户,那么我是客户吗?我的移动应用程序用户是我的客户吗?那么他们是客户的客户吗?感谢您花时间提供帮助。从概念上讲,该应用程序是双重角色或ia代理。在双重角色中,it服务器连接到您的移动客户端,它处理数据,并且是远程服务器API的客户端。如果您的web应用程序只是作为移动设备和远程API之间的代理,那么在这种情况下,可以说移动客户端有一个直接的客户端/服务器与远程API,因为代理在客户端/服务器关系中被认为是“透明的”。客户机-服务器关系经常遍历多个路由器、集线器、网关和代理,但我们不考虑客户机-客户端-客户端-服务器的整体关系。