Github 304 ответы, кажется, рассчитывают против ограничения скорости - PullRequest
0 голосов
/ 27 марта 2020

У меня проблема с запросами подсчета github api, которые выдают ответ 304 против ограничения скорости

GET /repos/******/***/contents/***?ref=master HTTP/1.1
Host: api.github.com
Connection: keep-alive
Cache-Control: max-age=0
Sec-Fetch-Dest: empty
If-None-Match: W/"b15846765021dc2483e5f3110b53a69f210ececa"
If-Modified-Since: Thu, 19 Mar 2020 01:33:51 GMT
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36
Accept: */*
Origin: *******
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: cors
Referer: ******
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9

этот запрос вернется с 304 и без тела, но X-Ratelimit- Оставшиеся отклонения.

Условные запросы Github

Примечание. Выполнение условного запроса и получение ответа 304 не засчитываются в ваш предел скорости, поэтому мы рекомендуем вам использовать его всегда, когда это возможно.

Я устанавливаю только заголовки If-None-Match и If-Modified-Since, остальные задаются браузером (используя fetch api)

Запрос

Это можно скопировать только с помощью браузера, перейдя на https://api.github.com/repos/angular/angular/contents/?ref=master и убедившись, что отключено кэширование в консоли разработчика

Ответы

При первом вызове

If-None-Match и If-Modified-Since не установлены

HTTP/1.1 200 OK
date: Wed, 01 Apr 2020 12:43:09 GMT
content-type: application/json; charset=utf-8
server: GitHub.com
status: 200 OK
cache-control: public, max-age=60, s-maxage=60
vary: Accept, Accept-Encoding, Accept, X-Requested-With
etag: W/"b15846765021dc2483e5f3110b53a69f210ececa"
last-modified: Thu, 19 Mar 2020 01:33:51 GMT
x-github-media-type: github.v3; format=json
access-control-expose-headers: ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset
access-control-allow-origin: *
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 1; mode=block
referrer-policy: origin-when-cross-origin, strict-origin-when-cross-origin
content-security-policy: default-src 'none'
content-encoding: gzip
X-Ratelimit-Limit: 60
X-Ratelimit-Remaining: 59
X-Ratelimit-Reset: 1585748589
Accept-Ranges: bytes
Content-Length: 1696
X-GitHub-Request-Id: B298:74D9:10D7B8:177665:5E848C5D

с последующими запрошенными данными

Последующие вызовы:

If-None-Match и If-Modified-Since установлены в etag и last-modified заголовок из предыдущего запроса st

HTTP/1.1 304 Not Modified
date: Wed, 01 Apr 2020 12:44:51 GMT
content-type: application/json; charset=utf-8
server: GitHub.com
status: 200 OK
cache-control: public, max-age=60, s-maxage=60
vary: Accept, Accept-Encoding, Accept, X-Requested-With
etag: W/"b15846765021dc2483e5f3110b53a69f210ececa"
last-modified: Thu, 19 Mar 2020 01:33:51 GMT
x-github-media-type: github.v3; format=json
access-control-expose-headers: ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset
access-control-allow-origin: *
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 1; mode=block
referrer-policy: origin-when-cross-origin, strict-origin-when-cross-origin
content-security-policy: default-src 'none'
content-encoding: gzip
X-Ratelimit-Limit: 60
X-Ratelimit-Remaining: 58
X-Ratelimit-Reset: 1585748589
X-GitHub-Request-Id: FC10:2036:26E528:346432:5E848CC3

данные не возвращаются. Согласно документации X-Ratelimit-Remaining должен был остаться на 59

Что-то не так с моим запросом или есть ошибка с ограничением скорости на конце githubs?

1 Ответ

0 голосов
/ 01 апреля 2020

В соответствии с документацией X-Ratelimit-Remaining должно было остаться на 59

. Здесь 59 предполагает, что вы выполняете неаутентифицированные запросы, которые могут быть ключевыми здесь. Интересно, связано ли это с ограничениями скорости для неаутентифицированных запросов, которые не измеряются так же, как аутентифицированные запросы, и эту ситуацию нельзя считать «условным» запросом.

Этот случай явно не задокументирован, но GitHub настоятельно рекомендует использовать аутентифицированные запросы, так как эти ограничения скорости отслеживаются для каждого аккаунта, а не для IP-адреса.

...