В вашем конкретном случае сервер node.js просто сообщает браузеру, что его кешированная версия socket.io.js
не устарела, поэтому просто используйте ту, которая уже есть в кеше. Это нормальное ожидаемое поведение браузера для кэшируемых файлов. Если вы очистите кеш браузера, перезапустите браузер, а затем повторите этот тест, при первой загрузке файла вы должны увидеть статус 200 (поскольку кеш был пуст, браузер не будет выдавать условный запрос GET). После этого, как только файл будет кэширован, вы должны снова получить 304.
Описание статуса возврата 304 находится прямо здесь, в спецификации (а также в самом первом результате поиска Google):
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.5
10.3.5 304 Не изменено
Если клиент выполнил условный запрос GET и доступ разрешен, но документ не был изменен, сервер ДОЛЖЕН ответить этим кодом состояния. Ответ 304 НЕ ДОЛЖЕН содержать тело сообщения и, таким образом, всегда заканчивается первой пустой строкой после полей заголовка.
Ответ ДОЛЖЕН включать следующие поля заголовка:
- Date, unless its omission is required by section 14.18.1
Если исходный сервер без часов подчиняется этим правилам, а прокси и клиенты добавляют свою дату к любому ответу, полученному без нее (как уже указано в [RFC 2068], раздел 14.19), кэши будут работать правильно.
- ETag and/or Content-Location, if the header would have been sent
in a 200 response to the same request
- Expires, Cache-Control, and/or Vary, if the field-value might
differ from that sent in any previous response for the same
variant
Если условный GET использует надежный валидатор кеша (см. раздел 13.3.3), ответ НЕ ДОЛЖЕН включать другие заголовки объектов. В противном случае (т. е. условный GET использовал слабый валидатор) ответ НЕ ДОЛЖЕН включать другие заголовки объектов; это предотвращает несоответствия между кэшированными телами сущностей и обновленными заголовками.
Если ответ 304 указывает на объект, который в настоящее время не кэшируется, то кэш ДОЛЖЕН игнорировать ответ и повторить запрос без условия.
Если кэш использует полученный ответ 304 для обновления записи кэша, кэш ДОЛЖЕН обновить запись, чтобы отразить любые новые значения полей, указанные в ответе.
Итак, в двух словах это означает, что если клиент сделал условный запрос GET, то сервер может вернуть 304, что означает, что содержимое не было изменено с момента его последнего запроса, и это способ для сервера сообщить об этом обратно в клиент без повторной отправки содержимого. По сути, клиент говорит: «Я хотел бы знать, есть ли у вас более новая версия этого контента, и вот метаданные о версии, которая у меня уже есть. Если у вас нет более новой версии, чем та, что у меня уже есть, тогда просто верните 304, в противном случае пришлите мне более новую версию».
И, если вам нужно больше объяснений по «условному запросу GET», вы можете прочитать об этом здесь: https://ruturajv.wordpress.com/2005/12/27/conditional-get-request/
Подробнее
Если вы очистите кеш браузера, а затем получите socket.io.js
, вы увидите статус ответа 200 и такой заголовок ответа:
ETag: xxxxx
Затем, в следующий раз, когда ваш браузер запросит тот же файл, он отправит условный запрос GET с этим заголовком в запросе:
If-None-Match: xxxxx
Где xxxxx
— одна и та же строка в обоих.
Это браузер сообщает серверу, что у него уже есть версия этого файла с данным ETag. Затем сервер проверяет, соответствует ли его версия файла этому ETag или нет. Если ETag совпадает, возвращается 304. В этом случае ETag используется как номер версии. В некоторых случаях это хэш файла, но в конкретном случае socket.io.js это фактически номер версии (поскольку код сервера хорошо знает об этом конкретном файле).
person
jfriend00
schedule
12.10.2015
did you change
? - person Jerielle   schedule 12.10.2015