@@ -282,6 +282,18 @@ - (NSString *)responseHeaderForKey:(NSString *)aKey
282
282
return header;
283
283
}
284
284
285
+ - (NSString *)getSonicHeaderETagWithHeaders : (NSDictionary *)headers
286
+ {
287
+ NSString *keyETag = [headers objectForKey: [SonicHeaderKeyCustomeETag lowercaseString ]];
288
+ if (keyETag && [keyETag isKindOfClass: [NSString class ]] && keyETag.length > 0 ) {
289
+ // do nothing
290
+ } else {
291
+ keyETag = [SonicHeaderKeyETag lowercaseString ];
292
+ }
293
+
294
+ return [headers objectForKey: keyETag];
295
+ }
296
+
285
297
- (NSDictionary *)sonicItemForCache
286
298
{
287
299
if (self.isCompletion ) {
@@ -294,7 +306,7 @@ - (NSDictionary *)sonicItemForCache
294
306
self.data = splitResult[kSonicDataFieldName ];
295
307
296
308
NSMutableDictionary *headers = [[_response.allHeaderFields mutableCopy ]autorelease];
297
- NSString *responseEtag = [headers objectForKey: [SonicHeaderKeyETag lowercaseString ] ];
309
+ NSString *responseEtag = [self getSonicHeaderETagWithHeaders: headers ];
298
310
if (!responseEtag) {
299
311
responseEtag = getDataSha1 ([self .htmlString dataUsingEncoding: NSUTF8StringEncoding]);
300
312
[headers setObject: responseEtag forKey: [SonicHeaderKeyETag lowercaseString ]];
@@ -336,7 +348,7 @@ - (BOOL)isValidateSonicResponse:(NSHTTPURLResponse *)response
336
348
return NO ;
337
349
}
338
350
339
- if ([response.allHeaderFields[SonicHeaderKeyETag ] length ] == 0 ) {
351
+ if ([[ self getSonicHeaderETagWithHeaders: response.allHeaderFields] length ] == 0 ) {
340
352
return NO ;
341
353
}
342
354
@@ -381,7 +393,7 @@ - (void)connection:(SonicConnection *)connection didReceiveResponse:(NSHTTPURLRe
381
393
}
382
394
383
395
// fix Weak-Etag case like -> etag: W/"66f0-m2UmCBEh78dNYPv+boO5ETXk4FU".[https://github.com/Tencent/VasSonic/issues/128]
384
- NSString *eTag = [headers objectForKey: [SonicHeaderKeyETag lowercaseString ] ];
396
+ NSString *eTag = [self getSonicHeaderETagWithHeaders: headers ];
385
397
if ([eTag hasPrefix: @" W/" ] && eTag.length > 3 ) {
386
398
// fix Weak-Etag get value length error
387
399
NSString *eTagValue = [eTag substringFromIndex: 2 ];
@@ -463,7 +475,7 @@ - (void)connectionDidCompleteWithoutError:(SonicConnection *)connection
463
475
[headers setValue: @" true" forKey: [SonicHeaderKeyCacheOffline lowercaseString ]];
464
476
}
465
477
NSString *htmlSha1 = nil ;
466
- NSString *responseEtag = [headers objectForKey: [SonicHeaderKeyETag lowercaseString ] ];
478
+ NSString *responseEtag = [self getSonicHeaderETagWithHeaders: headers ];
467
479
if (!responseEtag) {
468
480
responseEtag = htmlSha1 = getDataSha1 ([self .htmlString dataUsingEncoding: NSUTF8StringEncoding]);
469
481
[headers setObject: responseEtag forKey: [SonicHeaderKeyETag lowercaseString ]];
0 commit comments