Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/http-party/http-server
a simple zero-configuration command-line http server
https://github.com/http-party/http-server
command-line hacktoberfest hosting http server static
Last synced: 7 days ago
JSON representation
a simple zero-configuration command-line http server
- Host: GitHub
- URL: https://github.com/http-party/http-server
- Owner: http-party
- License: mit
- Created: 2011-06-16T23:54:57.000Z (over 13 years ago)
- Default Branch: master
- Last Pushed: 2024-04-28T11:16:55.000Z (6 months ago)
- Last Synced: 2024-06-19T09:41:32.542Z (5 months ago)
- Topics: command-line, hacktoberfest, hosting, http, server, static
- Language: JavaScript
- Homepage:
- Size: 2.02 MB
- Stars: 13,411
- Watchers: 194
- Forks: 1,475
- Open Issues: 147
-
Metadata Files:
- Readme: README.md
- Contributing: .github/CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Security: SECURITY.md
Awesome Lists containing this project
- awesome - http-party/http-server - a simple zero-configuration command-line http server (JavaScript)
- stars - http-party/http-server - configuration command-line http server (HarmonyOS / Windows Manager)
- awesome - http-server - a simple zero-configuration command-line http server (JavaScript)
- awesome-ops - http-party/http-server - 06-16|2024-09-30 | 一个简单的、零配置的命令行静态 HTTP 服务器 | (终端命令行工具)
- awesome-nodejs - http-server - A simple zero-configuration command-line http server. ![](https://img.shields.io/github/stars/http-party/http-server.svg?style=social&label=Star) (Repository / HTTP)
- awesome-nodejs-cn - http-server - **star:13412** 简单的零配置 http 服务器命令行工具 ![star > 2000][Awesome] (包 / 命令行程序)
- project-awesome - http-party/http-server - a simple zero-configuration command-line http server (JavaScript)
- awesome-nodejs - http-server - Simple, zero-config command-line HTTP server. (Packages / Command-line apps)
- awesome-nodejs - http-server - 静态文件服务器命令行工具,无需配置,一条命令开启 http 服务 (Uncategorized / Uncategorized)
- awesome-fe-resources - http-serve
- StarryDivineSky - http-party/http-server
- awesome - http-party/http-server - a simple zero-configuration command-line http server (JavaScript)
- awesome - http-party/http-server - a simple zero-configuration command-line http server (JavaScript)
README
[![GitHub Workflow Status (master)](https://img.shields.io/github/actions/workflow/status/http-party/http-server/node.js.yml?style=flat-square&branch=master)](https://github.com/http-party/http-server/actions)
[![npm](https://img.shields.io/npm/v/http-server.svg?style=flat-square)](https://www.npmjs.com/package/http-server) [![homebrew](https://img.shields.io/homebrew/v/http-server?style=flat-square)](https://formulae.brew.sh/formula/http-server) [![npm downloads](https://img.shields.io/npm/dm/http-server?color=blue&label=npm%20downloads&style=flat-square)](https://www.npmjs.com/package/http-server)
[![license](https://img.shields.io/github/license/http-party/http-server.svg?style=flat-square)](https://github.com/http-party/http-server/blob/master/LICENSE)# http-server: a simple static HTTP server
`http-server` is a simple, zero-configuration command-line static 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.
![Example of running http-server](https://github.com/http-party/http-server/raw/master/screenshots/public.png)
## Installation:
#### Running on-demand:
Using `npx` you can run the script without installing it first:
npx http-server [path] [options]
#### Globally via `npm`
npm install --global http-server
This will install `http-server` globally so that it may be run from the command line anywhere.
#### Globally via Homebrew
brew install http-server
#### As a dependency in your `npm` package:npm install http-server
#### Using Docker
Note: a public image is not provided currently, but you can build one yourself
with the provided Dockerfile.1. Create an image
```
docker build -t my-image .
```
2. Run a container
```
docker run -p 8080:8080 -v "${pwd}:/public" my-image
```
In the example above we're serving the directory `./` (working directory).
If you wanted to serve `./test` you'd replace `${pwd}` with `${pwd}/test`.## Usage:
http-server [path] [options]
`[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.
## Available Options:
| Command | Description | Defaults |
| ------------- |-------------|-------------|
|`-p` or `--port` |Port to use. Use `-p 0` to look for an open port, starting at 8080. It will also read from `process.env.PORT`. |8080 |
|`-a` |Address to use |0.0.0.0|
|`-d` |Show directory listings |`true` |
|`-i` | Display autoIndex | `true` |
|`-g` or `--gzip` |When enabled 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.|`false`|
|`-b` or `--brotli`|When enabled 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. |`false`|
|`-e` or `--ext` |Default file extension if none supplied |`html` |
|`-s` or `--silent` |Suppress log messages from output | |
|`--cors` |Enable CORS via the `Access-Control-Allow-Origin` header | |
|`-H` or `--header` |Add an extra response header (can be used several times) | |
|`-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. To disable caching, use `-c-1`.|`3600` |
|`-U` or `--utc` |Use UTC time format in log messages.| |
|`--log-ip` |Enable logging of the client's IP address |`false` |
|`-P` or `--proxy` |Proxies all requests which can't be resolved locally to the given url. e.g.: -P http://someurl.com | |
|`--proxy-options` |Pass proxy [options](https://github.com/http-party/node-http-proxy#options) using nested dotted objects. e.g.: --proxy-options.secure false |
|`--username` |Username for basic authentication | |
|`--password` |Password for basic authentication | |
|`-S`, `--tls` or `--ssl` |Enable secure request serving with TLS/SSL (HTTPS)|`false`|
|`-C` or `--cert` |Path to ssl cert file |`cert.pem` |
|`-K` or `--key` |Path to ssl key file |`key.pem` |
|`-r` or `--robots` | Automatically provide a /robots.txt (The content of which defaults to `User-agent: *\nDisallow: /`) | `false` |
|`--no-dotfiles` |Do not show dotfiles| |
|`--mimetypes` |Path to a .types file for custom mimetype definition| |
|`-h` or `--help` |Print this list and exit. | |
|`-v` or `--version`|Print the version and exit. | |## Magic Files
- `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.## Catch-all redirect
To implement a catch-all redirect, use the index page itself as the proxy with:
```
http-server --proxy http://localhost:8080?
```Note the `?` at the end of the proxy URL. Thanks to [@houston3](https://github.com/houston3) for this clever hack!
## TLS/SSL
First, you need to make sure that [openssl](https://github.com/openssl/openssl) is installed correctly, and you have `key.pem` and `cert.pem` files. You can generate them using this command:
``` sh
openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem
```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.
``` sh
http-server -S -C cert.pem
```If you wish to use a passphrase with your private key you can include one in the openssl command via the -passout parameter (using password of foobar)
e.g.
`openssl req -newkey rsa:2048 -passout pass:foobar -keyout key.pem -x509 -days 365 -out cert.pem`For security reasons, the passphrase will only be read from the `NODE_HTTP_SERVER_SSL_PASSPHRASE` environment variable.
This is what should be output if successful:
``` sh
Starting up http-server, serving ./ through httpshttp-server settings:
CORS: disabled
Cache: 3600 seconds
Connection Timeout: 120 seconds
Directory Listings: visible
AutoIndex: visible
Serve GZIP Files: false
Serve Brotli Files: false
Default File Extension: noneAvailable on:
https://127.0.0.1:8080
https://192.168.1.101:8080
https://192.168.1.104:8080
Hit CTRL-C to stop the server
```# Development
Checkout this repository locally, then:
```sh
$ npm i
$ npm start
```*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.