• Програмування
  • На початку кожного семестру студенти магістерської програми кафедри МіІТ Академічного університету (СПб) та представники компаній-партнерів збираються разом. Представники розповідають про проекти, над якими можна буде працювати, а студенти обирають їх.

    В одному з проектів, зроблених у Parallels Labs, наш студент досліджував можливість реалізації віртуального Hardware Security Module (HSM). В результаті він додав свою реалізацію VHSM в open-source проект OpenVZ. Докладніше про його рішення читайте під катом.

    Що таке HSM

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

    Щоб почати використовувати HSM, користувач повинен автентифікувати себе. Якщо аутентифікація виконується через додаток-клієнт HSM, що працює в уразливій частині системи, то можливе перехоплення пароля HSM зловмисником. Перехоплений пароль дасть змогу зловмиснику використовувати HSM без отримання секретних даних, що зберігаються в ньому. Таким чином, аутентифікацію бажано виконувати в обхід вразливої ​​частини системи, наприклад, за допомогою фізичного введення PIN.

    Основним бар'єром у використанні HSM є їхня висока вартість. Залежно від класу пристрою ціна може змінюватись від 10$ (USB токени, smart карти) до 30000+$ (пристрої з апаратним прискоренням криптографії, захистом від злому, high availability функціями). Провайдери cloud рішень не залишили поза увагою ринок HSM. Наприклад, Amazon продає свій хмарний HSM за середньою ціною 1373 $ на місяць.

    Однією з основних особливостей HSM є ізоляція вразливої ​​частини системи, що використовує криптографічні послуги, від HSM, що виконує ці послуги. Зауважимо, що окремі інстанси (віртуальні машини, контейнери і т.д.) у хмарі ізольовані один від одного, тому якщо винести функції HSM за межі вразливого інстансу в інший ізольований від зовнішнього світу інстанс, то досить точно відтворимо функціональність фізичного HSM. Такий підхід ми назвали Virtual HSM (VHSM). Розглянемо як він був реалізований нашим студентом для проекту OpenVZ.

    Що таке OpenVZ

    OpenVZ - це одна з технологій для запуску безлічі ізольованих ОС Linux на одному ядрі Linux. При цьому кажуть, кожна ОС Linux працює в окремому контейнері. Якщо сильно спрощувати, то фактично в ядро ​​Linux вбудована функціональність, яка дозволяє ізолювати додатки, приписані різним контейнерам так, щоб вони не підозрювали існування один одного. Програми не можуть змінити контейнер. Для кращої ізоляції та безпеки комунікацію між додатками з різних контейнерів за допомогою засобів IPC заборонено. Зазвичай вона здійснюється за допомогою мережевих з'єднань. У результаті ми бачимо схожість контейнерів із “звичайними” віртуальними машинами. OpenVZ та технології на її основі популярні у хостинг провайдерів для створення VPS. В Академічному університеті вже робилися проекти, пов'язані із контейнерною віртуалізацією. Наприклад. Parallels – головний розробник OpenVZ. Цілком закономірною стала реалізація VHSM саме для OpenVZ.

    Архітектура Virtual HSM

    • Client VE – контейнер OpenVZ, у якому виконуються користувацькі додатки, що вимагають своєї роботи криптографічні сервіси, такі як шифрування, підпис тощо. Контейнер доступний для віддалених атак для крадіжки цифрових ключів.
    • VHSM virtual environment (VHSM VE) - контейнер OpenVZ, у якому запущений VHSM server – демон, який приймає команди від додатків у Client VE і виконує їх. Жодних інших програм у VHSM VE не запущено. VHSM VE ізольований від звичайних користувальницьких контейнерів за допомогою OpenVZ. У контейнера немає мережевих інтерфейсів і він не доступний через мережу.
    • Transport – модуль ядра Linux, призначений передачі повідомлень з Client VE в VHSM VE і назад.
    • VHSM API – бібліотека, що реалізує частину стандартного для HSM інтерфейсу PKCS #11, що передає команди додатків із ClientVE у VHSM server за допомогою transport, і повертає результат виконання команди додатку до ClientVE.
    Розглянь кожний компонент докладніше.

    VHSM virtual environment

    Сервер VHSM відповідає за автентифікацію користувачів, взаємодію із сховищем секретних даних та виконання криптографічних операцій. Крім сервера VHSM, VHSM VE містить Secure Storage – базу даних, що зберігає важливу інформацію у зашифрованому вигляді. Кожен користувач VHSM має свій майстер ключ, яким шифруються його дані. Майстер ключ генерується з пароля користувача за допомогою функції PBKDF2. Сіль, що передається їй на вхід, зберігається в незашифрованому вигляді в базі даних. Таким чином, VHSM не зберігає майстер ключа користувача в БД, а використання PBKDF2 істотно знижує швидкість перебору вихідного пароля користувача при крадіжці БД.

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

    VHSM вимагає явного вибору контейнерів, з яких конкретний користувач може працювати з VHSM. Інформація про контейнер, з якого отримано команду користувача, надається OpenVZ.

    VHSM API

    Це C-бібліотека, що знаходиться в контейнерах користувача і реалізує частина стандартного для HSM інтерфейсу PKCS#11, що дозволяє керувати ключами, даними, сесіями, цифровим підписом, шифруванням і т.д. Розглянемо конкретний приклад використання VHSM API:
    1. Додатку в контейнері необхідно підписати повідомлення, що надсилається.
    2. За допомогою VHSM API програма генерує пару відкритий-закритий ключ, отримує ID закритого ключа та відкритий ключ.
    3. Програма передає повідомлення VHSM API для підписування закритим ключем з потрібним ID. VHSM API повертає підписане повідомлення.
    4. Підписане повідомлення та відкритий ключ надсилаються одержувачу повідомлення. При цьому закритий ключ не доступний для клієнтського контейнера.
    У клієнтській частині проекту також були реалізовані OpenSSL engine та PAM-модуль, що дозволяють працювати з VHSM у існуючих програмах, що використовують OpenSSL та PAM. Однак, ця частина проекту слабо опрацьована і є скоріше proof of concept.

    VHSM Transport

    Як було сказано вище, програми, що виконуються в різних контейнерах, не можуть взаємодіяти один з одним за допомогою механізмів IPC Linux. Тому для транспортування повідомлень від клієнтів до сервера і назад був реалізований свій модуль ядра Linux, що завантажується. Модуль запускає Netlink-сервер у ядрі, а VHSM-клієнти та VHSM-сервер з'єднуються з ним. Netlink-сервер відповідає за передачу повідомлень від джерела (клієнта VHSM) до приймача (сервера VHSM) та назад. Попутно до повідомлень додається ID контейнера джерела повідомлення, щоб, наприклад, сервер міг відхилити запити від контейнерів, у тому числі конкретному користувачеві заборонено використовувати VHSM.

    Висновок

    Основною метою створення VHSM було виключення можливості крадіжки секретних ключів з пам'яті користувацьких додатків, що працюють у контейнері користувача. Цю мету було досягнуто, т.к. секретні дані доступні лише ізольованому контейнері (VHSM VE). Ізоляція реалізується OpenVZ.

    Витік БД з VHSM VE призведе до негайної втрати секретних даних, т.к. вони зберігаються у зашифрованому вигляді. Ключ шифрування не зберігається в БД, а генерується з пароля користувача, що передається за його аутентифікації.
    Як і будь-яка технологія захисту інформації, наведене рішення є ще одним бар'єром на шляху зловмисника і не забезпечує повного захисту інформації.

    Багато хто чув про поняття URL адреси, але мало хто знає, навіщо він потрібен і що собою являє.

    Тому було б корисно розібрати кілька питань, пов'язаних з темою URL-адреса – що це таке, де використовується, яка структура та інші цікаві моменти.

    Насправді якщо ви хоч раз у житті заходили в інтернет, значить, користувалися URL адресою. Все набагато простіше, ніж здається на перший погляд.

    Загальна інформація

    URL-адреса – це адреса будь-якого ресурсу в інтернеті.

    Під поняттям «ресурс» у минулому реченні мається на увазі сайт, зображення, документ або ще щось, що тільки може знаходитися в інтернеті на якомусь віддаленому сервері.

    Існує також chrome, який діє подібним чином. Все ж таки найчастіше ми, звичайні користувачі, використовуємо звичайнісінький http.

    Розробники користуються ftp та подібними до нього спеціалізованими протоколами.

    Тепер перейдемо безпосередньо, наприклад. Візьмемо одну із статей на цьому сайті та посилання на неї – (до речі, дуже непогана стаття).

    Так от, як бачимо, тут все відповідає описане вище структурі.

    Параметр<способ>тут http, після нього йде стандартна конструкція «://».

    Все, що стосується хоста – логін та пароль – звичайному користувачеві не видно. І після «/» йде безпосередньо адреса потрібної статті, це вже параметр<путь>.

    Жодних додаткових параметрів тут немає.

    Ось так, власне, і виглядає будь-яка URL-адреса у світі.

    Як дізнатися URL

    Цікаво, що багато хто не знає, де взяти цю саму URL адресу. Звичайно, якщо йдеться про сайт, то його можна переглянути в адресному рядку.

    Наприклад візьмемо ту саму описану вище статтю.

    На малюнку №2 показано розташування її адреси у браузері.

    Варто зазначити, що у браузері зазвичай не вказується параметр<способ>із вищевказаної структури.

    Як бачимо, і малюнку №2 поруч із початком адреси немає напису «http». Це цілком нормально. Зазвичай цей параметр стає видно вже після копіювання цієї адреси в буфер.

    До речі, копіювання тут відбувається цілком стандартним способом - натисканням клавіш Ctrl + C .

    Другий спосіб полягає в тому, щоб виділити відповідний текст, натиснути на нього правою кнопкою миші і в меню вибрати пункт «Копіювати», як це показано на малюнку №3.

    Але, як ми говорили вище, URL-адреса є не тільки у цілих сайтів, а й у окремих файлів, таких як зображення та документи.

    Щоб дізнатися їх URL, теж можна натиснути на відповідний файл, наприклад, картинку, правою кнопкою миші та в меню вибрати пункт "Копіювати адресу зображення", як це показано на малюнку №4.

    Якщо йдеться про документ, на нього теж завжди можна клікнути правою кнопкою миші, після чого побачити меню, що випадає, і в ньому вибрати пункт «Копіювати адресу посилання», як це показано на малюнку №5.

    Увага:У наведених вище малюнках показано меню, що випадає в браузері Opera. Залежно від браузера, зовнішній вигляд цього меню може змінюватися. Але назви потрібних нам пунктів завжди залишаються незмінними.

    Власне, це і є спосіб дізнатися адресу того чи іншого ресурсу.

    Як бачимо, наприкінці знаходиться розширення файлу – .jpg. Після параметра<хост>тут після "/" йде багаторівнева адреса доступу до фотографії.

    Така адреса означає, що картинка під назвою «kak-v-vk-zakrepit-zapis-na-stene-%E2%84%9611-650×406.jpg» знаходиться на хості сайт у папці під назвою «wp-content», усередині якої знаходиться папка «uploads», усередині неї «2016», а в ній ще й папка «03».

    У принципі, у цій адресі все ясно. Питання викликає лише ця конструкція: «%E2%84%9611». Це зашифрований фрагмент адреси.

    Отже, де взяти цю адресу сайту чи іншого ресурсу, ми вже розібралися. Але іноді при копіюванні, наприклад, ось такого: «https://ua.wikipedia.org/wiki/Смартфон» копіюється щось таке:

    • «https://ua.wikipedia.org/wiki/%D0%A1%D0%BC%D0%B0%D1%80%D1%82%D1%84%D0%BE%D0%BD» - це звичайнісіньке шифрування.

    Не заглиблюючись у надра пізнання цього світу, скажемо, що всі URL адреси записуються тільки за допомогою певного набору символів.

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

    Робиться це у два етапи:

    1. Кодування в Юнікод, на виході – послідовність із двох байтів.
    2. Кодування у шістнадцятковий код.

    У сучасних браузерах має місце спочатку кодування в Base58.

    Кожен байт поділяється знаком відсотка, тобто "%". Власне, цим і зумовлюється те, що ми бачимо вище.

    Сучасні браузери вже не дають користувачеві бачити посилання із шістнадцятковими цифрами.

    Тому якщо ви копіюєте посилання в нормальному вигляді, а отримуєте щось на кшталт «https://ua.wikipedia.org/wiki/%D0%A1%D0%BC%D0%B0%D1%80%D1%82%D1 %84%D0%BE%D0%BD», просто оновіть свій браузер!

    Історія

    Історія створення URL-адрес досить цікава.

    А торкнемося ми цю область для того, щоб краще розуміти, що являють собою дані конструкції і навіщо були створені.

    Хоча, з вищесказаного вже можна зрозуміти, що URL-адреса є адресою ресурсу в інтернеті, а створена вона була для того, щоб цей ресурс банально можна було в ньому знайти.

    Але цікаво, що вперше про URL заговорили у Женеві. А винахідником його вважається Тім Бернерс-Лі.

    Сталася ця подія в 1990 році - набагато пізніше, ніж могло б здатися на перший погляд.

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

    Поступово на зміну URL прийшов так званий URI. Згідно з підручником з мереж, ця конструкція теж є символьним визначенням ресурсу.

    У URL входить, по-перше, ім'я сайту, а по-друге, його розташування.

    Існує також URN – це або тільки адреса сайту/ресурсу, або його ім'я. URI поєднує в собі URL і URN.

    Винайдена була така конструкція того ж 1990 року, що і її прабатько, URL.

    Хоча завершення роботи над нею датується аж 1994 року. 1998 року вийшла нова версія URI.

    У 2002 році було повідомлено про те, що термін URL застарів і краще використовувати замість нього лише URI.

    Таким чином, найбільш використані методи позначення розташування файлів в інтернеті беруть свій початок в Женеві, а саме в Європейській раді з ядерних досліджень або просто CERN.

    Останнє більш відоме тим, хто хоч іноді дивиться новини.

    Перспективи

    У сучасного URL є величезна кількість недоліків, серед них:

    • Мала гнучкість;
    • Проблеми із шифруванням;
    • Вказівка ​​шляху на неіснуючі ресурси;
    • Нав'язування ресурсів ієрархічної структури (про це говорив сам автор URL);
    • Погана робота з гіпертекстової структури.

    З цих та інших причин було запропоновано абсолютно нову інтерпретацію URL під назвою PURL.

    У рамках цього стандарту використовуватиметься дещо інший підхід.

    Все буде засноване на існуванні бази даних PURL, в якій зберігатимуться всі імена та шляхи до ресурсів.

    Система регулярно перевірятиме ці ресурси і, при необхідності, видаляти або оновлювати посилання на них. Таким чином вдасться вирішити три з п'яти перерахованих вище проблем.

    Щодо решти фахівці поки що перебувають на стадії розробки їх рішень.

    Нижче можна бачити цікавий і цікавий ролик про інтернет в принципі.

    Його перегляд дозволить ще більше зрозуміти, що взагалі таке URL, і яке місце ця конструкція займає в роботі Всесвітньої павутини.

    Історія Інтернету

    URL-адреса сторінки сайту: Що це таке і де його взяти?

    HTTP – це протокол передачі гіпертексту між розподіленими системами. По суті http є фундаментальним елементом сучасного Web-а. Як поважають себе веб-розробники, ми повинні знати про нього якомога більше.

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

    Також у цій статті я буду в основному посилатися на стандарт RFC 2616: Hypertext Transfer Protocol - HTTP/1.1.

    Основи HTTP

    HTTP забезпечує спілкування між безліччю хостів та клієнтів, а також підтримує цілу низку мережевих налаштувань.

    В основному для спілкування використовується TCP/IP, але це не єдиний можливий варіант. За замовчуванням TCP/IP використовує порт 80, але можна заюзати й інші.

    Спілкування між хостом та клієнтом відбувається у два етапи: запит та відповідь. Клієнт формує HTTP запит, у відповідь який сервер дає відповідь (повідомлення). Трохи пізніше ми детальніше розглянемо цю схему роботи.

    Поточна версія протоколу HTTP - 1.1, де було введено деякі нові фішки. На мою думку, найважливіші з них це: підтримка постійно відкритого з'єднання, новий механізм передачі даних chunked transfer encoding, нові заголовки для кешування. Щось із цього ми розглянемо у другій частині цієї статті.

    URL

    Серцевиною веб-спілкування є запит, що надсилається через Єдиний покажчик ресурсів (URL). Я впевнений, що ви вже знаєте, що таке URL-адреса, проте для повноти картини, вирішив все-таки сказати пару слів. Структура URL дуже проста і складається з таких компонентів:

    Протокол може бути http для звичайних з'єднань, так і https для безпечнішого обміну даними. Порт за замовчуванням - 80. Далі слідує шлях до ресурсу на сервері і ланцюжок параметрів.

    Методи

    За допомогою URL ми визначаємо точну назву хоста, з яким хочемо спілкуватися, проте яку дію нам потрібно вчинити, можна повідомити тільки за допомогою HTTP методу. Звичайно, існує кілька видів дій, які ми можемо зробити. У HTTP реалізовані найпотрібніші, які підходять під потреби більшості додатків.

    Існуючі методи:

    GET: отримати доступ до наявного ресурсу В URL перерахована вся необхідна інформація, щоб сервер зміг знайти і повернути як відповідь шуканий ресурс.

    POST: використовується для створення нового ресурсу POST запит зазвичай містить у собі всю необхідну інформацію для створення нового ресурсу.

    PUT: оновлення поточного ресурсу. PUT запит містить оновлювані дані.

    DELETE: Видалення існуючого ресурсу.

    Дані методи найпопулярніші і найчастіше використовуються різними інструментами та фреймворками. У деяких випадках, PUT та DELETE запити надсилаються за допомогою відправки POST, у змісті якого зазначено дію, яку потрібно вчинити з ресурсом: створити, оновити чи видалити.

    Також HTTP підтримує інші методи:

    HEAD: аналогічний GET. Різниця в тому, що при цьому виді запиту не передається повідомлення. Сервер отримує лише заголовки. Використовується, наприклад, щоб визначити, чи було змінено ресурс.

    TRACE: під час передачі запит проходить через безліч точок доступу та проксі серверів, кожен із яких вносить свою інформацію: IP, DNS. За допомогою даного методу можна побачити всю проміжну інформацію.

    OPTIONS: використовується для визначення можливостей сервера, його параметрів та конфігурації для конкретного ресурсу.

    Коди стану

    У відповідь на запит від клієнта сервер відправляє відповідь, яка містить, у тому числі, і код стану. Цей код несе в собі особливий сенс для того, щоб клієнт міг чіткіше зрозуміти, як інтерпретувати відповідь:

    1xx: Інформаційні повідомлення

    Набір цих кодів було введено у HTTP/1.1. Сервер може надіслати запит виду: Expect: 100-continue, що означає, що клієнт ще відправляє частину запиту. Клієнти, що працюють з HTTP/1.0, ігнорують дані заголовки.

    2xx: Повідомлення про успіх

    Якщо клієнт отримав код із серії 2xx, то запит пішов успішно. Найпоширеніший варіант – це 200 OK. При запиті GET, сервер відправляє відповідь в тілі повідомлення. Також існують інші можливі відповіді:

    • 202 Accepted: запит прийнято, але може не містити ресурс у відповіді. Це корисно для асинхронних запитів на стороні сервера. Сервер визначає, надіслати ресурс чи ні.
    • 204 No Content: у тілі відповіді немає повідомлення.
    • 205 Reset Content: вказівка ​​серверу про скидання представлення документа
    • 206 Partial Content: відповідь містить лише частину контенту. У додаткових заголовках визначається загальна довжина контенту та інфа.

    3xx: Перенаправлення

    Своєрідне повідомлення клієнту про необхідність вчинити ще одну дію. Найпоширеніший варіант застосування: перенаправити клієнт на іншу адресу.

    • 301 Moved Permanently: ресурс тепер можна знайти за іншою URL-адресою.
    • 303 See Other: ресурс тимчасово можна знайти за іншою URL-адресою. Заголовок Location містить тимчасову URL-адресу.
    • 304 Відмінно: сервер визначає, що ресурс не змінено і клієнту потрібно задіяти закешированную версію відповіді. Для перевірки ідентичності інформації використовується ETag (хеш Сутності – Enttity Tag);

    4xx: Клієнтські помилки

    Цей клас повідомлень використовується сервером, якщо він вирішив, що запит було надіслано з помилкою. Найбільш поширений код: 404 Not Found. Це означає, що ресурс не знайдено на сервері. Інші можливі коди:

    • 400 Bad Request: питання було сформовано невірно
    • 401 Unauthorized: для запиту потрібна аутентифікація. Інформація передається через заголовок Authorization.
    • 403 Forbidden: сервер не відкрив доступ до ресурсу
    • 405 Method Not Allowed: неправильний метод HTTP був задіяний для того, щоб отримати доступ до ресурсу.
    • 409 Conflict: сервер неспроможна остаточно обробити запит, т.к. намагається змінити новішу версію ресурсу. Це часто відбувається при запитах PUT.

    5xx: Помилки сервера

    Ряд кодів, що використовуються визначення помилки сервера під час обробки запиту. Найпоширеніший: 500 Internal Server Error. Інші варіанти:

    • 501 Not Implemented: сервер не підтримує потрібну функціональність.
    • 503 Service Unavailable: це може статися, якщо на сервері сталася помилка або він перевантажений. Зазвичай у разі, сервер не відповідає, а час, дане відповідь, минає.

    Формати повідомлень запиту/відповіді

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

    Давайте подивимося на структуру повідомлення, що передається через HTTP:

    Message = *() CRLF [ ] = Request-Line | Status-Line = Field-Name ":" Field-Value

    Між заголовком і тілом повідомлення повинен обов'язково бути порожній рядок. Заголовків може бути декілька:

    Тіло відповіді може містити повну інформацію або її частину, якщо активовано відповідну можливість (Transfer-Encoding: chunked). HTTP/1.1 також підтримує заголовок Transfer-Encoding.

    Загальні заголовки

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

    General-header = Cache-Control | Connection | Date | Pragma | Trailer | Transfer-Encoding | Upgrade | Via | Warning

    Щось ми вже розглянули в цій статті, щось детальніше торкнемося в другій частині.

    Заголовок via використовується у запиті типу TRACE, та оновлюється всіма проксі-серверами.

    Заголовок Pragma використовується для перерахування власних заголовків. Наприклад, Pragma: no-cache - це те саме, що Cache-Control: no-cache. Докладніше про це поговоримо у другій частині.

    Заголовок Date використовується для зберігання дати та часу запиту/відповіді.

    Заголовок Upgrade використовується для зміни протоколу.

    Transfer-Encoding призначається поділу відповіді кілька фрагментів з допомогою Transfer-Encoding: chunked. Це новація версії HTTP/1.1.

    Заголовки сутностей

    У заголовках сутностей передається мета-інформація контенту:

    Entity-header = Allow | Content-Encoding | Content-Language | Content-Length | Content-Location | Content-MD5 | Content-Range | Content-Type | Expires | Last-Modified

    Всі заголовки з префіксом Content-надають інформацію про структуру, кодування та розмір тіла повідомлення.

    Заголовок Expires містить час і дату закінчення сутності. Значення “never expires” означає час + 1 код із поточного моменту. Last-Modified містить час та дату останньої зміни сутності.

    За допомогою даних заголовків можна задати потрібну для ваших завдань інформацію.

    Формат запиту

    Запит виглядає приблизно так:

    Request-Line = Метод SP URI SP HTTP-Version CRLF Метод = "OPTIONS" | "HEAD" | "GET" | "POST" | "PUT" | "DELETE" | "TRACE"

    SP – це роздільник між токенами. Версія HTTP вказується у HTTP-Version. Реальний запит має такий вигляд:

    GET /articles/http-basics HTTP/1.1 Host: www.articles.com Connection: keep-alive Cache-Control: no-cache Pragma: no-cache Accept: text/html,application/xhtml+xml,application/xml; q=0.9,*/*;q=0.8

    Список можливих заголовків запиту:

    Request-header = Accept | Accept-Charset | Accept-Encoding | Accept-Language | Authorization | Expect | від | Host | If-Match | If-Modified-Since | If-None-Match | If-Range | If-Unmodified-Since | Max-Forwards | Proxy-Authorization | Range | Referer | TE | User-Agent

    У заголовку Accept визначається типи, мова, кодування символів, що підтримуються mime. Заголовки From, Host, Referer та User-Agent містять інформацію про клієнта. Префікси If призначені для створення умов. Якщо умова не пройшла, виникне помилка 304 Not Modified.

    Формат відповіді

    Формат відповіді відрізняється лише статусом та низкою заголовків. Статус виглядає так:

    Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF

    • HTTP версія
    • Код статусу
    • Повідомлення статусу, зрозуміле для людини

    Звичайний статус виглядає приблизно так:

    HTTP/1.1 200 OK

    Заголовки відповіді можуть бути такими:

    Response-header = Accept-Ranges | Age | ETag | Location | Proxy-Authenticate | Retry-After | Server | Vary | WWW-Authenticate

    • Age час у секундах, коли повідомлення було створено на сервері.
    • ETag MD5 сутності для перевірки змін та модифікацій відповіді.
    • Location використовується для перенаправлення та містить нову URL-адресу.
    • Server визначає сервер, де було сформовано відповідь.

    Думаю, на сьогодні теорії достатньо. Тепер давайте поглянемо на інструменти, якими ми можемо скористатися для моніторингу HTTP повідомлень.

    Інструменти для визначення HTTP трафіку

    Існує безліч інструментів для моніторингу HTTP трафіку. Ось кілька із них:

    Найчастіше використовується - це Chrome Developers Tools:

    Якщо говорити про відладчика, можна скористатися Fiddler:

    Для відстеження HTTP трафіку вам знадобиться curl, tcpdump та tshark.

    Бібліотеки для роботи з HTTP - jQuery AJAX

    Оскільки jQuery дуже популярний, він також має інструментарій для обробки HTTP відповідей при AJAX запитах. Інформацію про jQuery.ajax(settings) можна знайти на офіційному сайті.

    Передаючи об'єкт налаштувань (settings), а також скориставшись функцією зворотного виклику beforeSend, ми можемо задати заголовки запиту за допомогою методу setRequestHeader().

    $.ajax(( url: "http://www.articles.com/latest", тип: "GET", beforeSend: function (jqXHR) ( jqXHR.setRequestHeader("Accepts-Language", "en-US,en "); )));

    Якщо хочете обробити статус запиту, це можна зробити так:

    $.ajax(( statusCode: ( 404: function() ( alert("page not found"); ) ) )));

    Підсумок

    Ось такий він, тур по основах протоколу HTTP. У другій частині буде ще більше цікавих фактів та прикладів.

    Запис (публікація, твіт тощо)у соціальній мережі - це повідомлення, яке публікується користувачем у своєму обліковому записі, сторінці або спільноті (групі). Кожен такий запис зазвичай доступний на окремій сторінці, яка має свою унікальну URL-адресу. У цій статті я хочу допомогти Вам розібратися, як отримати таку URL-адресу запису в соціальних мережах: Google+, Facebook, Вконтакте, Twitter та Мій Мир@Mail.ru

    URL-адреса запису в соцмережах

    Соціальна мережа (англ. social network) - це Інтернет ресурс, призначений для побудови, відображення та організації соціальних взаємин. Основою таких взаємин є спілкування, побудоване на обміні інформацією, що публікується у вигляді хронологічно впорядкованих записів. У більшості випадків, кожна з них має свою унікальну URL-адресу. Про те, як його отримати, читайте далі.

    Google+- проект соціальної мережі Google. Щоб отримати URL-адресу запису в Google+, можна скористатися функцією «Отримати посилання». Для цього знайдіть у стрічці цікавий для Вас запис і наведіть на неї курсор миші. У правому повернемо кутку запису, з'явиться іконка «Дії» (стела вниз) – клацніть її. У контекстному меню, що відкрилося, знайдіть і клікніть пункт « ».

    У вікні, що відкриється, вам буде надано посилання запису, просто скопіюйте його і натисніть кнопку « Готово».

    Facebook(Фейсбук) – одна з найбільших соціальних мереж у світі, заснована Марком Цукербергом та його сусідами по кімнаті під час навчання у Гарвадському університеті у 2004 році.

    Для цього знайдіть у стрічці запис, що Вас цікавить, і клацніть посилання «тимчасової мітки», яка знаходиться у верхньому лівому її кутку, поруч і ім'ям автора.

    Вам залишиться лише скопіювати отриману URL-адресу публікації з адресного рядка Вашого браузера.

    Примітка: у кожного типу публікації у Facebook є свій формат URL-адреси. Цікавим тут є динамічний варіант відображення фотографії у спливаючому вікні, що відбувається через наявність параметра theater в URL-адресі публікації.

    Для наочності, я хочу запропонувати до Вашої уваги відео «How to Get Facebook Post Url» від howtechweb. Воно трохи застаріло, але суть залишилася та сама.

    URL-адреса запису у ВКонтакті

    ВКонтакті(VK.com) – найбільша соціальна мережа в Європі, що належить Mail.Ru Group. У соціальній мережі ВКонтакте записи мають два варіанти URL-адреси - статичний (На окремій сторінці)і динамічний (У спливаючому вікні).

    Щоб отримати статичну URL-адресу запису на окремій сторінці, наведіть курсор на тимчасову позначку запису та клацніть праву кнопку миші. У контекстному меню, що відкрилося, клацніть пункт « Копіювати адресу посилання».

    URL матиме вигляд: http://vk.com/wall58447324_841

    Для отримання динамічної URL-адреси запису у спливаючому вікні, клацніть «Тимчасова позначка» (Дату публікації)записи на стіні, щоб запис відкрився у спливаючому вікні та скопіюйте URL-адресу запису з адресного рядка вашого браузера.

    Він матиме вигляд: http://vk.com/wmas.online?w=wall58447324_841

    Примітка: у ВКонтакті окрема URL-адреса має не тільки записи, але й прикріплені до них файли. Наприклад, клікнувши прикріплену до запису фотографію, воно відкриється у спливаючому вікні за динамічним посиланням виду: http://vk.com/wmas.online?z=photo58447324_346975387%2Falbum58447324_00%2 варіант URL-адреси: http://vk.com/photo58447324_346975387 - але теж у спливаючому вікні.

    Як отримати посилання на статус у Twitter?

    На сторінці, просто скопіюйте URL-адресу статусу з адресного рядка браузера і використовуйте її, наприклад.