В чем разница между кодом состояния HTTP 200 (кэш) и кодом состояния 304?

м с помощью Google "Скорость страницы » Плагин для Firefox для доступа к моему веб-сайту.

Некоторые компоненты на моей странице обозначены как статус HTTP:

200 200 (кеш) 304

От GoogleСкорость страницы ".

Что я'Я смущен, это разница между 200 (кеш) и 304.I '

Мы обновили страницу несколько раз (но не очистили мой кэш), и всегда кажется, что мой favicon.ico и несколько изображений имеют статус = 200 (кэш), в то время как некоторые другие изображения имеют статус HTTP 304.

Я нене понимаю, почему разница.

ОБНОВИТЬ:

Используя Google "Скорость страницы »Я получаю200 (кеш) заhttp://example.com/favicon.ico так же какhttp://cdn.example.com/js/ga.js

Но я получаю статус http304" заhttp://cdn.example.com/js/combined.min.js

Я неЯ не понимаю, почему у меня есть два файла JavaScript, расположенных в одном каталоге / js /, один из которых возвращает статус HTTP 304, а другой возвращает код состояния 200 (кэш).

Ответы на вопрос(6)

что яЯ проверю, что тыне перезагружайте страницу, нажав кнопку обновления, которая всегда выдаст условный запрос ресурсов и вернет 304 для многих элементов страницы. Вместо этого перейдите к строке URL, выберите страницу и нажмите клавишу ввода, как если бы вы только что ввели тот же URL, что даст вам лучший индикатор того, что ».кешируется правильно. Эта статья отлично объясняет разницу между условными и безусловными запросами и то, как кнопка обновления влияет на них:http://blogs.msdn.com/b/ieinternals/archive/2010/07/08/technical-information-about-conditional-http-requests-and-the-refresh-button.aspx

 aldemarcalazans09 февр. 2017 г., 16:31
Вы правы: разница в кодах связана с тем, что вы перезагружаете или не ту же страницу. Если я перезагрузить страницу, я вижу в браузереСетевой монитор с кодом 304. Но если я получаю доступ к другому URL, который использует те же файлы, я вижу в браузереСетевой монитор отслеживает код 200 (из кэша). В моем случае другой URL был просто строкой запроса, добавленной к исходному URL (страница была практически такой же).
 Peeeech10 дек. 2016 г., 00:12
Я могу'даже не описать, сколько времени я потратил, пытаясь выяснить статус 304 запросов к CDN. Хотя вы отвечаете на немного другой вопрос, вы заслуживаете награду :-)

200 (кеш) были выполнены непосредственно из кеша вашего браузера, что означает, что исходные запросы на элементы были возвращены с заголовками, указывающими, что браузер может их кешировать (например, в будущем)Expires или жеCache-Control: max-age заголовки), и что во время запуска нового запроса эти кэшированные объекты все еще хранились в локальном кэше и еще не истекли.

304, с другой стороны, являются ответом сервера после того, как браузер проверил, был ли файл изменен с последней версии, которую он кэшировал (ответ был "нет»).

Для оптимальной работы в Интернете вылучше всего установить далекое будущееExpires: или жеCache-Control: max-age заголовок для всех активов, а затем, когда актив необходимо изменить, изменив фактическое имя файла актива или добавив строку версии к запросам для этого актива. Это устраняет необходимость в выполнении любого запроса, если только ресурс определенно не изменился по сравнению с версией в кэше (для этого ответа 304 не требуется). Yahoo! имеетбольше рекомендаций по производительности, связанных с кэшем, что включает в себя проверку правильности настройки ETag.

 yfeldblum03 нояб. 2009 г., 04:59
Именно так. Firebug сообщает, чтоэто потянуло200 OK ответ из локального кэша, Другими словами, Firebug фактически выполнил цикл запрос / ответ полчаса назад и кэшировал результат: результат был200 OKи результат по-прежнему200 OKтолько теперь результат приходит из кеша, а не с сервера.
 Hank03 нояб. 2009 г., 04:57
Мы обновили мой оригинальный пост, чтобы показать мой живой сайт и рассматриваемый JavaScript. Пожалуйста, смотрите мой обновленный оригинальный пост.
 Hank03 нояб. 2009 г., 05:05
Справедливость, так почему же Firebug сообщает, что для ga.js извлекается из локального кэша (кэш статуса 200), в то время как комбинированный файл min.js сообщает о статусе HTTP 304. Какие'Странно то, что оба файла имеют одинаковый тип файла (JavaScript) и находятся в одном каталоге сервера. Вы могли бы подумать, что оба будут либо 200 или 304, а не разные
 yitwail13 нояб. 2012 г., 11:24
max-age а такжеage объединенные заголовки могут также привести к 200 (кэш) результатам, еслиage меньше чемmax-age, Единственное исключение - когда пользователь нажимает кнопку обновления браузера, и в этом случае отправляется заголовок 304.
 Michael Butler18 янв. 2012 г., 16:19
Интересно, что Firebug ВСЕГДА показывает запросы, которые в результате 304 (не изменено) занимают 1 мс. Но "200 OK (кэшировано) запросы всегда занимают 10-25 мс Нет никакого способа, которым запрос сервера (304) мог бы быть быстрее, чем выборка из кеша, которая недаже пинг сервера. Это должно быть ошибка Firebug.
 Honey16 июл. 2017 г., 22:05
@yitwail запутался. Вы имеете в виду, если пользователь нажимает на обновление, то онотриггеров / навязывает повторная проверка—приводя к304? ХОРОШО. Затем делатькакие приводит к200? КакиеДругой есть способ, который может вызвать запрос, который нене требует повторной проверки?
 Hank03 нояб. 2009 г., 04:42
И что'лучше иметь с точки зрения скорости ... »200 (кеш) или же "304" http статус сообщений?
 Josef Pfleger19 июн. 2010 г., 15:45
Вот различные методы обновления Firefoxwww-jo.se/f.pfleger/firefox-reload
 Ben Regenspan03 нояб. 2009 г., 04:46
200 кеш. Несколько хороших заметок об этом здесь:developer.yahoo.com/performance/rules.html#expires , Вы хотите как можно более длительный срок действия своих активов, но должны сбалансировать это с тем фактом, что таким образом вы теряете определенную степень контроля. Одна вещь, которую вы можете сделать, это установить длительный срок действия файлов, а затем при необходимости увеличить номер версии ресурса для этих файлов. Например, вы можете включить style.css? V1 и увеличить в <ссылка> элемент style.css? v2, когда есть изменения.I '
 iono22 апр. 2013 г., 06:34
HTML5 Boilerplate рекомендует не использовать метод строки запроса для очистки кэша - это 'лучше поменять,hrefurl, а такжеsrc ссылки на каждый файл, чтобы включить 'отпечатков пальцев» (либо хеш файла или простое увеличенное число), а затем скажите серверу удалить этот отпечаток и просто обработать его.style.css или что угодно. Если ты можешь'Чтобы сделать это на сервере, попросите систему сборки переименовать реальные файлы с помощью отпечатка пальца.
 dmon06 дек. 2016 г., 19:35
@ Хэнк - я знаю, что это годы спустя, но никто не ответил на ваш последний вопрос: почему два файла, поданные из одной и той же папки, приводят к разным результатам при обновлении? Я думаю, что ответ заключается в том, что это зависит от того, как вы загружаете эти ресурсы. Я'Я уверен (если кто-нибудь может подтвердить, что это было бы здорово), что второй файл JS загружается из другого "объем", Таким образом, обновление только вызывает условную перезагрузку файлов ПРЯМО на начальной странице. Если ты'загрузка файлов через другой механизм (например, iframe), условное обновление выигранобыть запущенным.

не модифицированный, Ваш веб-сервер в основном говорит браузеруэтот файл не имеетизменилось с момента последнего запроса. " В то время как HTTP 200 сообщает браузерувот успешный ответ - который должен быть возвращен, когда этоs либо в первый раз, когда ваш браузер обращается к файлу, либо при первом обращении к измененной копии.

Для получения дополнительной информации о статусе коды проверитьhttp://en.wikipedia.org/wiki/List_of_HTTP_status_codes.

 Hank03 нояб. 2009 г., 04:45
Тот'мое понимание также ... вот почему я заявил в своем оригинальном сообщении, что яя обновил мою страницу несколько раз и все еще получаю "200 (кеш) для того же favicon.ico и конкретного JavaScript у меня есть. Очень странно
 richleland03 нояб. 2009 г., 04:51
200 на самом деле неозначает кэширование, это просто означает ОК. Скорее всего, ваша конфигурация сервера неt явно указывать браузеру кэшировать ваши файлы ico и js, чтобы он возвращал код состояния 200.
 Hank03 нояб. 2009 г., 04:56
Мы обновили мой оригинальный пост, чтобы показать мой живой сайт и рассматриваемый JavaScript. Пожалуйста, смотрите мой обновленный оригинальный пост.
 Hank03 нояб. 2009 г., 04:53
Тот'Это не относится к б / к на некоторых из моих JavaScript, я получаю 304, а другой JavaScript я получаю "200 (кеш), Весь JavaScript находится в одном каталоге веб-сервера example.com/js/
 richleland03 нояб. 2009 г., 04:54
Я должен добавить, что 200 (кеш) просто означает, что этолокально кэшируется и фактически не выполняет запрос к серверу, что будет быстрее, чем обращение к серверу и получение ответа 304.I '

Краткое объяснение этих трех кодов статуса у неспециалистаСроки.

200 - успех (запросы браузера и получение файла с сервера)

Если на сервере включено кеширование

200 (из кеша памяти) - файл найден в браузере, поэтому браузер не отправляет запрос с сервера304 - браузер запрашивает файл, но он отклоняется сервером

Для некоторых файлов браузер решает запросить с сервера, а для некоторых -s решает читать из сохраненных (кэшированных) файлов. Почему это ? Каждый файл имеет срок годности, поэтому

Если срок действия файла не истек, то браузер будет использовать из кеша (200 кеш).

Если срок действия файла истек, браузер запрашивает файл у сервера. Файл проверки сервера в обоих местах (браузер и сервер). Если тот же файл найден, сервер отклоняет запрос. Согласно протоколу браузер использует существующий файл.

посмотрите на эту конфигурацию nginx

location / {
    add_header Cache-Control must-revalidate;
    expires     60;
    etag on;

    ...
}

Здесь срок действия равен 60 секундам, поэтому все статические файлы кэшируются в течение 60 секунд. Таким образом, если вы запросите файл снова в течение 60 секунд, браузер будет читать из памяти (200 памяти). Если вы запросите через 60 секунд, браузер запросит сервер (304).

Я предположил, что файл не изменяется через 60 секунд, в этом случае вы получите 200 (т.е. обновленный файл будет получен с сервера).

Таким образом, если серверы настроены с разными заголовками (политиками) с истекающим сроком и кэшированием, статус может отличаться.

В вашем случае вы используете cdn, основное назначение cdn - это высокая доступность и быстрая доставка. Поэтому они используют несколько серверов. Хотя кажется, что файлы находятся в одном каталоге, cdn может использовать несколько серверов для предоставления контента, если эти серверы имеют разные конфигурации. Тогда эти статусы могут измениться. Надеюсь, поможет.

 Bob Kuhar21 мар. 2019 г., 20:42
304 - не модифицированный нет а "отказ» на сервере. Это сервер, декларирующий клиентудля версии, которую вы запрашиваете, я знаю, что она не изменена, вы неТ действительно нужен файл ", Технически, 304 является одним изперенаправление» коды ответов. Это говорит клиентуполучить его из собственного кэша ".

200 (кеш) означает, что Firefox просто использует локально кэшированную версию..

304 означает, что Firefox отправляетIf-Modified-Since» условный запрос к веб-серверу. Если файл не обновлялся с даты, отправленной браузером, веб-сервер возвращает ответ 304, который, по сути, указывает Firefox использовать его кэшированную версию. Это не так быстро, как 200 (кэш), потому что запрос все еще отправляется на веб-сервер, но сервер неПришлось отправить содержимое файла.

На ваш последний вопрос я неНе знаю, почему два файла JavaScript в одном каталоге возвращают разные результаты.

 Hank03 нояб. 2009 г., 04:57
Мы обновили мой оригинальный пост, чтобы показать мой живой сайт и рассматриваемый JavaScript. Пожалуйста, смотрите мой обновленный оригинальный пост.
 x2.03 нояб. 2009 г., 04:41
Да, но favicon - это тоже файл,не серверный скрипт или что-то.
 Hank03 нояб. 2009 г., 04:41
Так же как и "200 (кеш) означает, что мой браузер должен был повторно загрузить весь контент снова, чтобы потом определить, нет изменилось с того что было в кеше? В идеале кажется, что я хотел бы 304 сообщений о состоянии, а не "200 (кеш)

Ваш ответ на вопрос