Почему при обычном http запросе браузер перезагружает страницу?
Узнал об AJAX-запросах, при которых страница не перезагружается из-за фонового подключения, которое обеспечивается технологиями в браузере (Если не так, то поправьте, плиз). И возник вопрос – почему если браузер способен общаться с сервером, фоном, то зачем при обычном запросе перезагрузка? Может это связано с ограничениями в прошлом...
Например данные устаревают. Или для получения страницы не требуется длительного времени, тогда серверу проще отдать страницу целиком за один запрос, чем увеличивать время обращения и вероятность отказа по недоступности.
pogarik, так ведь происходит GET запрос. Его обрабатывает браузер - то есть отрабатывает как новая страница. Ajax запрос обрабатывается не браузером, а javascript, который предварительно нужно загрузить и начать обработку. Собственно уже загруженная страница может загруженным скриптом выполнять ajax запросы на сервер догружая и обновляя информацию не перезагружая её. Опять же для подгрузки с помощью ajax нужно выполнить ряд требований для согласований с сервером. И, так как каждый такой запрос отличается, то унифицированного сделать не получится.
pogarik, нет. Как сервер узнает что это старый клиент, а не новый, если кроме параметров GET запроса ничего на сервер не передаётся? Сервер отдаёт всегда ровно то, что от него спрашивают. Ajax наполняет запрос логикой, которую разработчик вкладывает в обработку запросов на сервере, и полученные данные распределяет по странице.
pogarik, при обычном запросе происходит рендеринг всей страницы т.к. вы запрашиваете всю страницу, нет и не может быть никаких особых условий для частичного рендеринга (хотя есть, конечно, устаревший frame, и как частный случай iframe). При ajax никакого рендеринга вообще не происходит, но, если нужно, вы можете его выполнить через js и так как вам нужно, полностью или частями.
Что там придет через ajax, дело десятое. Можете прислать всю страницу html целиком и затем заменить существующую, можете прислать только кусок и заменить его, можете прислать отдельные параметры в json например и на основе них поменять что-то в уже отрисованном DOM-элементе.
Потому что при обычном запросе приходит вся страница целиком - и без всяких кастомных логик берет и перерисовывается полностью.
А при Ajax - стреляет кастомная (насколько я понимаю) логика обработки ответа, которая "уникально для каждого сайта и случая" встраивает ответ в DOM (очень условно)