Должен HTTP 304 Не, Измененные ответы содержат заголовки управления кэша?

Предописания позволяют Вам сделать это:

template  class vector;

Затем можно объявить ссылки на и указатели на vector, не определяя вектор (без включения vector заголовочный файл). Это работает то же предописаниями регулярных (нешаблон) классы.

проблема с шаблонами в особенности состоит в том, что Вам обычно нужны не только объявление класса, но также и все определения метода в Вашем заголовочном файле (так, чтобы компилятор мог инстанцировать необходимых шаблонов). Явное шаблонное инстанцирование (из которого можно вызвать использование с -fno-implicit-templates) является обходным решением для этого; можно поместить определения метода в исходный файл (или, следуя примеру Google Style Guide , в -inl.h заголовочный файл, который Вы не должны включать) затем явно инстанцируют их как это:

template  class vector;

Примечание, в котором Вы на самом деле не нуждаетесь -fno-implicit-templates для пользы из этого; компилятор тихо постарается не инстанцировать любых шаблонов, для которых он не имеет никаких определений, при условии, что компоновщик поймет это позже. И добавление -fno-implicit-templates сделает использование весь шаблоны тяжелее (не только трудоемкие), таким образом, я не рекомендовал бы это.

проблема с Вашим примером кода состоит в том, что Вы вперед не объявляете истинное std::vector класс. Не включая , Вы создаете свое собственное, нестандартное vector класс, и Вы никогда не определяете push_back, таким образом, нет ничего, чтобы компилятор инстанцировал.

я привык предварительно скомпилированные заголовки для большого эффекта; я не уверен, почему они не помогли Вам. Вы помещаете все свои неизменяющиеся заголовки на сингле all.h, предварительно скомпилировал его и проверил с [1 113] или подобный, что all.h.pch был загружен, и отдельные заголовочные файлы не были? (Как использовать strace: вместо того, чтобы работать g++ mytest.cc, выполнение strace -o strace.out g++ mytest.cc, затем просматривают strace.out в текстовом редакторе и ищут open( вызовы для наблюдения, какие файлы читаются.)

55
задан runarM 18 October 2009 в 22:31
поделиться

2 ответа

Традиционный способ сериализации в файловую систему - использовать Java Serialization ]. Однако вам нужно везде реализовать Serializable .

Более простым решением является сериализация в XML (а затем выгрузка в файловую систему) с помощью XStream . Вам не нужно реализовывать какие-либо интерфейсы, и почти все сериализуется и десериализуется без дальнейшего вмешательства. При необходимости вы можете дополнительно настроить сериализацию. Единственная проблема, с которой я когда-либо сталкивался, - это сериализация внутреннего класса без намеренной сериализации содержащего его внешнего класса (это связано с неявной ссылкой this )

  1. Вы действительно хотите, чтобы промежуточные кеши кэшировали ответ (то есть обновляли свою запись кэша для ресурса). Они будут должным образом отвечать на запросы от клиентов с 200 или 304, в зависимости от того, включил ли клиент условный заголовок, например If-Modified-Since.

  2. 120-секундный ttl будет обновлен с помощью 304 (так что тот же клиент не должен делать еще один запрос для того же ресурса в течение как минимум 120 секунд). А клиенты, пока у них все еще кэшируется контент, будут продолжать делать условные запросы для ресурса, на которые вы можете продолжать отвечать 304.

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

Если я правильно понимаю, браузер фактически кэширует в течение 120 секунд, и ваш сервер отвечает 304 Not Modified на последующие запросы If-Modified-Since. Этот запрос «IMS» возникает, когда конечный пользователь обращается к тому же URL-адресу. В это время браузер может отправить запрос If-Modified-Since. Браузер хочет знать, отображает ли он устаревшее содержимое. Это кажется нормальным.

После получения этого запроса ваш сервер должен ответить 200 OK, 304 Not Modified (или 4XX, если необходимо).

Я не верю, что вам следует настраивать ваш сервер на отправку заголовка Cache-Control с ответ 304 по двум причинам:
1. Вы не хотите, чтобы какие-либо промежуточные кеши кэшировали этот ответ 304 (есть вероятность, что они могут)
2. 120-секундный TTL не будет обновлен ответом 304. Браузер сохранит объект в течение 120 секунд после ответа 200 OK. Через 120 секунд браузер должен отправить запрос GET, а не If-Modified-Since, поэтому ваш сервер ответит байтами файла, а не просто ответом 304.

Обратите внимание, что браузер не будет запрашивать файл снова автоматически через 120 секунд, если конечный пользователь специально не запрашивает его через загрузку страницы или напрямую вводит URL-адрес в свою адресную строку (или если у вас нет специального приложения, которое каким-либо образом контролирует эту функцию).

Отредактировано первый абзац читать немного лучше (надеюсь)

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

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