Skip to content

Instantly share code, notes, and snippets.

@georgiybykov
Last active April 4, 2020 02:30
Show Gist options
  • Save georgiybykov/bebc673c2ff20d3086bd892c6b7a48e6 to your computer and use it in GitHub Desktop.
Save georgiybykov/bebc673c2ff20d3086bd892c6b7a48e6 to your computer and use it in GitHub Desktop.
Задание к уроку "Архитектура клиент-сервер и HTTP-протокол"
1. Сформированные HTTP-запросы и полученные HTTP-ответы (URL: http://httpbin.org/anything):
> ncat -C httpbin.org 80
GET /anything HTTP/1.1
Host: httpbin.org
HTTP/1.1 200 OK
Date: Fri, 03 Apr 2020 18:36:02 GMT
Content-Type: application/json
Content-Length: 287
Connection: keep-alive
Server: gunicorn/19.9.0
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
{
"args": {},
"data": "",
"files": {},
"form": {},
"headers": {
"Host": "httpbin.org",
"X-Amzn-Trace-Id": "Root=1-5e878212-cf140a1034ffbb1fabc8812d"
},
"json": null,
"method": "GET",
"origin": "188.162.65.222",
"url": "http://httpbin.org/anything"
}
> ncat -C httpbin.org 80
GET /anything?first=1 HTTP/1.1
Host: httpbin.org
HTTP/1.1 200 OK
Date: Fri, 03 Apr 2020 18:38:47 GMT
Content-Type: application/json
Content-Length: 315
Connection: keep-alive
Server: gunicorn/19.9.0
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
{
"args": {
"first": "1"
},
"data": "",
"files": {},
"form": {},
"headers": {
"Host": "httpbin.org",
"X-Amzn-Trace-Id": "Root=1-5e8782b7-7731a3df3f39fe4eadacc8db"
},
"json": null,
"method": "GET",
"origin": "188.162.65.222",
"url": "http://httpbin.org/anything?first=1"
}
> ncat -C httpbin.org 80
POST /anything HTTP/1.1
Host: httpbin.org
Content-Length: 15
key1=value1&key2=value2
HTTP/1.1 200 OK
Date: Fri, 03 Apr 2020 18:41:23 GMT
Content-Type: application/json
Content-Length: 332
Connection: keep-alive
Server: gunicorn/19.9.0
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
{
"args": {},
"data": "key1=value1&key",
"files": {},
"form": {},
"headers": {
"Content-Length": "15",
"Host": "httpbin.org",
"X-Amzn-Trace-Id": "Root=1-5e878327-bc986721cff7b71dd2073cd4"
},
"json": null,
"method": "POST",
"origin": "188.162.65.222",
"url": "http://httpbin.org/anything"
}
HTTP/1.1 400 Bad Request
Server: awselb/2.0
Date: Fri, 03 Apr 2020 18:41:23 GMT
Content-Type: text/html
Content-Length: 138
Connection: close
<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
</body>
</html>
> ncat -C httpbin.org 80
OPTIONS /anything HTTP/1.1
Host: httpbin.org
HTTP/1.1 200 OK
Date: Fri, 03 Apr 2020 23:43:55 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 0
Connection: keep-alive
Server: gunicorn/19.9.0
Allow: DELETE, HEAD, GET, PATCH, POST, PUT, TRACE, OPTIONS
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, PATCH, OPTIONS
Access-Control-Max-Age: 3600
2. HTTP-методы для создания/получения/обновления/удаления ресурса:
POST -> создание ресурса;
GET/HEAD -> получить ресурс с сервера с телом ответа / ~ без тела ответа
PUT/PATCH -> обновить данные ресурса целиком / ~ только фрагменты данных
DELETE -> удалить ресурс
OPTIONS -> получить информацию о доступных действиях с ресурсом
CONNECT -> устанавливает "туннель" к серверу, определённому по ресурсу
(преобразование HTTP соединения в прозрачный TCP/IP туннель)
TRACE -> выполняет вызов возвращаемого тестового сообщения с ресурса
(применяется для диагностики и позволяет видеть клиенту,что происходит
в каждом звене цепочки между клиентом и конечным получателем)
3. Объясните в ответе на задание, что делают данные заголовки:
Accept -> Список допустимых форматов ресурса (запрос)
Connection -> Сведения о проведении соединения (запрос и ответ)
Content-Type -> Формат и способ представления сущности (запрос и ответ)
User-Agent -> Список названий и версий клиента и его компонентов с комментариями (запрос)
Content-Length -> Размер содержимого сущности в байтах (запрос и ответ)
Cache-Control -> Основные директивы для управления кэшированием (запрос и ответ)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment