Изучаем Java EE 7 - [238]
100 — Продолжить | Сервер получил заголовки запроса, далее клиент должен прислать тело запроса |
101 — Переключение протоколов | Запрашивающая сторона просит сервер переключиться на другой протокол, и сервер соглашается это сделать |
200 — Хорошо | Запрос завершен успешно. Тело объекта, если таковое имеется, содержит представление ресурса |
201 — Создан | Запрос был выполнен, что привело к созданию нового ресурса |
204 — Нет содержимого | Сервер успешно обработал запрос, но не возвратил никакого содержимого |
206 — Частичное содержимое | Сервер доставил лишь часть содержимого; это было обусловлено диапазонами заголовков, заданными клиентом |
301 — Перемещено навсегда | Запрошенному ресурсу был присвоен новый постоянный URI, и при любых последующих ссылках на данный ресурс следует использовать один из возвращенных URI |
304 — Не изменялось | Указывает, что ресурс не изменялся с момента последнего запроса |
307 — Временное перенаправление | Запрос должен быть повторен с другим URI; однако в будущих запросах следует по-прежнему использовать исходный URI |
308 — Постоянное перенаправление | Этот, а также все последующие запросы должны направляться уже по новому URI |
400 — Неверный запрос | Запрос не может быть выполнен из-за синтаксической ошибки |
401 — Не авторизован | Похож на 403, но указывает, что для запроса требовалась аутентификация и она не была выполнена |
403 — Запрещено | Запрос был допустимым, но сервер отказался на него отвечать |
404 — Не найдено | Сервер не нашел каких-либо ресурсов, соответствующих URI, содержащемуся в запросе |
405 — Метод не поддерживается | Запрос был сделан с использованием метода, который не поддерживается ресурсом |
406 — Неприемлемо | Запрошенный ресурс может сгенерировать только такое содержимое, которое является неприемлемым в соответствии с заголовками Accept, указанными в запросе |
500 — Внутренняя ошибка сервера | Сервер столкнулся с неожиданным условием, помешавшим ему выполнить запрос |
501 — Не реализовано | Сервер либо не распознает метод запроса, либо не способен выполнить запрос |
503 — Служба недоступна | В настоящее время сервер недоступен, поскольку он перегружен запросами или остановлен для техобслуживания; как правило, это временное состояние |
505 — Версия HTTP не поддерживается | Сервер не поддерживает ту версию протокола HTTP, которая использовалась в запросе |
В большинстве распределенных систем роль кэширования невозможно переоценить. Цель кэширования — оптимизация производительности, достигаемая методом исключения ненужных запросов или снижения объема данных в откликах. Протокол HTTP предоставляет специальные механизмы для реализации кэширования и обеспечения корректности кэшированных данных. Но если клиент решает не использовать механизм кэширования, то все данные ему всякий раз придется запрашивать заново, независимо от того, были ли они изменены с момента последнего запроса.
При отправке ответа на запрос GET отсылаемая информация может содержать заголовок Last-Modified. Он указывает время последнего изменения ресурса. Когда пользовательский агент в следующий раз запросит данный ресурс, он сможет передать эту дату в заголовке If-Modified-Since. Веб-сервер (или прокси-сервер) сравнит эту дату с датой последнего изменения ресурса. Если дата, указанная пользовательским агентом, окажется такой же или более поздней, то будет возвращен код состояния 304 — Не изменялось без тела отклика. В противном случае запрошенная информация будет выполнена или перенаправлена.
Но манипуляции с датами могут быть сложны; в частности, они подразумевают, что все взаимодействующие агенты постоянно остаются синхронизированными. Эта проблема решается с помощью заголовка ответа ETag. ETag фактически является MD5- или SHA1-хешем всех байтов в представлении. Стоит измениться хотя бы одному байту в представлении, как изменится и ETag.
На рис. 15.2 показано, как использовать ETag. Чтобы получить ресурс с информацией о книге, вы используете действие GET, в котором указываете URI ресурса (GET /book/12345). Сервер возвратит ответ с XML-представлением книги, код состояния 200 — Хорошо, а также сгенерированный ETag. Когда вы повторно запросите тот же ресурс, попутно сообщив это же значение ETag в заголовке If-None-Match, сервер не будет отправлять вам представление ресурса, если с момента последнего запроса этот ресурс не изменился. Вместо этого он вернет код состояния 304 — Не изменялось, сообщая клиенту, что с момента последнего обращения ресурс не изменился.
Рис. 15.2. Применение кэширования и кода состояния 304 — Не изменялось
Запросы, использующие HTTP-заголовки If-Modified-Since, If-Unmodified-Since, If-Match, If-None-Match и If-Range, называются условными. Условные запросы помогают экономить пространство полосы доступа и ресурсы процессора (как на сервере, так и на клиенте), так как исключают ненужные «круговые» операции передачи данных. Заголовки If-* чаще всего используются с запросами GET и PUT.
От Сети к веб-службам
Все мы пользуемся Сетью и знаем, как она работает. Отчего же веб-службы должны работать иначе? В конце концов, службы также часто обмениваются уникально идентифицируемыми ресурсами, которые связываются с другими ресурсами по принципу, напоминающему расстановку гиперссылок. Масштабируемость веб-архитектуры проверена временем; зачем же заново изобретать велосипед. Так почему бы не использовать при создании, обновлении или удалении ресурса о книге давно знакомые HTTP-операции? Например:
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.