This commit is contained in:
DDIsFriend
2023-08-23 09:24:40 +08:00
parent 6bd037c5dd
commit 63ca919ed5
494 changed files with 35308 additions and 6623 deletions

View File

@@ -0,0 +1,85 @@
//
// Example
// man
//
// Created by man 11/11/2018.
// Copyright © 2020 man. All rights reserved.
//
#import "_CacheStoragePolicy.h"
extern NSURLCacheStoragePolicy CacheStoragePolicyForRequestAndResponse(NSURLRequest * request, NSHTTPURLResponse * response)
// See comment in header.
{
BOOL cacheable;
NSURLCacheStoragePolicy result;
//assert(request != NULL);
//assert(response != NULL);
// First determine if the request is cacheable based on its status code.
switch ([response statusCode]) {
case 200:
case 203:
case 206:
case 301:
case 304:
case 404:
case 410: {
cacheable = YES;
} break;
default: {
cacheable = NO;
} break;
}
// If the response might be cacheable, look at the "Cache-Control" header in
// the response.
// IMPORTANT: We can't rely on -rangeOfString: returning valid results if the target
// string is nil, so we have to explicitly test for nil in the following two cases.
if (cacheable) {
NSString * responseHeader;
responseHeader = [[response allHeaderFields][@"Cache-Control"] lowercaseString];
if ( (responseHeader != nil) && [responseHeader rangeOfString:@"no-store"].location != NSNotFound) {
cacheable = NO;
}
}
// If we still think it might be cacheable, look at the "Cache-Control" header in
// the request.
if (cacheable) {
NSString * requestHeader;
requestHeader = [[request allHTTPHeaderFields][@"Cache-Control"] lowercaseString];
if ( (requestHeader != nil)
&& ([requestHeader rangeOfString:@"no-store"].location != NSNotFound)
&& ([requestHeader rangeOfString:@"no-cache"].location != NSNotFound) ) {
cacheable = NO;
}
}
// Use the cacheable flag to determine the result.
if (cacheable) {
// This code only caches HTTPS data in memory. This is inline with earlier versions of
// iOS. Modern versions of iOS use file protection to protect the cache, and thus are
// happy to cache HTTPS on disk. I've not made the correspondencing change because
// it's nice to see all three cache policies in action.
if ([[[[request URL] scheme] lowercaseString] isEqual:@"https"]) {
result = NSURLCacheStorageAllowedInMemoryOnly;
} else {
result = NSURLCacheStorageAllowed;
}
} else {
result = NSURLCacheStorageNotAllowed;
}
return result;
}