etag

常用标准请求头字段

一笑奈何 提交于 2019-12-12 08:46:26
给服务器发请求的时候有请求头,接受服务器响应的时候有响应头,客户端和服务器端互相沟通需要的信息都是通过这些“头”来传送,这些信息是一些类似key:value的键值对。了解这些“头”中字段的含义对于理解整个请求过程有很大的帮助。这里列举了常用的“头”字段的解释以及例子,本文可以作为工具文收藏,以备需要时查看。 常用标准请求头字段 Accept 设置接受的内容类型 Accept: text/plain Accept-Charset 设置接受的字符编码 Accept-Charset: utf-8 Accept-Encoding 设置接受的编码格式 Accept-Encoding: gzip, deflate Accept-Datetime 设置接受的版本时间 Accept-Datetime: Thu, 31 May 2007 20:35:00 GMT Accept-Language 设置接受的语言 Accept-Language: en-US Authorization 设置HTTP身份验证的凭证 Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== Cache-Control 设置请求响应链上所有的缓存机制必须遵守的指令 Cache-Control: no-cache Connection 设置当前连接和hop-by

.net大文件分块上传断点续传demo

孤街浪徒 提交于 2019-12-12 04:11:16
IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头。 一. 两个必要响应头Accept-Ranges、ETag 客户端每次提交下载请求时,服务端都要添加这两个响应头,以保证客户端和服务端将此下载识别为可以断点续传的下载: Accept-Ranges:告知下载客户端这是一个可以恢复续传的下载,存放本次下载的开始字节位置、文件的字节大小; ETag:保存文件的唯一标识(我在用的文件名+文件最后修改时间,以便续传请求时对文件进行验证); Last-Modified:可选响应头,存放服务端文件的最后修改时间,用于验证 二. 一个重要请求头Range Range:首次下载时,Range头为null,此时服务端的响应头中必须添加响应头Accept-Ranges、ETag; 续传请求时,其值表示客户端已经收到的字节数,即本次下载的开始字节位置,服务端依据这个 值从相应位置读取数据发送到客户端。 三. 用于验证的请求头If-Range、 当响应头中包含有Accept-Ranges、ETag时,续传请求时,将包含这些请求头: If-Range:对应响应头ETag的值; Unless-Modified-Since:对应响应头Last-Modified的值。 续传请求时,为了保证客户端与服务端的文件的一致性和正确性,有必要对文件进行验证

强缓存和协商缓存

左心房为你撑大大i 提交于 2019-12-12 00:35:33
请求的流程 对于一次已经有缓存存在的请求来说(即之前已经发过针对这个资源的请求,在本地已经有缓存),如果发起请求,那么 首先会去找到缓存资源的响应头中的expires(过期时间)和cache-control(控制缓存的失效性)来判断当前是否直接使用缓存,如果当前时间还在expires之前,即缓存仍未失效的情况下,我们就直接使用缓存,这就是强缓存。 如果缓存已经失效,那么此时我们需要向后台发送请求,此时发送的请求并非直接就会从服务器获取资源内容,而是在请求头中,加入IF-Modified-Since(在其值后,资源是否更新)或者 IF-None-Match(比较Etag的值,相同则返回304,客户端从缓存中读取内容,否则返回200资源),这两个字段对应的值分别为第一次请求时返回的Last-Modified(上一次修改的时间)和Etag(资源的唯一标识),如果判断后资源尚未更新,就继续访问缓存资源,不会返回新的资源内容,如果已经更新,则会返回资源的实际内容,并更新header中相关的缓存字段,这就是协商缓存。 强缓存 强缓存是根据返回头中的 Expires 或者 Cache-Control 两个字段来控制的,都是表示资源的缓存有效时间。 Expires 是 http 1.0 的规范,值是一个GMT 格式的时间点字符串,比如 Expires:Mon,18 Oct 2066 23:59

How is etag used on Youtube API- swift

醉酒当歌 提交于 2019-12-11 23:35:03
问题 I've been trying to use the etag on the youtube api in my Swift app to find a playlist, but I was under the impression that I had to include it as a parameter. There is however no parameter for this. I also tried to cache the etag and compare it to the new one received from a different answer, but it always changes regardless of whether or not the playlist itself changed. Can somebody steer me in the right direction? Thanks! 回答1: To extend the functionality of Google Tag Manager, you can add

ETag vs webpack's hash

时光总嘲笑我的痴心妄想 提交于 2019-12-11 15:44:02
问题 we're reworking our whole assets building process to use 100% webpack. In the course of this I'd like to use its hash feature (e.g. [name].[chunkhash].js) to improve caching. But my backend colleagues say no need and we should use ETags instead for the caching. So no hash at all in the filenames. I like the idea but I'm wondering why do the bundler offer this hash feature if ETags can be used instead. Does anyone have experience with ETags and knows the pro/cons? (we're using a custom PHP

Setting ETAG/LastModified on Representation sent by ServerResource

寵の児 提交于 2019-12-11 10:45:52
问题 I know I can set the ETAG and LastModified properties on Representation/Repre​sentationInfo. But I have a simple resource implemented like this : public class AccountServerResource extends ServerResource implements AccountResource { private static Logger log = Logger.getLogger(Acc​ountServerResource.c​lass.getName()); @Override public Account retrieve() { User user = getClientInfo().getUser(); AccountDAO dao = new AccountDAO(); Account ret = dao.getAccountByEmai​l(user.getEm​ail()); log.info(

你知道 http 响应头中的 ETag 是如何生成的吗

我与影子孤独终老i 提交于 2019-12-11 10:21:08
关于 etag 的生成需要满足几个条件 当文件不会更改时, etag 值保持不变。所以不能单纯使用 inode 便于计算,不会特别耗 CPU。这样子 hash 不是特别合适 便于横向扩展,多个 node 上生成的 etag 值一致。这样子 inode 就排除了 关于服务器中 etag 如何生成可以参考 HTTP: Generating ETag Header 那么在 nginx 中的 etag 是如何生成的? nginx 中 ETag 的生成 我在网上找到一些资料与源代码了解到了 etag 的计算方法。由 python 伪代码表示计算方法如下 etag = '{:x}-{:x}'.format(header.last_modified, header.content_lenth) 源码: ngx_http_core_modules.c etag->value.len = ngx_sprintf(etag->value.data, "\"%xT-%xO\"", r->headers_out.last_modified_time, r->headers_out.content_length_n) - etag->value.data; 总结: nginx 中 etag 由响应头的 Last-Modified 与 Content-Length 表示为十六进制组合而成。

Does the youtube api v3/search support etags?

故事扮演 提交于 2019-12-11 09:56:40
问题 I'm trying to use etags in order to reduce both my bandwidth and my quota usage but /search returns an new etag even when nothing changed. It also still sends the content if I specify the previous etag in the header. Is it supported for that api call or am I probably doing something wrong? 回答1: Etags are supported by youtube but it depends on what kind of data you are asking ETags, a standard part of the HTTP protocol, allow applications to refer to a specific version of a particular API

How do I extract ETAG from a WCF Dataservices response?

◇◆丶佛笑我妖孽 提交于 2019-12-11 07:58:16
问题 I've been trying to get an answer to this question for quite some time. Since the WCF Dataservice isn't thread safe, and often it needs to be recreated, once I query my datastore for a record, how do I extract the ETAG from that response so I can use it when I reconstruct my datacontext? 回答1: That depends on which language/library you're using on the client and which format you're using on the wire (ATOM vs JSON). The ETag is stored in the payload and in case of a single entity payload also

angularjs, $http 304 error, modify data property

不羁的心 提交于 2019-12-11 03:24:57
问题 we are using the Ionic framework and AngularJS to create a mobile app with phone gap build. We have a call to our api to get an array of items using $http.get, we are adding an Etag in the header if we already have data in cache. If the data on the server has not changed we get a 304 error which is ok. We are having trouble modifying the data property on the response object form the server to our chached data in local storage. Any help is appreciated. Thanks return $http({ method: 'GET', url: