Всем привет! С вами Сам Самыч!
Сегодня вы узнаете:
1. Что такое http.server?
2. История http.server
3. Как пользоваться http.server?
4. Плюсы и минусы http.server'а.
"Глава 1 - Что такое http.server?"
Вот представьте: Вы хотите передать файл с компьютера на телефон, но при этом на компьютере нет ни мессенджеров, ни Bluetooth, за облако вы не платили, даже ИК светодиода нет.
"Что же делать?" - спросите вы.
"Создать HTTP сервер!" - отвечу я вам.
http.server - это встроенный модуль в Python, который создаёт локальный веб-сервер, и который был создан ещё в 2000-х.
А теперь по порядку:
Как это было: в 90-х и 2000-х были программы, которые могли создавать веб сервер или перекинуть файл, но при этом они были огромные в весе (по тем временам), многие платные и сложные в настройке. По этому обычным человекам и программистам было тяжело скачать файл с одного устройства на другое.
В чём суть: нужно было создать инструмент, который бы позволял скачать файл с одного устройства на другое, при этом чтобы инструмент этот был простой в использовании и маленьким по размеру.
Ещё в Python версиях 1.x и 2.x зародился данный модуль. Только... модуль этот был разделён. Например, BaseHTTPServer давал базовые классы для работы: HTTPServer, BaseHTTPRequestHandler и другие, SimpleHTTPServer предлагал передачу файлов из текущей директории.
Python 2.5 и 2.6 - добавлен заголовок 'Last-Modified' для улучшения кеширования и error_content_type для ответов с ошибками.
И тут 2008 год, и вместе с ним версия Python 3.0. 3 главных модуля были объединены в один - http.server. Это было ключевым моментов в истории данного модуля.
Последнее крупное обновление в Python 3.7 - добавлен класс ThreadingHTTPServer, который теперь позволяет работать в многопоточном режиме.
Итог: "http.server" - это Python модуль, который был создан для упрощения работы с серверами.
"Глава 2 - Почему этот модуль так популярен у всех разработчиков?"
Как я уже раньше говорил, данный Python модуль был создан для упрощения работы с передачей файлов. Но на самом деле, сейчас многие программисты используют его на постоянной основе. Например - я.
Я сам использую http.server для передачи файлов. Например, недавно скачал статью про C++ и перекинул другу — без Bluetooth и мессенджеров. Даже без ИК светодиодов!
Но это уже для отдельного видео.
"Глава 3 - Как пользоваться http.server'ом?"
Самый первый шаг: есть ли у вас Python?
Если вы не знаете, кто такой Python и как его установить, читайте мою пятую статью: "Что такое Python и с чем его едят?".
Создать сервер на основе данного модуля Python легче, чем можно вообще представить!
Главное, определиться с путём:
1. Создание без боли, но базовый сервер;
2. Немного помучаться, но создать кастомный сервер.
Начнём с пути 1 - создание сервера без боли, но базового:
1. Открываем терминал (Windows - Win + R и вписать cmd; Linux - CTRL + ALT + T);
2. Переходим в каталог, из которого мы хотим запустить команду;
3. Вводим команду ниже.
Для Windows (3.x): "python -m http.server"
Linux (3.x): "python3 -m http.server
Linux (2.x/1.x)/Windows (2.x/1.x): "python -m SimpleHTTPServer"
По стандарту будет порт 8000, а IP сервера "0.0.0.0". Если мы хотим указать свой порт, но оставить стандартный IP, то в конце нужно добавить ваш порт.
Пример (Для Linux): "python3 -m http.server 8001"
Если мы хотим указать только свой IP, но при этом порт оставить, то нужно в конец добавить "--bind {ваш IP}".
Пример (для Linux): "python3 -m http.server --bind 192.168.1.100"
Если нужно создать сервер и на другом порту, и на другом IP, то нужно ввести "--bind {ваш IP} {ваш порт}".
Пример (для Linux): "python3 -m http.server --bind 192.168.1.100 8001"
Теперь путь 2 - создание сервера с мучениями, но кастомного.
Вот тут сложнее...
И как всегда, сначала создание и изменение проекта в Linux:
1. Открываем терминал;
2. Вводим команду "touch server.py";
3. Вводим ещё команду "nano server.py";
4. Вставляем код, который будет ниже;
5. Нажимаем CTRL + S для сохранения и CTRL + X для выхода.
Windows:
1. Открываем Python IDE;
2. Создаём новый проект (если не понимаете как, почитайте прошлую статью);
3. Вставляем код, который будет ниже;
4. Сохраняем с помощью CTRL + S.
Код:
```python
#Самый наипростейший сервер, аналог команды из пути 1
import http.server
import socketserver
PORT = 8000 # Здесь обязательно нужно указать порт
Handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print(f"Сервер запущен на порту {PORT}")
httpd.serve_forever()
```
Теперь надо запустить.
Linux: "python3 server.py"
Windows: Клавиша F5
Теперь для того, чтобы заглянуть на ваш сервер необходимо:
1. Открыть браузер;
2. Ввести порт вашего сервера, двоеточие и порт (пример: "http://0.0.0.0:8000").
Всё! Теперь вы можете скачать любой файл из той директории, которую вы указали (вы даже можете скачать файл из своего компьютера на своём компьютере, никто вам этого не запрещает).
ВАЖНО! Есть несколько моментов с этим сервером, но об этом я расскажу во главе 4.
"Глава 4 - Плюсы и минусы данного модуля"
Вот тут интересно.
Плюсы:
1. Легко создать сервер;
2. Легко программировать и настраивать сервер;
3. Удобный для разработки до 10 человек;
4. Локальный, никто не будет атаковать вас (а если хотите сделать публичный, нужно пробрасывать порты через настройку роутера).
Минусы:
1. Однопоточный (если вы не на Python 3.7 и выше, и если вы не используете ThreadingHTTPServer) (если зайдёт больше 10 человек за раз, сервер ляжет);
2. Локальный (нельзя сделать публичным, если не заморочиться );
3. При создании сервера с портом ниже (включая) 1024, нужны права администратора;
4. Нельзя сделать случайный адрес или красивый домен (нельзя: 123.213.94.30. my_server.ru и my_server).
Так что, делайте выводы, господа!
"Глава 5 - Что в итоге?"
За сегодня вы узнали:
1. Что такое http.server;
2. История http.server;
3. Как использовать этот модуль;
4. Плюсы и минусы модуля;
5. Почему http.server сейчас популярен среди разработчиков (спустя 20-30 лет).
Пишите в комментариях:
Какие ощущения у вас к использованию http.server?
А если ещё не пользовались, хотели бы вы?
Как думаете, какой метод лучше: создание одной командой, или целым кодом (я за одну команду);
На какие программы\модули Python вы хотели бы от меня разбора?
Я планирую сделать следующую статью про hardinfo2 (и какую оценку моему ноутбуку эта программа дала), тема в основном для Linux.
С вами был Сам Самыч, всем пока!