1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wizardforcel-lmpythw-zh

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
ex52.md 9.4 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 06.03.2025 03:52 f9ec0dd

Упражнение 52: moreweb

Исходник: Упражнение 52: moreweb

Переводчик: Феликс Ли

Лицензия: CC BY-NC-SA 4.0

Гордо использует Google Translate

Теперь вы создали веб-сервер с использованием библиотеки Python http.server. Вы дошли до последнего проекта. Вы будете использовать всё, что узнали до этого момента, чтобы создать свой собственный веб-сервер с нуля. В упражнении 51 вы создали большую часть операций, которая находится "над" модулем http.server. Вы не занимались никакой сетевой связью или анализом протокола HTTP. В последнем упражнении вы будете копировать все действия, выполненные в http.server, и реализовывать все необходимые части для вашего сервера lessweb.

Часто задаваемые вопросы

Чтобы завершить это упражнение, вам потребуется прочитать документацию Python 3 asyncio модуля. Этот модуль предоставляет вам инструменты для работы с запросами через сокеты, создания серверов, ожидания сигналов и всего остального, что вам может понадобиться. Если вы хотите взяться за дополнительный вызов, то вы можете использовать Python 3 select модуль, который предоставляет более низкоуровневый API для работы со сокетами. Вам следует использовать эту документацию, чтобы создать ряд маленьких серверов и клиентов, работающих через сокеты.Как только вы поймёте, как создавать серверы и клиенты, которые работают через TCP/IP сокеты, вам придётся заняться обработкой HTTP запросов. Эта часть проекта будет очень сложной, так как стандарт HTTP сумасшедший и намного сложнее, чем требуется. Я начну с самого простого HTTP парсера, который вы сможете спроектировать, а затем буду расширять его по мере увеличения количества примеров. Первое место старта — RFC 7230, но будьте готовы столкнуться с одним из самых плохих написаний, которое люди когда-либо делали.Лучшим способом изучить RFC 7230 является первым извлечение всех грамматик, указанных в приложении "Обзор ABNF". На первый взгляд это кажется сумасшедшим, потому что это просто огромная грамматическая спецификация. Вы действительно уже научились читать такие вещи в пятой части этой книги, хотя они были меньше по размеру. Вы знаете, как работают регулярные выражения, сканеры и парсеры, и как читать такие грамматики. Все, что вам нужно сделать, это исследовать эту грамматику и реализовать её по частям. При реализации я полностью игнорирую любую "блочную" грамматику. Как только вы изучите этот синтаксис, вам следует начать писать парсер для HTTP, используя уже созданное вами. Используйте ваши данные структуры, парсинговые инструменты и любое другое необходимое, чтобы создать парсер для небольшого подмножества HTTP. Обрабатывайте как можно больше этого синтаксиса. Для помощи вам есть набор тестовых файлов, содержащих действительные HTTP-запросы; посетите https://learncodethehardway.org/more-python-book/http_tests.zip. Вы можете скачать этот набор тестовых примеров и запустить его через ваш парсер, чтобы убедиться, что он работает правильно. Я извлек многие из этих тестовых примеров из выдающегося сервера And-HTTP, а затем расширил их более простыми примерами. Ваша цель — сделать так, чтобы они прошли как можно большее количество тестов.Наконец, как только у вас будет способ написать хороший сервер сокетов asyncio или select, и способ парсинга HTTP, вы сможете объединить эти два подхода и создать свой первый полнофункциональный веб-сервер.

Разрушьте его

Вы должны попробовать сломать этот веб-сервер, но также стоит здесь экспериментировать с различными вещами. Вы уже создали парсер HTTP, попробуйте использовать парсер стиля RDP, чтобы наиболее эффективно обрабатывать действительные HTTP-запросы. Ваши парсеры имеют отличную возможность блокировать множество недействительных HTTP-запросов, поэтому найдите несколько старых атак и попробуйте их на своём веб-сервере. Есть несколько сайтов, где автоматизированные хакерские инструменты доступны для скачивания, поэтому получите один и направьте его на свой сервер. Но будьте осторожны и убедитесь, что вы запускаете известные тестовые инструменты и только на своём сервере.

Глубокое изучениеЕсли вы хотите полностью понять веб-серверы и технологии, используйте свой веб-сервер moreweb для создания веб-фреймворков. Я рекомендую сперва создать сайт, а затем извлекать нужные шаблоны из веб-фреймворка. Цель такого фреймворка заключается в том, чтобы упаковать использованные вами шаблоны, чтобы вы могли упрощать последующие веб-приложения. Как и в случае с практиками lessweb и moreweb, вашей целью должно быть исследование, реализация и использование общих методов защиты от атак веб-фреймворков.

Если вы хотите углубиться в TCP/IP, я рекомендую книгу Джона Снадера «Effective TCP/IP Programming». «Эффективное программирование TCP/IP» написана на C, но фактически это "костыльное" обучение TCP/IP, которое охватывает 44 темы и предоставляет простой код для понимания основ работы TCP/IP. Язык C — родной язык TCP/IP, поэтому использование сокетов в других языках может показаться странным до тех пор, пока вы не узнаете, как это реализовано на C. Изучив эту книгу, вы сможете лучше понять работу сервера сокетов. Единственное предупреждение заключается в том, что эта книга несколько устарела, так что код должен работать, но он может не быть самым современным.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/wizardforcel-lmpythw-zh.git
git@api.gitlife.ru:oschina-mirror/wizardforcel-lmpythw-zh.git
oschina-mirror
wizardforcel-lmpythw-zh
wizardforcel-lmpythw-zh
master