Метод OPTIONS выполняет запрос информации об опциях соединения, которые поддерживает сервер для запрашиваемого ресурса. Этот метод позволяет клиенту определять опции и/или требования, связанные с ресурсом, или возможности сервера, но не производя никаких действий над ресурсом и не инициируя его загрузку.
Если ответ сервера – это не сообщение об ошибке, то заголовки объекта содержат информацию, которую можно рассматривать как опции соединения. Например, в заголовке Allow перечислены все методы, поддерживаемые сервером для данного ресурса.
Ответы на этот метод не кэшируются.
Коды ответа:
- https://www.apple.com: 200 OK
200 OK — успешный запрос. Если клиентом были запрошены какие-либо данные, то они находятся в заголовке и/или теле сообщения.
- http://mail.ru: 400 Bad Request
400 Bad Request — сервер обнаружил в запросе клиента синтаксическую ошибку.
- http://ya.ru: 403 Forbidden
- https://www.rambler.ru: 403 Forbidden
403 Forbidden — сервер понял запрос, но он отказывается его выполнять из-за ограничений в доступе для клиента к указанному ресурсу. Иными словами, клиент не уполномочен совершать операции с запрошенным ресурсом.
- https://github.com: 404 Not Found
404 Not Found — самая распространённая ошибка при пользовании Интернетом, основная причина — ошибка в написании адреса Web-страницы. Сервер понял запрос, но не нашёл соответствующего ресурса по указанному URL.
- https://www.google.com: 405 Method Not Allowed
405 Method Not Allowed — указанный клиентом метод нельзя применить к текущему ресурсу. В ответе сервер должен указать доступные методы в заголовке Allow, разделив их запятой.
Allow: GET, HEAD
Правильно обработал запрос только сайт www.apple.com. Он вернул следующие данные:
Allow: GET, HEAD, POST, OPTIONS
Метод HEAD идентичен GET, за исключением того, что сервер не возвращает в ответе тело сообщения. Информация, содержащаяся в HTTP заголовках ответа на запрос HEAD, идентична информации, представляемой в ответ на запрос GET для того же ресурса. Запрос HEAD обычно применяется для извлечения метаданных, проверки наличия ресурса (валидация URL) и чтобы узнать, не изменился ли он с момента последнего обращения.
Коды ответа:
- https://www.apple.com: 200 OK
- https://www.msn.com: 302 Found
302 Found — запрошенный документ временно доступен по другому URI, указанному в заголовке в поле Location
status: 302
location: https://www.msn.com/ru-ru/
- https://vk.com: 501 Not Implemented
501 Not Implemented — сервер не поддерживает возможностей, необходимых для обработки запроса. Типичный ответ для случаев, когда сервер не понимает указанный в запросе метод.
Сайт www.apple.com прислал ответ:
Server: Apache
X-Frame-Options: SAMEORIGIN
X-Xss-Protection: 1; mode=block
Accept-Ranges: bytes
X-Content-Type-Options: nosniff
Content-Type: text/html; charset=UTF-8
Vary: Accept-Encoding
Content-Encoding: gzip
Cache-Control:
max-age=2m 44s
Expires: Wed, 28 Nov 2018 04:14:14 GMT+2m 25s
Date: Wed, 28 Nov 2018 04:11:30 GMT-19s
Content-Length: 7 kilobytes
Connection: keep-alive
Метод GET позволяет получать любую информацию, связанную с запрашиваемым ресурсом. В большинстве случаев, если идентификатор запрашиваемого ресурса указывает на документ (например, документ HTML, текстовый документ, графическое изображение, видеоролик), то сервер возвращает содержимое этого документа (содержимое файла). Если запрашиваемый ресурс является приложением (программой), формирующим в процессе своей работы некоторые данные, то в теле сообщения ответа возвращаются эти данные, а не двоичный образ выполняемого файла. Если идентификатор запрашиваемого ресурса указывает на директорию (каталог, папку), то, в зависимости от настроек сервера, может быть возвращено либо содержимое директории (список файлов), либо содержимое одного из файлов, находящегося в этой директории (как правило, index.html или Default.htm).
Коды ответа:
- https://yandex.ru: 200 OK
- https://www.apple.com: 200 OK
- https://www.google.com: 200 OK
В теле ответа содержится содержимое документа HTML.
Метод POST используется для запроса, при котором адресуемый сервер принимает данные, включенные в тело сообщения запроса, и отправляет их на обработку приложению, указанному как запрашиваемый ресурс. При результате выполнения 200 (OK) в тело ответа следует включить сообщение об итоге выполнения запроса. Если был создан ресурс, то серверу следует вернуть ответ 201 (Created) с указанием URI нового ресурса в заголовке Location.
Коды ответа:
- https://www.google.com: 405 Method Not Allowed
- https://yandex.ru: 403 Forbidden
- https://www.apple.com: 200 OK
Без ошибок запрос обработал только www.apple.com. В теле ответа содержится содержимое документа HTML.
Чтобы обратиться к методу API ВКонтакте, необходимо выполнить POST или GET запрос такого вида: https://api.vk.com/method/METHOD_NAME?PARAMETERS&access_token=ACCESS_TOKEN&v=V , где :
- METHOD_NAME (обязательно) — название метода API, к которому требуется обращение.
- PARAMETERS (опционально) — входные параметры соответствующего метода API, последовательность пар name=value, разделенных амперсандом.
- ACCESS_TOKEN (обязательно) — ключ доступа.
- V (обязательно) — используемая версия API. На текущий момент актуальная версия API — 5.92.
С помощью метода database.getUniversities был получен список высших учебных заведений в Москве, в названии которых присутвуют слова "МГТУ им Баумана".
Сформированный запрос: https://api.vk.com/method/database.getUniversities?q=МГТУ%20им%20Баумана&country_id=1&city_id=1&access_token=ACCESS_TOKEN&v=5.92
Тело ответа состоит из объекта в формате Json, содержащего число результатов в поле count и массива объектов, описывающих университеты, в поле items:
{
"response": {
"count": 2,
"items": [
{
"id": 250,
"title": "МГТУ им. Н. Э. Баумана"
},
{
"id": 169759,
"title": "ИСОТ МГТУ им. Баумана (бывш. МИПК МГТУ им. Баумана)"
}
]
}
}
Таким образом, МГТУ им.Н.Э.Баумана имеет id 250. С помощью метода database.getFaculties по id вуза можно получить список его факультетов. Для этого был сформирован следующий запрос: https://api.vk.com/method/database.getFaculties?university_id=250&access_token=ACCESS_TOKEN&v=5.92
Тело ответа состоит из объекта, содержащего число результатов в поле count, и массива объектов, описывающих факультеты, в поле items:
{
"response": {
"count": 20,
"items": [
{
"id": 1031,
"title": "Аэрокосмический факультет"
},
{
"id": 1032,
"title": "Факультет инженерного бизнеса и менеджмента"
},
{
"id": 1033,
"title": "Факультет информатики и систем управления"
},
{
"id": 1034,
"title": "Факультет машиностроительных технологий"
},
{
"id": 1035,
"title": "Факультет оптико-электронного приборостроения"
},
{
"id": 1036,
"title": "Приборостроительный факультет"
},
{
"id": 1037,
"title": "Радиотехнический факультет"
},
{
"id": 1038,
"title": "Факультет радиоэлектроники и лазерной техники"
},
{
"id": 1039,
"title": "Факультет ракетно-космической техники"
},
{
"id": 1040,
"title": "Факультет робототехники и комплексной автоматизации"
},
{
"id": 1041,
"title": "Факультет специального машиностроения"
},
{
"id": 1042,
"title": "Факультет фундаментальных наук"
},
{
"id": 1043,
"title": "Факультет энергомашиностроения"
},
{
"id": 1044,
"title": "Кафедра юриспруденции, интеллектуальной собственности и судебной экспертизы"
},
{
"id": 1803,
"title": "Факультет биомедицинской техники"
},
{
"id": 1804,
"title": "Факультет социально-гуманитарных наук"
},
{
"id": 56430,
"title": "Факультет лингвистики"
},
{
"id": 56431,
"title": "Физкультурно-оздоровительный факультет"
},
{
"id": 2071503,
"title": "Головной учебно-исследовательский и методический центр (ГУИМЦ)"
},
{
"id": 2183736,
"title": "Факультет военного обучения (Военный институт)"
}
]
}
}
Для получения информации о пользователях используется метод users.get. Он принимает параметр fields, задающий список дополнительных полей профилей, которые необходимо вернуть. Для получения аватарки текущего пользователя (своей аватарки) был сформирован запрос: https://api.vk.com/method/users.get?fields=photo_max_orig&access_token=ACCESS_TOKEN&v=5.92
Тело ответа содержит массив объектов пользователей:
{
"response":[
{
"id": 32766100,
"first_name": "Иван",
"last_name": "Мурашов",
"is_closed": true,
"can_access_closed": true,
"photo_max_orig": "https://pp.userapi.com/c851324/v851324240/3a17b/MuC43KZrUJM.jpg?ava=1"
}
]
}
Во всех случаях от api присылался код ответа 200 OK. На запросы отвечал веб-сервер nginx. Данные приходили в формате json и в кодировке utf-8. Использовалась версия протокола HTTP/1.1.
https://api.vk.com/method/wall.post?owner_id=32766100&message=Привет&access_token=ACCESS_TOKEN&v=5.92 После выполнения запроса был получен ответ, содержащий id новой записи в поле post_id:
{
"response":{
"post_id": 848
}
}
В POST-запросах данные от пользователя к серверу передаются в теле сообщения.
С использованием фреймворка NodeJS + express было реализовано серверное приложение. Данные хранятся в RAM в виде массива. Каждая запись имеет поля: id, text
Результат запроса OPTIONS по URL http://localhost:3000/tasks :
Allow: GET,HEAD,POST
Прочитать все записи можно с помощью GET-запроса по URL http://localhost:3000/tasks. Пример ответа:
[
{
"id": "0",
"text": "Very important task"
},
{
"id": "1",
"text": "Much more important task"
}
]
Используя POST-запрос по URL http://localhost:3000/tasks, можно добавить запись. При этом в тело запроса нужно передать параметр value. В теле ответа в формате json отобразится добавленная запись:
[
{
"id": "2",
"text" :"Most important task"
}
]
Запрос по URL http://localhost:3000/tasks/id=:id, где id передается как параметр, вернет запись с запрошенным id в формате json или будет выведена ошибка, что записи с таким id нет.
Изменение записей происходит с помощью PUT-запроса по URL http://localhost:3000/tasks/id=:id. В теле ответа вернется обновленная запись. Если записи с указанным id не было найдено, будет создана новая.
Удалить запись можно DELETE-запросом либо по id, либо по значению value:
- По id: http://localhost:3000/tasks/id=:id
- По значению: http://localhost:3000/tasks/value=:value.
В теле ответа вернется результирующий массив в формате json или сообщение об ошибке, если записи с таким id или value нет.
Добавлена папка static, в ней созданы папки html и img. В папке html созданы файлы index.html и hach.txt.
Результат GET-запроса по URL http://localhost:3000/
<html>
<head></head>
<body>
<h1>Привет, мир!</h1>
<img width="600" src="/img/img.jpg"></a>
</body>
</html>
Результат GET-запроса по URL http://localhost:3000/hack
<html>
<head></head>
<body>
<h1>HACKHACKHACK</h1>
</body>
</html>
Если переименовать файл hack.html в nor.txt, браузер отобразит на странице теги html в текстовом виде. Чтобы страница отображалась корректно, нужно в поле 'Content-Type' заголовка ответа установить значение 'text\html'.