Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

raw-http-server

HTTP/1.1-сервер «з нуля» поверх TCP — без фреймворків і без модулів http/https. Сирі байти приймаються з сокета, request-line та заголовки розбираються вручну, відповідь формується як валідний HTTP/1.1-текст. HTTPS-варіант робить те саме поверх TLS і переюзає той самий обробник запиту.

Вимоги

  • Node.js (LTS)
  • openssl (для генерації self-signed сертифіката)

Запуск

Плейн HTTP-сервер (порт 3000):

node src/server.js

Перевірка:

curl -sv http://localhost:3000/           # HTTP/1.1 200 OK, Content-Type: text/plain
curl -s  http://localhost:3000/headers -H "X-Demo: abc"   # розпарсені заголовки
curl -s -o /dev/null -w "%{http_code}\n" http://localhost:3000/nope   # 404

HTTPS-сервер (порт 3443):

node src/https-server.js

Перевірка (-k — бо сертифікат самопідписаний):

curl -sk -o /dev/null -w "%{http_code}\n" https://localhost:3443/   # 200

Генерація self-signed сертифіката

Файли cert.pem та key.pem не закомічені (див. .gitignore) — згенеруй їх локально:

openssl req -x509 -newkey rsa:2048 -nodes \
  -keyout key.pem -out cert.pem \
  -days 365 -subj "/CN=localhost"

src/https-server.js читає ці два файли через fs під час старту.

Debug-сесія: openssl s_client

Команда для перевірки TLS-рукостискання й ланцюжка сертифікатів:

openssl s_client -connect localhost:3443
CONNECTED(00000003)
Can't use SSL_get_servername
depth=0 CN = localhost
verify error:num=18:self-signed certificate
verify return:1
depth=0 CN = localhost
verify return:1
---
Certificate chain
 0 s:CN = localhost
   i:CN = localhost
---
subject=CN = localhost
issuer=CN = localhost
---
SSL handshake has read 1359 bytes and written 373 bytes
Verification error: self-signed certificate
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Verify return code: 18 (self-signed certificate)

Пояснення. Рядок verify error:num=18:self-signed certificate означає код 18 — сертифікат підписав сам себе, тобто у ланцюжку немає довіреного центру сертифікації (CA), який би його засвідчив; для самопідписаного серта це очікувано, і саме тому curl запускаємо з прапорцем -k (не перевіряти сертифікат).

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages