if-modified-since по сравнению с if-none-match

Иногда вам действительно нужно использовать исключение, чтобы отметить исключительный случай. Например, если что-то пойдет не так в конструкторе, и вы обнаружите, что имеет смысл уведомить вызывающего об этом, у вас нет другого выбора, кроме как сгенерировать исключение.

Другой пример: иногда нет значения, которое ваша функция может вернуть для обозначения ошибки; любое значение, которое может вернуть функция, означает успех.

int divide(int a, int b)
{
    if( b == 0 )
        // then what?  no integer can be used for an error flag!
    else
        return a / b;
}
88
задан Tower 15 June 2009 в 22:36
поделиться

4 ответа

Regarding the differences between Last-Modified/If-Modified-Since and ETag/If-None-Match:

Both can be used interchangeably. However depending on the type of resource, and how it is generated on the server, one or the other question ("has this been modified since ...?" / "does this still match this ETag?") may be easier to answer.

Examples:

  • If you're serving files, using the file's mtime as the Last-Modified date is the simplest solution.
  • If you're serving a dynamic web page built from a number of SQL queries, checking whether the data returned by any of those queries has changed may be impractical (unless all of them have some sort of "last modified" column). In this case, using e.g. an md5 hash of the page content as the ETag will be a lot easier.
    OTOH, это означает, что вам все равно придется сгенерировать всю страницу на сервере, даже для условного GET. Выяснение того, что именно должно быть помещено в ETag (первичные ключи, номера версий и т. Д.), Может сэкономить вам здесь много времени.

См. Эти ссылки для получения более подробной информации по теме:

109
ответ дан 24 November 2019 в 07:33
поделиться

If-Modified-Since использует дату, а If-None-Match использует ETag . Оба они могут использоваться для «страниц» (например, HTML) и других файлов.

5
ответ дан 24 November 2019 в 07:33
поделиться

If-Modified-Since сравнивается с Last-Modified , тогда как If-None-Match сравнивается с ETag . И Modified-Since , и ETag могут использоваться для идентификации конкретного варианта ресурса.

Но сравнение If-Modified-Since с Last-Modified дает вам информацию о том, является ли кэшированный вариант старше или новее , тогда как сравнение If-None-Match с ETag просто дает вам информацию, являются ли оба идентичными или нет. Кроме того, большинство генераторов ETag включают информацию о системном индексе inode , поэтому перемещение файла на другой диск может также изменить ETag .

]
22
ответ дан 24 November 2019 в 07:33
поделиться

Если сервер не указал как слабый, ETag считается сильный валидатор, и, таким образом, может использоваться для удовлетворения условного ранжированного запроса. Однако большинство автоматически сгенерированных тегов ETag вызывают трудности в ситуациях фермы серверов, поскольку они часто используют информацию об индексах и / или уникальный постоянный счетчик. На практике я обнаружил, что заголовка Last Modified достаточно для довольно статического содержимого, например, для обслуживания защищенного статического содержимого, поскольку время записи файла делает достаточно хороший валидатор.

ETag, безусловно, является наиболее гибким. Соответствующие клиенты должны отправлять ETag в условном запросе, тогда как они ДОЛЖНЫ отправлять оба, если они доступны.

3
ответ дан 24 November 2019 в 07:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: