Подтвердить что ты не робот

Ответ HTTP перед запросом

Мой вопрос может показаться глупым, но я просто хотел быть уверенным:

  • Возможно ли отправить HTTP-ответ перед запросом на этот ресурс?

Скажем, например, у вас есть страница HTML index.html, которая показывает только изображение с именем img.jpg. Теперь, если ваш сервер знает, что посетитель будет запрашивать HTML файл, а затем jpg-изображение каждый раз:

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

Я знаю, что HTTP - это синхронный протокол, поэтому теоретически он не должен работать, но я просто хотел, чтобы кто-то его подтвердил (или нет).

4b9b3361

Ответ 1

Если кто-то запрашивает /index.html и вы отправляете два ответа (один для /index.html, а другой для /img.jpg), откуда вы знаете, что получатель получит два ответа и знает, что с ними делать перед тем, как идет второй запрос?

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

Еще одна проблема заключается в том, что вы отказываете клиенту в использовании HTTP-кеширующих инструментов, таких как If-Modified-Since и If-None-Match (то есть клиент может не захотеть отправить /img.jpg, поскольку он уже имеет кешированную копию).

Таким образом, вы можете приблизиться к преимуществам push-сервера, используя методы Comet. Но это гораздо больше, чем просто предвидеть входящие HTTP-запросы.

Ответ 2

Недавняя публикация Jacques Mattheij, ссылаясь на ваш вопрос, утверждает, что хотя HTTP был разработан как синхронный протокол, реализация не была, На практике браузер (он не уточняет, что именно) принимает ответы на запросы еще не отправлены.

С другой стороны, если вы ищете что-то менее взломанное, вы можете взглянуть на:

  • push, позволяющий серверу отправлять содержимое в браузер. Современная реализация, которая заменяет длинные опросы/кометы "хаки", это веб-сайты. Возможно, вы захотите посмотреть socket.io.
  • В качестве альтернативы вы можете посмотреть клиентскую маршрутизацию. Некоторые реализации сочетают это с методами кэширования (например, в derby.js Я считаю).

Ответ 3

Эффект кэширования ресурсов будет лучше, т.е. установите правильные заголовки кеша и настройте свой веб-сервер для кэширования. Вы можете также встроенные изображения с использованием кодировки base 64, если это вызывает особую озабоченность.

Вы также можете посмотреть длинные опросы javascript-решений.

Ответ 4

Вы ищете server push: он недоступен в HTTP. Такие протоколы, как SPDY, есть, но вам не повезло, если вы ограничены HTTP.

Ответ 5

Я не думаю, что можно смешивать .html и изображение в том же HTTP-ответе. Что касается отправки данных изображения "сразу", сразу после первого запроса - существует концепция "статических ресурсов", которая может помочь (но для этого потребуется клиент для создания нового запроса для определенного ресурса).

В статье есть несколько интересных вещей.

Ответ 6

Нет, это невозможно.

Первая строка запроса содержит запрашиваемый ресурс, поэтому вы не знаете, что ответить, если вы сначала не рассмотрели байты (по крайней мере, одну строку) запроса.

Ответ 7

Нет. HTTP определяется как протокол запроса/ответа. Один запрос: один ответ. Все остальное - это не HTTP, это что-то еще, и вам нужно будет указать его правильно и полностью реализовать на обоих концах.