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

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

:

>$ curl — v — X GET http://www.apress.com/java?limit=all&mode=list

>> GET /java?limit=all&mode=list HTTP/1.1

>> User-Agent: curl/7.23.1 (x86_64-apple-darwin11.2.0) libcurl/7.23.1 zlib/1.2.5

>> Host: www.apress.com

>> Accept: */*

В этом запросе присутствует несколько информационных фрагментов, отсылаемых с клиента на сервер:

• HTTP-метод, в данном случае GET;

• путь, в данном случае /java?limit=all&mode=list;

• другие заголовки запроса (User-Agent).

Обратите внимание: в этом запросе отсутствует тело сообщения. На самом деле запросы GET в принципе не имеют такого тела. На вышеуказанный запрос сервер выдаст следующий ответ:

>< HTTP/1.1 200 OK

>< Date: Sat, 17 Nov 2012 17:42:15 GMT

>< Server: Apache/2.2.3 (Red Hat)

>< X-Powered-By: PHP/5.2.17

>< Vary: Accept-Encoding,User-Agent

>< Transfer-Encoding: chunked

>< Content-Type: text/html; charset=UTF-8

>

>

>··

>··</code></p><p><code>>··…</code></p><p>В состав этого ответа входит следующая информация:</p><p>• код отклика — в данном случае 200-OK;</p><p>• несколько заголовков отклика — в предыдущем коде содержатся заголовки отклика Date, Server, Content-Type. В данном случае тип содержимого — text/html, но это может быть и информация в других форматах, например в XML (application/xml) или в форматах изображений (image/jpeg);</p><p>• тело объекта или представление — содержимым возвращенной веб-страницы в данном примере является тело объекта (здесь я продемонстрировал фрагмент HTML-страницы).</p><br><div class="cite"><div class="subtitle h5">Примечание</div><p>cURL (<a href="http://curl.haxx.se/"target="_blank">http://curl.haxx.se</a>/) — это инструмент командной строки для передачи файлов с помощью URL-синтаксиса по различным протоколам — в частности, HTTP, FTP, SFTP, SCP и др. С ее помощью можно отправлять HTTP-команды, изменять HTTP-заголовки и т. д. Этот инструмент очень удобен для имитации пользовательских действий в браузере.</p></div><br><div class="subtitle h5">Заголовки</div><p>Поля HTTP-заголовков — это компоненты заголовка сообщения, содержащиеся в запросах и ответах. Файлы заголовков состоят из разделенных двоеточиями пар «имя/значение», которые записываются обычным текстом, завершаются переходом на новую строку и последовательностью символов перехода на новую строку. Основной набор таких полей стандартизирован организацией IETF и должен быть внедрен во всех реализациях, соответствующих протоколу HTTP. Но при необходимости в каждом приложении могут определяться и дополнительные имена полей. В табл. 15.2 приведено несколько распространенных заголовочных значений, которые могут встретиться вам в запросе или ответе.</p><br><div class="subtitle h5"><b>Таблица 15.2.</b> Распространенные значения заголовков</div><table><tr align="left"><th align="center"valign="top"><b>Имя заголовка</b></th><th align="center"valign="top"><b>Описание</b></th></tr><tr align="left"><td align="left"valign="top">Accept</td><td align="left"valign="top">Допустимые типы содержимого (например, text/plain)</td></tr><tr align="left"><td align="left"valign="top">Accept-Charset</td><td align="left"valign="top">Допустимые наборы символов (например, utf-8)</td></tr><tr align="left"><td align="left"valign="top">Accept-Encoding</td><td align="left"valign="top">Допустимые варианты кодировки (например, gzip, deflate)</td></tr><tr align="left"><td align="left"valign="top">Accept-Language</td><td align="left"valign="top">Допустимый язык отклика (en-US)</td></tr><tr align="left"><td align="left"valign="top">Cookie</td><td align="left"valign="top">Файл HTTP-cookie, ранее отосланный сервером</td></tr><tr align="left"><td align="left"valign="top">Content-Length</td><td align="left"valign="top">Длина тела запроса в байтах</td></tr><tr align="left"><td align="left"valign="top">Content-Type</td><td align="left"valign="top">MIME-тип тела запроса (например, text/xml)</td></tr><tr align="left"><td align="left"valign="top">Date</td><td align="left"valign="top">Дата и время отправки сообщения</td></tr><tr align="left"><td align="left"valign="top">ETag</td><td align="left"valign="top">Идентификатор конкретной версии ресурса (например, 8af7ad3082f20958)</td></tr><tr align="left"><td align="left"valign="top">If-Match</td><td align="left"valign="top">Действие производится лишь в том случае, если клиент предоставил объект, совпадающий с таким же объектом на сервере</td></tr><tr align="left"><td align="left"valign="top">If-Modified-Since</td><td align="left"valign="top">Допускает возврат кода состояния 304 — Не изменялось, если контент не изменялся с указанной даты</td></tr><tr align="left"><td align="left"valign="top">User-Agent</td><td align="left"valign="top">Строка, соответствующая пользовательскому агенту (например, Mozilla/5.0)</td></tr></table><br><div class="subtitle h5">HTTP-методы</div><p>Сеть состоит из четко идентифицированных ресурсов, связанных друг с другом и доступных благодаря простым HTTP-запросам. Основными стандартизированными типами HTTP-запросов являются GET, POST, PUT, DELETE. Они также именуются операциями, командами или методами. HTTP определяет и другие, реже используемые, методы: HEAD, TRACE, OPTIONS, CONNECT.</p><p>• GET — это обычная операция считывания, которая запрашивает представление ресурса. Операция GET должна реализовываться безопасным образом, то есть не изменять состояние ресурса. Кроме того, запрос GET должен быть идемпотентным. Это означает, что он должен оставлять ресурс в одном и том же состоянии, независимо от того, сколько раз он вызывался: единожды, дважды или больше. Безопасность и идемпотентность обеспечивают значительную стабильность. Когда клиент не получает ответа (например, из-за отказа сети), он может обновить свои запросы, и эти новые запросы будут ожидать того же ответа, который был бы получен при первой попытке, если бы все пошло нормально. При этом состояние ресурса на сервере не повреждается.</p><p>• Если вызвать метод POST, имея определенное представление (текст, XML и т. д.), то будет создан новый ресурс, идентифицируемый по URI, заявленному в запросе. Например, POST может вызываться при прикреплении сообщения к файлу журнала, записи комментария в блог, занесении книги в список и т. д. Следовательно, метод POST не является ни безопасным (состояние ресурса изменяется), ни идемпотентным (при двукратной отправке этого запроса мы получим два новых подчиненных объекта). Если ресурс был создан на исходном сервере, то в ответ должен быть получен код состояния 201 — Создан. В большинстве браузеров генерируются лишь два вида запросов — GET и POST.</p></div></div></div> <div class="show-more show-more_reader text-center my-4"> <a class="btn btn-primary" href="/chi/izuchaem-java-ee-7-gonsalves?p=237" > Продолжить чтение </a> </div> </section> <section> <div class="pagination-container"> <nav> <ul class="pagination"> <li class="page-item"> <a class="page-link" href="/k/izuchaem-java-ee-7-gonsalves#tx">1</a> </li> <li class="page-item disabled"> <span class="page-link">…</span> </li> <li class="page-item"> <a class="page-link" href="/chi/izuchaem-java-ee-7-gonsalves?p=234#tx">234</a> </li> <li class="page-item"> <a class="page-link" href="/chi/izuchaem-java-ee-7-gonsalves?p=235#tx">235</a> </li> <li class="page-item active"> <span class="page-link">236</span> </li> <li class="page-item"> <a class="page-link" href="/chi/izuchaem-java-ee-7-gonsalves?p=237#tx">237</a> </li> <li class="page-item"> <a class="page-link" href="/chi/izuchaem-java-ee-7-gonsalves?p=238#tx">238</a> </li> <li class="page-item disabled"> <span class="page-link">…</span> </li> </ul> </nav> </div> </section> <hr class="w-100"> </div> <section> <div class="h2 text-break">Рекомендуем почитать </div> <div class="container"> <div class="row"> <div class="col-12 book-card d-flex flex-column flex-md-row "> <a class="card__img-link book-card__img-link text-center mr-3" href="/k/pro-git-chakon" > <img class="card__img book-card__img book-img img img-fluid lazyload" width="200" height="300" data-src="/storage/book-covers/ff/ff65f929c8afbcca6ea8a9f79f058bb6eb190f59.jpg" alt="Pro Git" > <div class="lazy__img-spinner" style="width: 200px; height: 300px;" ></div> </a> <div class="book-card__meta"> <div> <a class="text-dark book-card__author" href="/a/skott-chakon" > Скотт Чакон </a> </div> <div> <a href="/k/pro-git-chakon"><b>Pro Git</b></a> </div> <div class="book-card__description"> <p>Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.</p> </div> </div> </div> <hr class="w-100"> <div class="col-12 book-card d-flex flex-column flex-md-row "> <a class="card__img-link book-card__img-link text-center mr-3" href="/k/java-7-habibullin" > <img class="card__img book-card__img book-img img img-fluid lazyload" width="200" height="300" data-src="/storage/book-covers/0c/0c854895249b5022dc4112a36f32ee3e02d18559.jpg" alt="Java 7" > <div class="lazy__img-spinner" style="width: 200px; height: 300px;" ></div> </a> <div class="book-card__meta"> <div> <a class="text-dark book-card__author" href="/a/ildar-shaukatovich-habibullin" > Ильдар Хабибуллин </a> </div> <div> <a href="/k/java-7-habibullin"><b>Java 7</b></a> </div> <div class="book-card__description"> <p>Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.</p> </div> </div> </div> <hr class="w-100"> <div class="col-12 book-card d-flex flex-column flex-md-row "> <a class="card__img-link book-card__img-link text-center mr-3" href="/k/mfc-i-opengl-avtor" > <img class="card__img book-card__img book-img img img-fluid lazyload" width="200" height="300" data-src="/build/oblozhka.dc6e36b8.jpg" alt="MFC и OpenGL" > </a> <div class="book-card__meta"> <div> <a class="text-dark book-card__author" href="/a/neizvestnyy-avtor" > Неизвестный Автор </a> </div> <div> <a href="/k/mfc-i-opengl-avtor"><b>MFC и OpenGL</b></a> </div> <div class="book-card__description"> <p> В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность. </p> </div> </div> </div> <hr class="w-100"> <div class="col-12 book-card d-flex flex-column flex-md-row "> <a class="card__img-link book-card__img-link text-center mr-3" href="/k/simulyaciya-chastichnoy-specializacii-kuznecov" > <img class="card__img book-card__img book-img img img-fluid lazyload" width="200" height="300" data-src="/storage/book-covers/7e/7e33d937f206a76edb7f45006e896cc191605df5.jpg" alt="Симуляция частичной специализации" > <div class="lazy__img-spinner" style="width: 200px; height: 300px;" ></div> </a> <div class="book-card__meta"> <div> <a class="text-dark book-card__author" href="/a/p-kuznecov" > П Кузнецов </a> </div> <div> <a href="/k/simulyaciya-chastichnoy-specializacii-kuznecov"><b>Симуляция частичной специализации</b></a> </div> <div class="book-card__description"> <p> В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность. </p> </div> </div> </div> <hr class="w-100"> <div class="col-12 book-card d-flex flex-column flex-md-row "> <a class="card__img-link book-card__img-link text-center mr-3" href="/k/obrabotka-sobytiy-v-s-klyuev" > <img class="card__img book-card__img book-img img img-fluid lazyload" width="200" height="300" data-src="/build/oblozhka.dc6e36b8.jpg" alt="Обработка событий в С++" > </a> <div class="book-card__meta"> <div> <a class="text-dark book-card__author" href="/a/aleksandr-klyuev" > Александр Клюев </a> </div> <div> <a href="/k/obrabotka-sobytiy-v-s-klyuev"><b>Обработка событий в С++</b></a> </div> <div class="book-card__description"> <p> В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность. </p> </div> </div> </div> <hr class="w-100"> <div class="col-12 book-card d-flex flex-column flex-md-row "> <a class="card__img-link book-card__img-link text-center mr-3" href="/k/piton-moduli-pakety-klassy-ekzemplyary-broytman" > <img class="card__img book-card__img book-img img img-fluid lazyload" width="200" height="300" data-src="/build/oblozhka.dc6e36b8.jpg" alt="Питон — модули, пакеты, классы, экземпляры" > </a> <div class="book-card__meta"> <div> <a class="text-dark book-card__author" href="/a/oleg-broytman" > Олег Бройтман </a> </div> <div> <a href="/k/piton-moduli-pakety-klassy-ekzemplyary-broytman"><b>Питон — модули, пакеты, классы, экземпляры</b></a> </div> <div class="book-card__description"> <p>Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.</p> </div> </div> </div> <hr class="w-100"> </div> </div> </section> </main> </div> <script type="text/template" id="counter"> (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; m[i].l=1*new Date(); for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }} k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)}) (window, document, "script", "https://cdn.jsdelivr.net/npm/yandex-metrica-watch/tag.js", "ym"); ym(92475221, "init", { clickmap:true, trackLinks:true, accurateTrackBounce:true }); </script> <script> var commonTargetUrl = '632=p?sevlasnog-7-ee-avaj-meahcuzi/tatihc/ten.vkubrim//:sptth'; </script> <script src="/build/runtime.5332280c.js" defer></script><script src="/build/site.2f232b70.js" defer></script> </div> <div class="modal fade" id="cookieModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="exampleModalLabel">Добро пожаловать</h5> </div> <div class="modal-body"> Наш сайт использует куки для сбора анонимной статистики. </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal">Отказаться</button> <button type="button" class="btn btn-primary" data-dismiss="modal">Согласиться</button> </div> </div> </div> </div> </body> </html>