2017-01-24 3 views
0

У меня есть веб-служба, где любой пользователь может запустить процесс, который занимает от 15 секунд до 10 минут. Процесс запускается с запросом POST, и пользователь перенаправляется на страницу, показывающую текущий ход процесса (например, https://example.com/progress-status/123).HTTP: опрос веб-страниц без JavaScript?

Моей текущей реализацией является передача HTTP-заголовка Refresh со значением n;url=https://example.com/progress-status/123, где n автоматически изменяется от 5 до 120 в соответствии с ожидаемым временем до завершения и текущей загрузкой сервера. В результате статус прогресса автоматически обновляется каждые 5 секунд или более. После того, как прогресс будет завершен, страница состояния немедленно перенаправит (HTTP 301 и заголовок Location) на завершенную работу.

Это хорошо работает, но вызывает уродливое мерцание в Opera 42.0, которое считает, что это означает вынужденную перезагрузку и пропустить все кеши. Я отправляю правильные заголовки Cache-Control, поэтому использование кэшированного результата для всего будет хорошо, но заголовок Refresh заставляет игнорировать все кеши. (Страница состояния содержит некоторые изображения и ссылки на статические файлы CSS, поэтому нет смысла обновлять эти ресурсы для каждого запроса опроса.)

Есть ли способ реализовать опрос только HTML-страницы без JavaScript? Я знаю, что могу опросить только текущий статус с помощью запроса Ajax, а затем обновить часть отображаемой в данный момент страницы с обновленной информацией. Однако это не будет работать, если пользователь отключит JavaScript. Остальная часть сервиса работает без JavaScript, поэтому JavaScript требует чего-то такого простого, кажется, плохого. (У меня уже есть кнопка отправки GET на странице состояния выполнения, чтобы принудительно обновить вручную.)

Я знаю, что заголовок HTTP Refresh не определен в HTTP 1.0 или HTTP 1.1, так что это немного серая область. Я ищу что-то, что работает в реальном мире без JavaScript.

+4

Протокол HTTP является лицом без гражданства в соответствии с проектом. Поэтому, если вы не можете использовать javascript для этого, я боюсь, что вам придется жить с ним, потому что в протоколе вам нечего предложить. Кроме того, я считаю совершенно нормальным, что пользовательский интерфейс ухудшается, если javascript отключен. И я подчеркиваю слово ** ухудшение **, которое отличается от слова ** break **. –

+1

Имеет ли opera такое же поведение с элементом '' в голове, как против заголовка? - Страница с голыми костями всегда может быть доставлена ​​через IFRAME. –

ответ

0

Я не могу придумать, как это сделать. И намного меньше того, что влечет за собой хорошие практики: Javascript.

Вы можете использовать тег noscript посоветовать пользователям, что JavaScript необходимо:

<noscript> 
    <h1>JavaScript is not enabled, please check your browser settings.</h1> 
</noscript> 

Реалистично почти каждый с поддержкой Javascript Nowdays.

Работы Google Maps, FaceBook, и т.д., без JavaScript? Номер

Зачем вам требуется веб-приложение?


Я завершаю согласен с этой фразой из @Matthew Trow answer:

Я думаю, жертвуя функциональность для 99% пользователей для размещения 1% сущие кровавые мышления.

0

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

0

вы можете попробовать HTML мета обновить

<meta http-equiv="refresh" content="5"><!-- reloads the page after 5 seconds //--> 

W3Schools doc on <meta>

Конечно только положить его, если прогресс < 100% :)