NSURLCache: противоречивое поведение

Я наблюдал какое-то странное поведение моего приложения, иногда кешируя ответы, а иногда и не кешируя их (все ответы имеют Cache-Control: max-age = 600).

Тест прост: я создал скрипт test.php, который просто устанавливал заголовки и возвращал простой JSON:


{
    "result": {
        "employeeId": "",
                "dateTime": "'" }
}

Это ответ, который я получаю со страницы PHP:

HTTP/1.1 200 OK
Date: Thu, 28 Nov 2013 11:41:55 GMT
Server: Apache
X-Powered-By: PHP/5.3.17
Cache-Control: max-age=600
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json

{
    "result": {
        "employeeId": "",
        "dateTime": "2013-11-28 11:41:55'" 
    }
}

Затем я'Мы создали простое приложение и добавили библиотеку AFNetworking.

Когда я вызываю скрипт с несколькими параметрами, кеш работает правильно:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

NSDictionary *params = @{ 
                         @"oId": @"4011",
                         @"eId": self.firstTest ? @"1" : @"0",
                         @"status": @"2031",
                         };
[manager GET:@"http://www.mydomain.co.uk/test.php" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"JSON: %@", responseObject);

    NSLog(@"Cache current memory usage (after call): %d", [cache currentMemoryUsage]);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];

Но когда я увеличиваю количество параметров, вроде:

NSDictionary *params = @{
                         @"organizationId": @"4011",
                         @"organizationId2": @"4012",
                         @"organizationId3": @"4013",
                         @"organizationId4": @"4014",
                         @"organizationId5": @"4015",
                         @"organizationId6": @"4016",
                         @"eId": self.firstTest ? @"1" : @"0",
                         @"status": @"2031",
                         };

это небольше не работает и выполняет новый запрос каждый раз, когда он вызывается.

Мы сделали много тестов, и мне кажется, что это связано с длиной URL, потому что, если я включу этот набор параметров:

NSDictionary *params = @{
                         @"oId": @"4011",
                         @"oId2": @"4012",
                         @"oId3": @"4013",
                         @"oId4": @"4014",
                         @"oId5": @"4015",
                         @"oId6": @"4016",
                         @"eId": self.firstTest ? @"1" : @"0",
                         @"status": @"2031",
                         };

Это работает !!

мы сделали много тестов, и этоединственный образец, который ямы нашли ...

Чтобы исключить AFNetworking из уравнения, я 'мы создали другую тестовую программу, которая использует только NSURLConnection, и я вижу то же поведение, так чтоЭто не AFNetworking и, безусловно, NSURLCache. Это другой тест: я

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.mydomain.co.uk/test.php?eId=%@&organizationId=4011&organizationId2=4012&organizationId3=4013&organizationId4=4014&organizationId5=4015&organizationId6=4016", self.firstTest ? @"1" : @"0"]];  // doesn't work
//NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.mydomain.co.uk/test.php?eId=%@&oId=4011&oId2=4012&oId3=4013&oId4=4014&oId5=4015&oId6=4016", self.firstTest ? @"1" : @"0"]];  // work
//NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://www.mydomain.co.uk/test.php?eId=%@", self.firstTest ? @"1" : @"0"]];  // work

NSURLRequest *request = [NSURLRequest requestWithURL:url];
NSURLResponse *response = nil;
NSError *error = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:request
                                     returningResponse:&response
                                                 error:&error];

if (error == nil) {
    // Parse data here
    NSString *responseDataStr = [NSString stringWithUTF8String:[data bytes]];
    NSLog(@"Response data: %@", responseDataStr);
}

Мы также пытались установить, сколько символов в URL вызовет проблему, но даже в этом случае ямы получили странные результаты:

Это один из 112 символов, и это нет работа:

http://www.mydomain.co.uk/test.php?eId=1&organizationId = 4011 &organizationId2 = 4012 &organizationId3 = 4013 &orgaId4 = 4

Длина этой строки составляет 111 символов, и она работает:

http://www.mydomain.co.uk/test.php?eId=1&organizationId = 4011 &organizationId2 = 4012 &organizationId3 = 4013 &orgId4 = 4

Я переименовал скрипт PHP, чтобы посмотреть, будет ли иметь значение первая часть URL, и яу меня опять странное поведение:

Это 106 символов в длину, и это нет работа:

http://www.mydomain.co.uk/t.php?eId=1&organizationId = 4011 &organizationId2 = 4012 &organizationId3 = 4013 &орг = 40

Это длина 105 символов, и это работает:

http://www.mydomain.co.uk/t.php?eId=1&organizationId = 4011 &organizationId2 = 4012 &organizationId3 = 4013 &орг = 4

Так что я'Вы удалили 3 символа из названия страницы и яу нас рабочий порог на 6 символов ниже.

Любое предложение?

Спасибо, дем

Ответы на вопрос(3)

Ваш ответ на вопрос