Как форма SO помнит предыдущие входные значения?

Я заметил, что Заголовок или Часть тела помнят, если я возвращаюсь к странице Ask Question путем оттеснения Кнопки моего браузера.

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

Как я могу приблизиться к тому эффекту?

ОБНОВЛЕНИЕ

Я все еще еще не имею никакой подсказки, но предполагаю это что некоторый клиентский кэш, включенный http заголовками или JavaScript?

13
задан user198729 1 May 2010 в 17:33
поделиться

4 ответа

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

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

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

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

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

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

6
ответ дан 2 December 2019 в 01:09
поделиться

Вам необходимо найти механизм для установки параметров 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>    

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

<% 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.

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

w3.org - это справочник, который действительно необходимо изучить, особенно раздел 14.9 о Cache-Control.

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

4
ответ дан 2 December 2019 в 01:09
поделиться

Хотя я не могу дать особого объяснения, 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

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

1
ответ дан 2 December 2019 в 01:09
поделиться

Никакой магии. Просто попробуйте следующий 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.

0
ответ дан 2 December 2019 в 01:09
поделиться
Другие вопросы по тегам:

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