Created
October 25, 2020 14:49
-
-
Save reymons/99ea47b78d2007dc992931938a47cb5b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Сечин Данил, РИ-380014 | |
Работа с протоколом HTTP через telnet | |
ЗАДАНИЕ 1. | |
Создать проект со следующей структурой: | |
myproject/ | |
├── about | |
│ └── aboutme.html | |
└── index.html | |
В файле index.html написать 2 ссылки с прямым и абсолютным обращением к aboutme.html. | |
В файле aboutme.html создать такие же ссылки на файл index.html | |
1) Создаем ссылки в index.html: | |
<!Doctype HTML> | |
<html> | |
<head> | |
<meta charset="utf-8"> | |
</head> | |
<body> | |
<a href="/home/waffenbruder/Desktop/myproject/about/aboutme.html">About me - absolute route</a> | |
<br> | |
<a href="about/aboutme.html">About me - relative route</a> | |
</body> | |
<html> | |
2) Создаем ссылки в aboutme.html: | |
<!Doctype HTML> | |
<html> | |
<head> | |
<meta charset="utf-8"> | |
</head> | |
<body> | |
<a href="/home/waffenbruder/Desktop/myproject/index.html">Index - absolute route</a> | |
<br> | |
<a href="../index.html">Index - relative route</a> | |
</body> | |
<html> | |
ЗАДАНИЕ 2. | |
Подключиться по telnet к http://wikipedia.org и отправить запрос: | |
GET /wiki/страница HTTP/1.1 | |
Host: ru.wikipedia.org | |
User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5 | |
Accept: text/html | |
Connection: close | |
(пустая строка) | |
Проанализировать ответ сервера. Описать работу HTTP протокола в данном случае. | |
Разрешается выбрать любой другой веб-сайт вместо http://WikiPedia.org | |
Ответ: | |
1) Для работы, возьмем сайт opennet.ru. | |
После ввода telnet opennet.ru (доменное имя, можно ip) 80 (порт, стандарт HTTP), происходит подключение к сайту: | |
Trying 91.198.174.192... | |
Connected to opennet.ru. | |
Escape character is '^]'. | |
После чего уже отправляется сам запрос: | |
GET /wiki/страница HTTP/1.1 | |
Host: ru.wikipedia.org | |
User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5 | |
Accept: text/html | |
Connection: close | |
(пустая строка) | |
На выходе получаем HTML-разметку страницы, которая находится по пути opennet.ru/opennews/ | |
В конце ответа, после его получения, соединение закрывается (Connection closed by foreign host). | |
ЗАДАНИЕ 3. | |
Отправить запросы на http://httpbin.org, проанализировать ответ и код состояния. | |
Описать работу HTTP протокола в каждом запросе. | |
1. Запросить данные GET запросом с ресурса ip | |
/ip | |
GET /ip HTTP/1.1 | |
Host: httpbin.org | |
Accept: */* | |
Решение: | |
После ввода telnet httpbin.org 80, вбиваем запрос: | |
GET /ip HTTP/1.1 | |
Host: httpbin.org | |
Accept: */* | |
Выходит ответ: | |
HTTP/1.1 200 OK | |
Date: Sun, 25 Oct 2020 13:19:08 GMT | |
Content-Type: application/json | |
Content-Length: 33 | |
Connection: keep-alive | |
Server: gunicorn/19.9.0 | |
Access-Control-Allow-Origin: * | |
Access-Control-Allow-Credentials: true | |
{ | |
"origin": "82.193.155.227" | |
} | |
Где: | |
1. HTTP/1.1 200 OK означает, что по всерсии HTTP 1.1 произошел успешный запрос (200 ОК); | |
2. Date: Sun, 25 Oct 2020 13:19:08 GMT - дата и время ответа; | |
3. Content-Type: application/json - передаваемый файл будет json-формата; | |
4. Content-Length: 33 - размер ответа. Равен 33; | |
5. Connection: keep-alive - keep-alive параметр означанет, что по TCP-соединению может проходить сразу несколько запросов; | |
6. Server: gunicorn/19.9.0 - сервер, на котором запущен сайт | |
7. Access-Control-Allow-Origin: * - казывает на то, что сервер разрешает кросс-доменные запросы, или какие домены могут обращаться к ресурсам сайта. | |
В данном случае все. Следующий заголовок указывает, что подобное разрешение необходимо. | |
8. После пустой строки идёт сам ответ, где отображён ip сайта, который можно получить, перейдя по пути httpbin.org/ip | |
2. Выполнить запрос методом GET | |
/get | |
GET /get?foo=bar&1=2&2/0&error=True HTTP/1.1 | |
Host: httpbin.org | |
Accept: */* | |
Решение: | |
После ввода telnet httpbin.org 80, вбиваем запрос: | |
GET /get?foo=bar&1=2&2/0&error=True HTTP/1.1 | |
Host: httpbin.org | |
Accept: */* | |
Получаем ответ: | |
HTTP/1.1 200 OK | |
Date: Sun, 25 Oct 2020 13:32:00 GMT | |
Content-Type: application/json | |
Content-Length: 323 | |
Connection: keep-alive | |
Server: gunicorn/19.9.0 | |
Access-Control-Allow-Origin: * | |
Access-Control-Allow-Credentials: true | |
{ | |
"args": { | |
"1": "2", | |
"2/0": "", | |
"error": "True", | |
"foo": "bar" | |
}, | |
"headers": { | |
"Accept": "*/*", | |
"Host": "httpbin.org", | |
"X-Amzn-Trace-Id": "Root=1-5f957e50-1a04b6d61cb922e24ec8a239" | |
}, | |
"origin": "82.193.155.227", | |
"url": "http://httpbin.org/get?foo=bar&1=2&2%2F0&error=True" | |
} | |
Сервер получает параметры и значения, собирая в пары json. | |
3. Выполнить запрос методом POST | |
/post | |
POST /post HTTP/1.1 | |
Host: httpbin.org | |
Accept: */* | |
Content-Length: вычислить длину контента и втавить сюда число!!! | |
Content-Type: application/x-www-form-urlencoded | |
foo=bar&1=2&2%2F0=&error=True | |
Попробовать ввести неверное значение Content-Length. | |
Решение: | |
Длина строки foo=bar&1=2&2%2F0=&error=True равна 29 символам | |
Вводя запрос, получим ответ: | |
HTTP/1.1 200 OK | |
Date: Sun, 25 Oct 2020 13:48:42 GMT | |
Content-Type: application/json | |
Content-Length: 445 | |
Connection: keep-alive | |
Server: gunicorn/19.9.0 | |
Access-Control-Allow-Origin: * | |
Access-Control-Allow-Credentials: true | |
{ | |
"args": {}, | |
"data": "", | |
"files": {}, | |
"form": { | |
"1": "2", | |
"2/0": "", | |
"error": "True", | |
"foo": "bar" | |
}, | |
"headers": { | |
"Accept": "*/*", | |
"Content-Length": "29", | |
"Content-Type": "application/x-www-form-urlencoded", | |
"Host": "httpbin.org", | |
"X-Amzn-Trace-Id": "Root=1-5f958235-6c59042b1b9390cb32fb07a8" | |
}, | |
"json": null, | |
"origin": "82.193.155.227", | |
"url": "http://httpbin.org/post" | |
} | |
Запрос прошёл успешно (200 ОК), данные записались. | |
Если укзать длинну меньше, чем 29, то путь обрежется по длине. | |
Допустим, возьмем число 5, тогда останется foo=b и ответ будет: | |
"args": {}, | |
"data": "", | |
"files": {}, | |
"form": { | |
"foo": "b" | |
А дальше возникает ошибка, так как серверу непонятно, что за данные мы передали после 5 символов. | |
HTTP/1.1 400 Bad Request | |
Server: awselb/2.0 | |
Date: Sun, 25 Oct 2020 14:37:46 GMT | |
Content-Type: text/html | |
Content-Length: 122 | |
Connection: close | |
4. Отправить запрос на установку Cookie | |
/cookies/set | |
GET /cookies/set?country=Ru HTTP/1.1 | |
Host: httpbin.org | |
Accept: */* | |
Ответ: | |
HTTP/1.1 302 FOUND | |
Date: Sun, 25 Oct 2020 14:39:58 GMT | |
Content-Type: text/html; charset=utf-8 | |
Content-Length: 223 | |
Connection: keep-alive | |
Server: gunicorn/19.9.0 | |
Location: /cookies | |
Set-Cookie: country=Ru; Path=/ | |
Access-Control-Allow-Origin: * | |
Access-Control-Allow-Credentials: true | |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> | |
<title>Redirecting...</title> | |
<h1>Redirecting...</h1> | |
<p>You should be redirected automatically to target URL: <a href="/cookies">/cookies</a>. If not click the link. | |
Код 302 означает, что запрошенный ресурс был временно перемещен по адресу, указанному в заголовке Location, где мы задали | |
определенные параметры, указанные в Set-Cookie. | |
5. Просмотреть список установленных Cookie | |
/cookies | |
GET /cookies HTTP/1.1 | |
Host: httpbin.org | |
Accept: */* | |
Ответ: | |
HTTP/1.1 200 OK | |
Date: Sun, 25 Oct 2020 14:43:52 GMT | |
Content-Type: application/json | |
Content-Length: 20 | |
Connection: keep-alive | |
Server: gunicorn/19.9.0 | |
Access-Control-Allow-Origin: * | |
Access-Control-Allow-Credentials: true | |
{ | |
"cookies": {} | |
} | |
Запрос успешен, но куки не установились на прошлом шаге, возможно, дело в перенаправлении. | |
Например, в браузере куки сохраняются при таких же запросах. | |
После данно запроса, так как указан set, то нас бы перенаправило на /cookies, где был бы установлен Ru регион. | |
6. Отправить запрос на страницу с перенаправлением | |
/redirect | |
GET /redirect/4 HTTP/1.1 | |
Host: httpbin.org | |
Accept: */* | |
Ответ: | |
HTTP/1.1 404 Not Found | |
Server: awselb/2.0 | |
Date: Sun, 25 Oct 2020 14:47:38 GMT | |
Content-Type: text/plain; charset=utf-8 | |
Content-Length: 0 | |
Connection: keep-alive | |
Код 404 - ошибка, сервис не найден. | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment