— Привіт, Аміго!

— Привіт, Білаабо!

Що нового розкажеш сьогодні?

— Багато всього. Але почати думаю з роботи з мережею та інтернетом. Цікаво?

— Ага. Галактичний Інтернет – це крута річ.

— Ось, але почнемо з історії. На початку 21 століття справи були таким чином…

У кожного комп'ютера, підключеного до інтернету, є його унікальний номер. Як номер використовується звичайне чотирибайтове число. Такий номер прийнято називати IP-адресою. Але, т.к. пам'ять у людей погана і їм складно запам'ятати щось типу 2108458776, вони часто записують його байти окремо. Якщо розбити чотирибайтове число 2108458776 на окремі байти, то вийде таке число «125.172.135. Кожен байт, як ти пам'ятаєш, складається з 8 бітів і може містити числа від 0 до 255.

— Тобто. це той самий запис числа?

— Так. Просто легша для запам'ятовування (у людей) форма запису чотирибайтового числа. До речі, ідея вибрати всього 4 байти незабаром зіграла з ними злий жарт. Кількість пристроїв, підключених до інтернету, зросла так швидко, що незабаром вільні номери закінчилися.

— І як вони вийшли із цієї ситуації?

— По-людськи. Хе-хе.

Вони придумали новий стандарт IP-адреси, гордо названий IP v6 – IP-address version 6.

У ньому, на відміну від звичайної IP-адреси (яку називають IP v4), для унікального номера використовуються на 4 байти, а 16.

Ти тільки подумай, люди не могли запам'ятати 10 цифр у звичайному номері (як 2108458776), для чого їм довелося розбити на 4 частини, а тут вигадали номери, що складаються з 16 байт.

— Так, іноді люди такі дивні.

— Ага. Люди вони і є люди.

Хоча вони викрутилися і з цієї ситуації.

Їм набридло запам'ятовувати цифри, і вони вирішили замінити їх словами.

— Це як це? А чи можна приклад?

Звичайно: web.mail.com, google.com .ua, new.books.amazon.com, …

Таке ім'я називається доменом.< /p>

Для того щоб такий інтернет працював правильно, була придумана спеціальна таблиця – DNS (Domain Name System), в якій для кожного доменного імені зберігалася його IP-адреса.

Ось як це працює.

1) Користувач вводить у браузері адресу, наприклад, web.mail.com.

2) Браузер звертається до DNS і по доменному імені отримує IP-адресу.

3) За цією IP-адресою надсилається запит, що містить потрібне посилання (URL).

— Виглядає не дуже просто.

— Але такий підхід має і кілька переваг:

1) Люди легко запам'ятовують словесні імена.

2) Доменні імена можна будувати у вигляді дерева, додаючи на початку імені піддомени. Точнісінько, як package в Java.

3) Якщо треба змінити IP-адресу веб-сервера, то достатньо поміняти запис в DNS , і все буде працювати як раніше, а користувачам не доведеться вивчати нову адресу.

Виглядає ця DNS приблизно так:

Domain Name IP-Address
mail.com 128.35.36.189
web.mail.com 145.12.17.13
new.mail.com 192.155.15.3
google.com 92.117.151.100
google .com.ua 193.168.0.1
docs.google.com 217.12.222.1

— ; Зрозуміло.

— Ну, домен - це ім'я комп'ютера, але нам потрібен не комп'ютер, а те, що в ньому лежить. Для цього використовують посилання (URL)

Спочатку URL фактично являв собою посилання на файл на чужому комп'ютері. Приклад:

Приклад
http://info.javarush.com/user/info/profile.html
Опис
http – це протокол – стандарт спілкування клієнта та сервера
info.javarush.com – доменне ім'я комп'ютера.< br /> user/info/profile.html – це шлях до файлу на комп'ютері

На самому початку розвитку мережі web-сервер умів тільки віддавати файли за урлом (посиланням), які у нього десь зберігалися. URL фактично був глобальним шляхом до файлу (ім'я комп'ютера + шлях). Потім, коли веб-сервера почали самі генерувати файли, що віддаються, сенс урла трохи змінився, і він став запитом до web-сервера . До нього також додалися параметри запити.

Сьогодні вже рідко побачиш розширення файлу в кінці URL. Сучасні URL – це просто деяке унікальне посилання з параметрами. Більше схоже на виклик методу, а не на глобальну адресу файлу.

Сучасний класичний Url виглядає так:

Розбір посилання
http://javarush .com/alpha/api/contacts?userid=13&filter=none&page=3
Опис частин посилання
javarush.com – це домен — унікальне ім'я (адреса) комп'ютера в інтернеті
http — це протокол (стандарт) взаємодії клієнта та сервера. веб-сторінки на сервері
userid=13 & filter=none & page=3 – параметри запиту

— Ага, пам'ятаю. Нещодавно ти вже розповідав мені про посилання.

І про порти теж. На прикладі багатоквартирного будинку.

Краще розкажи мені, що таке http. Бо скрізь написано – протокол, а що це таке – не ясно.

— Ок. Зараз розкажу. id="b9c0d4a4-fd9c-4886-9c1e-3ba127af71ee" data-max-width="1024" alt="IP-address, domain, URL - 1" src="https://cdn.javarush.com/images/ article/b9c0d4a4-fd9c-4886-9c1e-3ba127af71ee/original.jpeg">

HTTP – це HyperTextTransport< span class="text-red">Protocol – протокол для передачі гіпертексту.

— А що таке гіпертекст?

— Це HTML.

Протокол, це грубо кажучи, стандарт взаємодії. У ньому описано, які запити можна надсилати веб-серверу і в якому форматі, і як цей веб-сервер повинен відповідати. Між клієнтом та сервером пересилаються звичайні текстові файли, ну, або якщо хочеш – великі шматки тексту.

До сервера надходить запит (request< /strong>), і на кожен запит сервер віддає відповідь (response).

Ось приклади таких запиту та відповіді:

Запит (Request)
GET alpha/api/contacts HTTP/1.1 Host: javarush.com User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5 Accept: text/ html Connection: close
Опис
GET – підтип запиту alpha/api/contacts – запит до веб -серверу HTTP/1.1 – версія протоколу – HTTP/1.1 Host: javarush.com – доменне ім'я User-Agent: Mozilla/ 5… – унікальне ім'я браузера Accept: text/html – тип запитуваного документа: HTML Connection: close – закрити з'єднання сервером після обробки запиту.

Перший рядок – це фактично запит. Потім йдуть додаткові параметри запиту, так звані заголовки запиту (Headers).

А ось і приклад відповіді:

Відповідь (Response)
HTTP/1.1 200 OK Date: Wed, 11 Feb 2009 11:20:59 GMT Server: Apache X-Powered-By: PHP/5.2.4-2ubuntu5wm1 Last-Modified: Wed, 11 Feb 2009 11:20:59 GMT Content-Language: uk Content-Type: text/html; charset=utf-8 Content-Length: 1234 Connection: close <html><body><a href="http://ample.com/about .html#contacts">Click here</a></body></html> 
HTTP/1.1 200 OK - Відповідь «200 ОК» - все добре. Date: Wed, 11 Feb 2009 - Дата обробки запиту Server: Apache - Ім'я веб-сервера X-Powered-By: PHP  - Сервер працює на мові PHP Last-Modified: Wed, 11 Feb 2009 - Час останнього оновлення запитуваного файлу Content-Language: ru - Мова файлу Content-Type: text/html; charset=utf-8 – Відповідь – це HTML-файл у UTF-8 кодуванні Content-Length: 1234 - Довжина відповіді – 1234 байти Connection: close - З'єднання буде закрито після обробки запиту <html><body><a href="http://ample - Сам HTML-файл.

Хочу звернути твою увагу на дві речі:

По-перше, що б ти не просив, для сервера це виглядає як запит файлу . Неважливо, чи є такий файл на сервері або він його сам генерує у відповідь на запит.

По-друге, сам файл-відповідь< /span> передається як частина відповіді протоколу HTTP. Тобто. спочатку у відповіді сервера ми бачимо якісь додаткові дані, а потім просто пішло тіло файлу, який віддає сервер.

— Як цікаво. Не впевнений, що все зрозумів. Потім перечитаю ще раз.

— Ну і ще хочу розповісти тобі про одну маленьку, але цікаву річ – Cookie.

— Що це ще таке?

Відповідно до протоколу HTTP, Cookie - це маленькі шматочки інформації, які сервер відправляє клієнту, щоб той зберігав їх у себе . І за наступних запитів передавав їх назад до сервера.

— Це ще навіщо?

— Наприклад, користувач авторизувався на головній сторінці сайту, тоді сервер створює об'єкт сесії на сервері для цього користувача, а унікальний номер цієї сесії передає клієнту як Cookie. При наступному запиті від клієнта до сервера, цей номер сесії разом з іншими Cookie знову буде відправлений на сервер. Таким чином, сервер дізнається користувача, який надіслав йому новий запит.

— Як цікаво.

— Коли ти будеш писати свої сервлети, ми познайомимося з цією темою ближче, а зараз давай зробимо перерву.

— Як скажеш.