412 Ответ на второй запрос к Github

Я получаю очень странное поведение, используя AFNetworking 2.0 для доступа к Github API. Первый раз, когда я делаю запрос API к этой конечной точке http://developer.github.com/v3/oauth/#get-or-create-an-authorization-for-a-specific-app, чтобы получить токен OAuth. назад с ответом 200 или 201, как и должно быть. Если я выйду из приложения и повторю попытку, запрос вернется с ответом 412, хотя запросы идентичны. Я не смог воспроизвести это с помощью curl. Я буду вставлять запросы и ответы здесь.

Ответ на запрос 1, который проходит

PUT 'https://api.github.com/authorizations/clients/a162f34fd261c382b59d': {
    "Accept-Language" = "en;q=1, fr;q=0.9, de;q=0.8, zh-Hans;q=0.7, zh-Hant;q=0.6, ja;q=0.5";
    Authorization = "Basic ****************************";
    "Content-Type" = "application/json; charset=utf-8";
    "User-Agent" = "Staticly/1.0 (iPad Simulator; iOS 7.0.3; Scale/1.00)";
} {"client_secret":"*****************************","scope":["repo"]}

2014-01-08 10:43:26.313 Staticly[6035:70b] PUT 'https://api.github.com/authorizations/clients/a162f34fd261c382b59d': {
    "Accept-Language" = "en;q=1, fr;q=0.9, de;q=0.8, zh-Hans;q=0.7, zh-Hant;q=0.6, ja;q=0.5";
    Authorization = "Basic **************************";
    "Content-Type" = "application/json; charset=utf-8";
    "User-Agent" = "Staticly/1.0 (iPad Simulator; iOS 7.0.3; Scale/1.00)";
} {"client_secret":"*******************************","scope":["repo"]}
2014-01-08 10:43:26.364 Staticly[6035:70b] 200 'https://api.github.com/authorizations/clients/a162f34fd261c382b59d' [0.0510 s]: {
    "Access-Control-Allow-Credentials" = true;
    "Access-Control-Allow-Origin" = "*";
    "Access-Control-Expose-Headers" = "ETag, Link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval";
    "Cache-Control" = "private, max-age=60, s-maxage=60";
    "Content-Encoding" = gzip;
    "Content-Type" = "application/json; charset=utf-8";
    Date = "Wed, 08 Jan 2014 15:43:24 GMT";
    Etag = "\"257ff8977266fd375142f862e0536b53\"";
    Server = "GitHub.com";
    Status = "200 OK";
    "Transfer-Encoding" = Identity;
    Vary = "Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding";
    "X-Content-Type-Options" = nosniff;
    "X-GitHub-Media-Type" = "github.beta";
    "X-GitHub-Request-Id" = "633B6CDC:6F7C:9F9595F:52CD721C";
    "X-RateLimit-Limit" = 5000;
    "X-RateLimit-Remaining" = 4985;
    "X-RateLimit-Reset" = 1389198563;
} (null)

Запросить ответ 2, который терпит неудачу

PUT 'https://api.github.com/authorizations/clients/a162f34fd261c382b59d': {
    "Accept-Language" = "en;q=1, fr;q=0.9, de;q=0.8, zh-Hans;q=0.7, zh-Hant;q=0.6, ja;q=0.5";
    Authorization = "Basic *********************";
    "Content-Type" = "application/json; charset=utf-8";
    "User-Agent" = "Staticly/1.0 (iPad Simulator; iOS 7.0.3; Scale/1.00)";
} {"client_secret":"************************","scope":["repo"]}

2014-01-08 10:45:39.187 Staticly[6078:70b] PUT 'https://api.github.com/authorizations/clients/a162f34fd261c382b59d': {
    "Accept-Language" = "en;q=1, fr;q=0.9, de;q=0.8, zh-Hans;q=0.7, zh-Hant;q=0.6, ja;q=0.5";
    Authorization = "Basic ***************************";
    "Content-Type" = "application/json; charset=utf-8";
    "User-Agent" = "Staticly/1.0 (iPad Simulator; iOS 7.0.3; Scale/1.00)";
} {"client_secret":"*************************","scope":["repo"]}
2014-01-08 10:45:39.188 Staticly[6078:70b] 412 'https://api.github.com/authorizations/clients/a162f34fd261c382b59d' [0.0018 s]: {
    "Access-Control-Allow-Credentials" = true;
    "Access-Control-Allow-Origin" = "*";
    "Access-Control-Expose-Headers" = "ETag, Link, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval";
    "Cache-Control" = "private, max-age=60, s-maxage=60";
    "Content-Type" = "text/html;charset=utf-8";
    Date = "Wed, 08 Jan 2014 15:45:37 GMT";
    Etag = "\"257ff8977266fd375142f862e0536b53\"";
    Server = "GitHub.com";
    Status = "412 Precondition Failed";
    "Transfer-Encoding" = Identity;
    "X-Content-Type-Options" = nosniff;
    "X-GitHub-Request-Id" = "633B6CDC:6F7A:91EF162:52CD72A1";
    "X-RateLimit-Limit" = 5000;
    "X-RateLimit-Remaining" = 4983;
    "X-RateLimit-Reset" = 1389198563;
} (null)

person bringel    schedule 16.01.2014    source источник


Ответы (1)


Я понял это после изучения исходного кода OctoKit. Github не понравилась политика кэширования, установленная [NSURLSessionConfiguration defaultSessionConfiguration]. Установка политики кэширования на NSURLRequestReloadIgnoringLocalCacheData устранила проблему.

person bringel    schedule 17.01.2014