Иногда вам действительно нужно использовать исключение, чтобы отметить исключительный случай. Например, если что-то пойдет не так в конструкторе, и вы обнаружите, что имеет смысл уведомить вызывающего об этом, у вас нет другого выбора, кроме как сгенерировать исключение.
Другой пример: иногда нет значения, которое ваша функция может вернуть для обозначения ошибки; любое значение, которое может вернуть функция, означает успех.
int divide(int a, int b)
{
if( b == 0 )
// then what? no integer can be used for an error flag!
else
return a / b;
}
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:
mtime
as the Last-Modified
date is the simplest solution.ETag
will be a lot easier.См. Эти ссылки для получения более подробной информации по теме:
If-Modified-Since использует дату, а If-None-Match использует ETag . Оба они могут использоваться для «страниц» (например, HTML) и других файлов.
If-Modified-Since
сравнивается с Last-Modified
, тогда как If-None-Match
сравнивается с ETag
. И Modified-Since
, и ETag
могут использоваться для идентификации конкретного варианта ресурса.
Но сравнение If-Modified-Since
с Last-Modified
дает вам информацию о том, является ли кэшированный вариант старше или новее , тогда как сравнение If-None-Match
с ETag
просто дает вам информацию, являются ли оба идентичными или нет. Кроме того, большинство генераторов ETag
включают информацию о системном индексе inode , поэтому перемещение файла на другой диск может также изменить ETag
.
Если сервер не указал как слабый, ETag считается сильный валидатор, и, таким образом, может использоваться для удовлетворения условного ранжированного запроса. Однако большинство автоматически сгенерированных тегов ETag вызывают трудности в ситуациях фермы серверов, поскольку они часто используют информацию об индексах и / или уникальный постоянный счетчик. На практике я обнаружил, что заголовка Last Modified достаточно для довольно статического содержимого, например, для обслуживания защищенного статического содержимого, поскольку время записи файла делает достаточно хороший валидатор.
ETag, безусловно, является наиболее гибким. Соответствующие клиенты должны отправлять ETag в условном запросе, тогда как они ДОЛЖНЫ отправлять оба, если они доступны.