Изучаем Java EE 7 - [237]

Шрифт
Интервал

• Запрос PUT предназначен для обновления состояния ресурса, сохраненного по указанному URI. Если URI запроса ссылается на несуществующий ресурс, то ресурс будет создан именно по этому URI. Метод PUT может применяться, например, при обновлении цены на книгу или адреса клиента. Метод PUT небезопасен (так как состояние ресурса обновляется), но идемпотентен: можно многократно отослать один и тот же запрос PUT, а конечное состояние ресурса останется неизменным.

• Запрос DELETE удаляет ресурс. Ответом на DELETE может быть статусное сообщение, получаемое в теле более подробного сообщения, либо отсутствие статуса вообще. Запрос DELETE также является идемпотентным, но не является безопасным.

• Как было указано выше, существуют и другие методы HTTP, которые используются реже.

• Запрос HEAD практически идентичен GET с той оговоркой, что сервер не возвращает в ответ тело сообщения. HEAD может быть полезен при проверке валидности ссылки или размера объекта без передачи этой ссылки или объекта.

• Когда сервер получает от клиента запрос TRACE, он отражает полученный запрос на клиент. TRACE может быть полезен для проверки того, какую информацию добавляет к запросу (или изменяет) промежуточный сервер, прокси-сервер или брандмауэр.

• Запрос OPTIONS представляет собой запрос информации о возможностях коммуникации, доступных в той цепочке запросов/ответов, на которую указывает данный URI. Этот метод позволяет клиенту определять варианты и/или требования, связанные с ресурсом, либо возможности сервера. При этом не предполагается никаких действий ресурса или операции по получению ресурса.

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


Согласование содержимого

Согласование содержимого[2] — механизм, описанный в разделе 12 стандарта HTTP. Согласование содержимого определяется как «механизм автоматического определения необходимого представления при наличии нескольких разнотипных вариантов представлений». Потребности, пожелания и способности клиента могут отличаться; наилучшее представление для японского пользователя мобильного устройства вполне может не совпадать с оптимальным вариантом для американского читателя новостной ленты.

Согласование содержимого основано, в частности (но не только), на использовании заголовков HTTP-запросов Accept, Accept-Charset, Accept-Encoding, Accept-Language и User-Agent. Например, чтобы получить представление списка книг издательства «Питер» по теме Java, клиентское приложение (пользовательский агент) запросит страницу http://books.piter.com/search?q=Java, для заголовка Accept которой будет задано значение text/csv. Легко представить, что в другом случае на основе заголовка Accept-Language сервер выберет подходящий документ в формате CSV для отображения на заданном языке (например, японском или английском).


Типы содержимого

HTTP использует медиатипы, применяемые в Интернете (более известные как MIME-типы). Они записываются в полях заголовков Content-Type и Accept для обеспечения открытой и расширяемой типизации данных и согласования типов. Медиатипы Интернета подразделяются на пять самостоятельных основных категорий: text, image, audio, video и application. Эти типы далее классифицируются на несколько подтипов (text/plain, text/xml, text/xhtml и т. д.). Рассмотрим наиболее распространенные общеупотребительные типы содержимого:

• text/plain — используется по умолчанию, им записываются простые текстовые сообщения;

• text/html — очень часто применяется в наших браузерах. Данный тип информирует пользовательский агент, что содержимое — это веб-страница на языке HTML;

• image/gif, image/jpeg, image/png — этот обобщающий тип, соответствующий изображениям нескольких типов, требует устройства для отображения (графический дисплей, графический принтер) и для просмотра информации;

• text/xml, application/xml — формат, используемый для обмена XML-сообщениями;

• application/json — объектная нотация JavaScript (JSON). Это легковесный текстовый формат для обмена данными, не зависящий от конкретного языка программирования (см. главу 12).


Коды состояния

При получении каждого ответа с ним ассоциируется HTTP-код. Спецификация определяет около 60 таких кодов. Элемент Status-Code — это трехзначное целое число, описывающее контекст, в котором произошел ответ. Код состояния входит в состав обертки сообщения. Первая цифра указывает один из классов ответа:

• 1xx — информационный: запрос получен, процесс продолжает работу;

• 2xx — успех: действие было успешно получено, интерпретировано и принято;

• 3xx — перенаправление: необходимо выполнить дополнительные действия для удовлетворения запроса;

• 4xx — клиентская ошибка: запрос содержит ошибочный синтаксис или не может быть удовлетворен;

• 5xx — серверная ошибка: серверу не удалось выполнить запрос, который на первый взгляд был совершенно правильным.

В табл. 15.3 перечислены коды состояния, которые уже могли вам встречаться.


Таблица 15.3. Коды состояния HTTP
КодОписание

Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

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


Симуляция частичной специализации

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


Обработка событий в С++

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


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.