2015-01-21 2 views
1

Github API указывает два заголовка, которые могут использоваться в условных запросах, Last-Modified и ETag. Что является более надежным при запросе API?Что более надежно для условных запросов API Github, ETag или Last-Modified?

В контексте: при использовании API-интерфейсе конечной точки GET /repos/:owner/:repo/git/trees/:sha на каждый подкаталоге большого репо, каждый ответ содержит такое же значение last-modified (даже если репо на GitHub показывает различные даты), автор в то время как значение etag для каждого отличается. Мне интересно, является ли ETag более подробным представлением состояния состояния репо (для целей кэширования).

ответ

2

Чтение "ETags: a pretty sweet feature of HTTP 1.1", он говорит:

"ETags allow dynamic content to be cached using an app-specific "opaque token""

ETag или метка объекта, непрозрачный маркер, который идентифицирует версию компонента, обслуживаемой конкретным URL. Маркер может быть любым заключенным в кавычки; часто это хеш-файл md5 или номер версии VCS для контента.

Если контент ответа тот же, ETag должен быть идентичным каждый раз.

Я только что проверил его с https://api.github.com/repos/VonC/gopanic/git/trees/master, и действительно его ETag остается W/"34a03ea1d4dc0b5d533ecf8d36492879" даже при вызове повторно.

Но должен ли я получить дерево для каждой подпапки, тогда ETag будет отличаться, поскольку он представляет собой подпись различного содержимого ответа.

Преимущество ETag заключается в том, что он не зависит от даты (часы могут отличаться по разным причинам), но по содержанию ответа: если он не изменился, это означает, что отправленный контент по-прежнему совпадает с один отправлен раньше.

+0

Спасибо - кажется, что заголовок 'ETag' показывает правильное изменение состояния, а заголовок' Last-Modified' - относительно всего репо (при использовании github api). – unboundev

+0

Я думал, что есть ошибка, потому что я получал 304 каждый раз, когда получаю ссылку, даже когда появились новые коммиты. Обновление для использования etag вместо последнего модифицированного исправлено проблема – Abby

+0

В случае использования 'ETag' в сочетании с заголовком' Authorization', отправляющим токен, запрос с одним токеном будет отвечать 304 каждый раз, если документ не будет но если вы отправите тот же ETag, но используя другой токен, конечная точка ответит 200, не имеет значения, изменился ли документ или нет. Итак, есть ли способ узнать, изменился ли документ, но без передачи в токен, отправленный? Принимая во внимание, что заголовок «Last-Modified» недоступен (отсутствует в заголовке ответа) для всех конечных точек github api. – p1nox

Смежные вопросы