Simple https server windows

Simple https server windows

A very simple, fast, multithreaded, platform independent HTTP and HTTPS server and client library implemented using C++11 and Asio (both Boost.Asio and standalone Asio can be used). Created to be an easy way to make REST resources available from C++ applications.

See https://gitlab.com/eidheim/Simple-WebSocket-Server for an easy way to make WebSocket/WebSocket Secure endpoints in C++. Also, feel free to check out the new C++ IDE supporting C++11/14/17: https://gitlab.com/cppit/jucipp.

  • Asynchronous request handling
  • Thread pool if needed
  • Platform independent
  • HTTPS support
  • HTTP persistent connection (for HTTP/1.1)
  • Client supports chunked transfer encoding
  • Timeouts, if any of Server::timeout_request and Server::timeout_content are >0 (default: Server::timeout_request=5 seconds, and Server::timeout_content=300 seconds)
  • Simple way to add REST resources using regex for path, and anonymous functions

See http_examples.cpp or https_examples.cpp for example usage.

See particularly the JSON-POST (using Boost.PropertyTree) and the GET /match/[number] examples, which are most relevant.

  • Boost.Asio or standalone Asio
  • Boost is required to compile the examples
  • For HTTPS: OpenSSL libraries

Compile and run

Compile with a C++11 compliant compiler:

Run the server and client examples: ./build/http_examples

Direct your favorite browser to for instance http://localhost:8080/

Before running the server, an RSA private key (server.key) and an SSL certificate (server.crt) must be created. Follow, for instance, the instructions given here (for a self-signed certificate): http://www.akadia.com/services/ssh_test_certificate.html

Run the server and client examples: ./build/https_examples

Best lightweight web server (only static content) for Windows [closed]

Want to improve this question? Update the question so it’s on-topic for Stack Overflow.

Closed 8 years ago .

I got application server running in Windows – IIS6.0 with Zend Server to execute PHP. I am looking for lightweight static content only web server on this same machine which will relive IIS form handling static content and increase performance.

It need to be only static content web server – maximum small and maximum effective – lighttpd seems too big because allow to FastCGI.

I am looking for: Windows, static content only, fast, and lightweight.

I am using Windows Server 2003.

8 Answers 8

  • single executable
  • very small memory footprint
  • allows multiple worker threads
  • easy to install as service
  • configurable with a configuration file if required

You can use Python as a quick way to host static content. On Windows, there are many options for running Python, I’ve personally used CygWin and ActivePython.

To use Python as a simple HTTP server just change your working directory to the folder with your static content and type python -m SimpleHTTPServer 8000 , everything in the directory will be available at http:/localhost:8000/

Python 3

To do this with Python, 3.4.1 (and probably other versions of Python 3), use the http.server module:

The smallest one I know is lighttpd.

Security, speed, compliance, and flexibility — all of these describe lighttpd (pron. lighty) which is rapidly redefining efficiency of a webserver; as it is designed and optimized for high performance environments. With a small memory footprint compared to other web-servers, effective management of the cpu-load, and advanced feature set (FastCGI, SCGI, Auth, Output-Compression, URL-Rewriting and many more) lighttpd is the perfect solution for every server that is suffering load problems. And best of all it’s Open Source licensed under the revised BSD license.

Edit: removed Windows version link, now a spam/malware plugin site.

Простой веб сервер для SPA/PWA за «5 минут»

Часто для разработки MPA/SPA/PWA приложений требуется простой веб-сервер. Однажды, на одном большом митинге в ответ на вопрос: «Что ты делал?», я сказал, что поднимал веб-сервер для хостинга PWA приложения. Мы все долго смеялись и да, кстати, PWA это не клей. Как SPA — это не косметический салон. Все это виды веб-приложений. А SSR это не страна :-). Если запустить такое приложение просто открыв стартовую страницу index.html через браузер, оно не будет работать как должно, в лучшем случае мы получим оффлайн версию. Я люблю язык JavaScript и буду решать проблему, используя только доступные мне средства, так сказать из «коробки».

  1. Если нет NodeJS качаем LTS, устанавливаем, настройки не меняем, жмем далее
  2. В нашем укромном местечке, где собраны все проекты, создаем папку simple-web-server
  3. В папке проекта выполним команду npm init —yes // без —yes инициализатор будет задавать много вопросов
  4. В файле package.json в секции scripts добавим свойство и его значение — «main»: «index.js» — так мы сможем быстро запустить наш сервер, используя команду npm run
  5. Создать папку lib В нее рекомендуется помещать весь свой код, который не требует сборки и доп действий для его работы
  6. Создадим в папке lib файл index.js Это наш будущий сервер
  7. Создадим папку dist — это будет папка в которой будут публично доступные файлы, в том числе index.html, другими словами статика, которую будет раздавать наш сервер
  8. Откроем файл /index.js
  9. Напишем немного кода
Читайте также:  Intel iris windows laptop

Итак, что мы знаем о том, что должен делать наш сервер?

  1. Обрабатывать запросы
  2. Читать файлы
  3. Отвечать на запрос содержимым файла

Для начала создадим наш сервер, в файле idex.js импортируем

Эта инструкция деструктуризирует объект модуля http и в идентификатор переменной createServer присваивает выражение — функцию createServer.

Создаем новый сервер, используя следующую инструкцию

При первом заходе на хост сервера браузер отправляет запрос для получения документа. Поэтому, для того чтобы обработать это событие, нам нужно прослушивать такие запросы. У созданного нами сервера есть метод listen в качестве параметра передадим номер порта 3000.

Выражением этого метода будет объект EventEmitter который будет сохранен в переменную с идентификатором eventsEmitter. Этот объект является наблюдаемым(Observable). Подпишемся на его события, используя вызов метода on/addEventListener с двумя обязательными параметрами string function. Первый параметр указывает на то, какие события нам интересны request второй — это функция, которая будет обрабатывать это событие.

Откроем в браузере ссылку

Итак, мы остановились на инструкции отладчика. Видим, что в качестве параметров мы получаем два объекта req,res Эти объекты являются экземплярами Объектов типа поток следовательно req — поток чтения, а res — поток записи.

Запрос мы обработали и можно сказать, что «дело в шляпе». Осталось всего ничего: прочитать и отдать в ответ файл. Для начала нужно понять, какой же файл нам нужен. В отладчике, изучив все свойства параметра req, я увидел, что есть у него свойство url. Но вот только в нем нет ничего похожего на index.html.

Посмотрим еще раз на наш браузер: видим, что мы явно не указали этого. Попробуем еще раз, но уже явно укажем index.html.

Теперь видно, что имя файла приходит в запросе в свойстве url и больше ничего кроме этого, чтобы прочитать файл нам от запроса не нужно. Деструктуризируем его, используя пару фигурных скобок, указываем имя свойства url и, через оператор :, задаем произвольное имя с помощью валидного идентификатора переменной, в моем случае requestUrl.

Отлично, что дальше? По правде говоря, мне не очень нравится тот факт, что нужно будет всегда явно указывать index.html, поэтому давайте сразу решим и эту проблему. Я решил, что самый простой способ сделать это — использовать стандартную функцию extname она входит в стандартную поставку
NodeJS модуля path импортируем ее, используя следующую инструкцию.

Теперь можно вызвать ее, передав в качестве параметра выражение идентификатора requestUrl и получить выражение строки примерного формата ‘.extension’ . Если в запросе явно не указан файл, то вернется пустая строка. Используя этот принцип, мы будем добавлять значение по умолчанию ‘index.html’. Запишем следующую инструкцию

Я уверен, что пользователь сервера захочет переопределить это имя и также завел переменную окружения, используя следующую инструкцию

Читайте также:  Обновить windows office 2013

в глобальной переменной process множество полезной информации я лишь буру ее часть, в частности свойство env оно содержит все свойства окружения пользователя и уже в ней будем искать DEFAULT_FILE_NAME в случае если пользователь ее не укажет — используем index.html по умолчанию.

ВАЖНО: если значение свойства окружения DEFAULT_FILE_NAME будет что угодно, кроме undefined, присваивание значения по умолчанию не сработает. Об этом стоит помнить, но не сейчас, мы делаем все по минимуму 🙂

Теперь, когда у нас есть относительная ссылка на файл, нам нужно получить абсолютный путь к файлу в файловой системе нашего сервера. Мы решили, что все публичные файлы будут храниться в папке dist поэтому, чтобы получить абсолюьный путь до файла, воспользуемся еще одной функцией resolve из уже знакомого нам модуля
path просто указываем ее в ранее созданной инструкции на 5 строчке

Дальше на 10 строчке запишем инструкцию, которая получит и сохранит в переменную filePath абсолютный путь Я также заранее «вангую», что имя этой папки можно переопределить для гибкости. Поэтому расширяю инструкцию на 6 строчке, добавляя имя
переменной окружения DIST_FOLDER!

Теперь все готово, чтобы читать файл. Можно файл читать по-разному Асинхронно, Синхронно, а можно использовать потоки. Я буду пользоваться потоками 🙂 это красиво и более эффективно, с точки зрения затрачиваемых ресурсов. Для начала, создадим тестовый файл в папке dist, чтобы было что читать 🙂

Теперь нам нужна функция, которая создаст поток чтения файла, она тоже входит в стандартную поставку NodeJS извлекаем ее из модуля fs используя следующую инструкцию

а на 12 строчке в теле обработчика запроса используем следующую инструкцию

в результате вернется экземпляр объект поток-чтения, используя его
функцию pipe мы можем переключить потоки чтения в поток записи, также потоки можно трансформировать и много чего полезного. Так параметр res это поток чтения, ведь так?

Попробуем сразу переключить созданный нами поток чтения файла в поток записи res для
этого на 12 строчке продолжаем инструкцию вызывая метод pipe, а в качестве параметра передаем наш поток записи res

Все? Неееет. А ошибки кто обрабатывать будет? Какие ошибки? Попробуем в файл index.html докинуть css файлик, а создавать его не будем и посмотрим что будет 🙂

Ожидаемо, но сервер упал! Это совсем не дело. Дело в том, что по умолчанию в потоках ошибки не отлавливаются и нужно делать это самим 🙂 createReadStream возвращает поток, в котором происходит ошибка. Поэтому добавим обработчик ошибки. Используя вызов методе on Указывая имя события error и обработчик — функцию. Она завершит поток чтения res с кодом ответа 404.

Другое дело. Кстати, сервер еще не готов и если мы попробуем открыть его в другом браузере, то страница будет работать не правильно 🙂 кто догадался, пожалуйста, пишите в комменты, что мы с вами забыли сделать? Дело в том, что когда сервер отвечает на запрос сервера файлом, для браузера не достаточно одного расширения чтобы понять какого типа этот файл и другие браузеры: ни хром или ни более старые версии работать с файлами загруженные без указания заголовка ответа Content-Type не смогут правильно обработать файл, помимо всего прочего, наш сервер должен указать MIME type Для этого заведем отдельную переменную со всеми распространенными майм типами. Также предоставим возможность их расширить, передав в качестве переменной окружения

Отлично, теперь нужно как-то перед переключением потока чтения в поток записи указать MIME тип. Я использовал в качестве ключей имена расширений файлов, поэтому уже знакомой функцией extname получим расширение файла

а при помощи обработчика события pipe зададим нужный MIME тип

Вот и все — сервер готов. Он, конечно, не идеален, но для быстрого старта самое то. Если вам интересно развитие этой идеи, пожалуйста, пишите в комментариях 🙂


Simple https server windows

http-server: a command-line http server

http-server is a simple, zero-configuration command-line http server. It is powerful enough for production usage, but it’s simple and hackable enough to be used for testing, local development, and learning.

Читайте также:  Как установить windows с расширением tib

Globally via npm

This will install http-server globally so that it may be run from the command line anywhere.

Globally via Homebrew

Using npx you can run the script without installing it first:

As a dependency in your npm package:

[path] defaults to ./public if the folder exists, and ./ otherwise.

Now you can visit http://localhost:8080 to view your server

Note: Caching is on by default. Add -c-1 as an option to disable caching.

-p or —port Port to use (defaults to 8080)

-a Address to use (defaults to 0.0.0.0)

-d Show directory listings (defaults to true )

-i Display autoIndex (defaults to true )

-g or —gzip When enabled (defaults to false ) it will serve ./public/some-file.js.gz in place of ./public/some-file.js when a gzipped version of the file exists and the request accepts gzip encoding. If brotli is also enabled, it will try to serve brotli first.

-b or —brotli When enabled (defaults to false ) it will serve ./public/some-file.js.br in place of ./public/some-file.js when a brotli compressed version of the file exists and the request accepts br encoding. If gzip is also enabled, it will try to serve brotli first.

-e or —ext Default file extension if none supplied (defaults to html )

-s or —silent Suppress log messages from output

—cors Enable CORS via the Access-Control-Allow-Origin header

-o [path] Open browser window after starting the server. Optionally provide a URL path to open. e.g.: -o /other/dir/

-c Set cache time (in seconds) for cache-control max-age header, e.g. -c10 for 10 seconds (defaults to 3600 ). To disable caching, use -c-1 .

-U or —utc Use UTC time format in log messages.

—log-ip Enable logging of the client’s IP address (default: false ).

-P or —proxy Proxies all requests which can’t be resolved locally to the given url. e.g.: -P http://someurl.com

—username Username for basic authentication [none]

—password Password for basic authentication [none]

-S or —ssl Enable https.

-C or —cert Path to ssl cert file (default: cert.pem ).

-K or —key Path to ssl key file (default: key.pem ).

-r or —robots Provide a /robots.txt (whose content defaults to User-agent: *\nDisallow: / )

—no-dotfiles Do not show dotfiles

-h or —help Print this list and exit.

-v or —version Print the version and exit.

  • index.html will be served as the default file to any directory requests.
  • 404.html will be served if a file is not found. This can be used for Single-Page App (SPA) hosting to serve the entry page.

To implement a catch-all redirect, use the index page itself as the proxy with:

Note the ? at the end of the proxy URL. Thanks to @houston3 for this clever hack!

First, you need to make sure that openssl is installed correctly, and you have key.pem and cert.pem files. You can generate them using this command:

You will be prompted with a few questions after entering the command. Use 127.0.0.1 as value for Common name if you want to be able to install the certificate in your OS’s root certificate store or browser so that it is trusted.

This generates a cert-key pair and it will be valid for 3650 days (about 10 years).

Then you need to run the server with -S for enabling SSL and -C for your certificate file.

This is what should be output if successful:

Checkout this repository locally, then:

Now you can visit http://localhost:8080 to view your server

You should see the turtle image in the screenshot above hosted at that URL. See the ./public folder for demo content.

Оцените статью