2010-05-01 3 views
13

Я заметил, что Названия или тела части запоминается, если я вернусь к Задать вопрос страницы, нажав Назад кнопки моего браузера.Как форма SO запоминает предыдущие входные значения?

Эта функция доступна во всех проверенных мной браузерах, но не существует для форм в моих собственных проектах.

Как я могу подойти к этому эффекту?

UPDATE

Я до сих пор не имеют никакого понятия еще нет, но предполагаю, что это что-то вроде кэша клиента включена по HTTP заголовков или JavaScript?

+8

Эта функция обычно обрабатывается вашим браузером. –

+7

Тогда почему эта функция не существует для моего собственного проекта в том же браузере? Что-то другое должно происходить по назначению. – user198729

+0

Возможно, люди расскажут вам, как настроить сервер для обеспечения правильного кэширования связанных заголовков http, если вы включили информацию в серверное программное обеспечение, обслуживающее страницы. У каждого сервера есть своя конфигурация для таких вещей .... – vkraemer

ответ

6

Это связано с свойствами кеширования вашей страницы.

1) Если браузеру разрешено кэшировать вашу страницу, он также будет помнить поля формы.

2) Если не разрешено кэшировать страницу, она забудет все.

Обычно динамически сгенерированные страницы попадают в категорию 2, поэтому вы не видите кеширование. Это действительно определяется заголовками HTTP (особенно Cache-Control и Last-Modified или с использованием E-тегов ). Для объяснения о том, как ваш браузер определяет кэширование (! Нетривиальным), смотри, например:

http://www.webscalingblog.com/performance/caching-http-headers-last-modified-and-etag.html

Но проще всего поставить форму на статической HTML-странице, то ваш веб-сервер будет обрабатывать все.

+0

Я не могу поместить форму на статическую HTML-страницу, и я не «Не знаю, почему« кеш-контроль »автоматически устанавливается на« \t no-store, no-cache, must-revalidate, post-check = 0, pre-check = 0' и 'Pragma' установлен на' no- cache'. – user198729

+0

Кэш-контроль установлен для этих значений для динамических страниц, потому что (как правило) вы хотите, чтобы пользователь каждый раз видел вновь созданную страницу, чтобы убедиться, что он видит самую последнюю информацию. Если нет, вы можете предоставить другой заголовок Cache-Control из вашего скрипта. Чтобы быть более конкретным, мне нужно знать, какой язык вы используете для создания страницы. – wump

+0

@wump: существует ли стандартная спецификация того, как веб-браузеры должны заполнять входные значения? Или браузеры реализуют это «как они себя чувствуют»? –

0

Нет никакой магии. Просто попробуйте следующий HTML:

<?xml version="1.0"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>Test</title> 
</head> 
<body> 
    <input type="text" name="title" value="" /> 
    <a href="http://www.google.com">Google</a> 
</body> 
</html> 

Открыть его в вашем браузере, введите текст, нажмите на ссылку, а затем кнопку Назад и он будет помнить значение. Протестировано и работает на IE8, FireFox 3.6, Chrome 4.

+2

Я не вижу в этом ничего особенного, не могли бы вы объяснить, почему это работает? – user198729

+1

Возможно, это работает, потому что он просматривался без веб-сервера в локальной файловой системе. –

+0

@ user198729: «Это связано с свойствами кеширования вашей страницы». '' См. Ответ 'wump' (принятый в настоящее время ответ) –

1

Пока я не могу дать много adivce, HTTP-заголовки страницы «Задать вопрос» выглядит следующим образом:

HTTP/1.1 200 OK 
Cache-Control: private 
Content-Type: text/html; charset=utf-8 
Content-Encoding: gzip 
Vary: Accept-Encoding 
Server: Microsoft-IIS/7.5 
Set-Cookie: [EDITED AWAY} 
Date: Mon, 03 May 2010 16:04:44 GMT 
Content-Length: 4800 

Я бы сравнил это свои собственные страницы/формы, особенно любым заголовки касающиеся кеширования и истечения срока действия.

+0

Я не задал никакой информации о заголовке, кажется, мой веб-сервер автоматически добавляет мне политику кеширования, чего я не хотел. – user198729

4

Вам необходимо найти механизм для установки параметров Cache-Control на страницах, которые вы обслуживаете.

Вы не указали, как вы обслуживаете веб-страницы. Но вот пример страницы ASP, что вызывает содержимое формы исчезает при возврате на страницу с помощью кнопки назад (это поведения вы в настоящее время испытываете):

<% Response.CacheControl = "no-cache" %>  
<% Response.AddHeader "Pragma", "no-cache" %>  
<% Response.Expires = -1 %>  
<HTML>  
<HEAD>  
<TITLE>Test page</TITLE>  
</HEAD>  
<BODY>  
Type some text into this box, click SO followed by the BACK button: 
<input type="text" name="title" value="" /> 
<a href="http://www.stackoverflow.com">SO</a>  
<p>  
When you get back the text you typed will be gone. 
</BODY>  
</HTML>  

Обратите внимание на верхних- линии, сделайте пару незначительных изменений ...

<% Response.CacheControl = "private" %>  
<HTML>  
<HEAD>  
<TITLE>Test page</TITLE>  
</HEAD>  
<BODY>  
Type some text into this box, click SO followed by the BACK button: 
<input type="text" name="title" value="" /> 
<a href="http://www.stackoverflow.com">SO</a>  
<p>  
When you get back the text you typed will still be there 
</BODY>  
</HTML>  

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

Дополнительные детали Cache-Control доступны по адресу:

Cache Control in ASP. Как и в большинстве случаев Microsoft, только обсуждает IE.

В этом руководстве по адресу Caching представлено хорошее введение с примером кода для нескольких разных веб-серверов, включая PHP.

w3.org является ссылкой на вас действительно нужно изучить, в частности раздел 14.9 о контроле кеша.

Ключом к получению поведения является поиск страниц с правильной параметризацией управления кешем.

Смежные вопросы