先来一个基于容器的,这是一个真正容器版本的Apache做事器,根本镜像包为httpd:2.4-alpine:
docker run -d -p 8000:80 --name CC-web -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4-alpine
默认便是当前文件夹的列表页面,启动时候把稳安全哦。

Python
Python 2和3版本差异较大,其内置的http做事亦有所差异。
2.x版本:
python -m SimpleHTTPServer 8000
3.x版本:
python -m http.server 8000
除了措辞自带模块,还有大量的第三方模块也可以支持。
twisted (Python运用)twisted -n web -p 8000 --path .
或者:
python -c 'from twisted.web.server import Site; from twisted.web.static import File; from twisted.internet import reactor; reactor.listenTCP(8000, Site(File("."))); reactor.run()'
Ruby措辞
ruby -rwebrick -e'WEBrick::HTTPServer.new(:Port => 8000, :DocumentRoot => Dir.pwd).start'
同样Ruby也有第三方http模块可以支持。
adsf(Ruby运用):gem install adsfadsf -p 8000
Sinatra (Ruby运用)
gem install sinatraruby -rsinatra -e'set :public_folder, "."; set :port, 8000'
Perl措辞
cpan HTTP::Server::Brickperl -MHTTP::Server::Brick -e '$s=HTTP::Server::Brick->new(port=>8000); $s->mount("/"=>{path=>"."}); $s->start'
Plack (Perl运用)
cpan Plackplackup -MPlack::App::Directory -e 'Plack::App::Directory->new(root=>".");' -p 8000
Mojolicious (Perl运用)
cpan Mojolicious::Liteperl -MMojolicious::Lite -MCwd -e 'app->static->paths->[0]=getcwd; app->start' daemon -l http://:8000
Node.js
npm install -g http-serverhttp-server -p 8000
node-static(Node.js):
npm install -g node-staticstatic -p 8000
PHP
PHP在大于5.4的版本中内置了http做事,可以直接用-S选项启动。
php -S 127.0.0.1:8000
Erlang措辞
Erlang措辞实现比较麻烦一点,但是也能在单行中实现。
erl -s inets -eval 'inets:start(httpd,[{server_name,"NAME"},{document_root, "."},{server_root, "."},{port, 8000},{mime_types,[{"html","text/html"},{"htm","text/html"},{"js","text/javascript"},{"css","text/css"},{"gif","image/gif"},{"jpg","image/jpeg"},{"jpeg","image/jpeg"},{"png","image/png"}]}]).'
Golang
Golang措辞无法直接用一句话实现,须要自己写个main或者用第三方的模块。
main.goimport "net/http"func main() {http.ListenAndServe(":8000", http.FileServer(http.Dir(".")))}
然后启动即可,也非常大略,但是性能很好。
go run main.go
可以用golang运用,比如caddy,它支持的功能就比较强大了,但是可以大略化利用。
caddyyum install yum-plugin-copryum copr enable @caddy/caddyyum install caddycaddy -port 8000
Rust
Rust措辞须要用https模块,由于Rust核心模块中险些不带任何运用模块,须要先用cargo安装:
cargo install https
然后直接就可以启动。
http
R措辞
R措辞下也很大略,用自带的servr做事器模块就可以。Serve是R措辞与其他措辞的通信(TCP/IP)接口,客户端由多种措辞实现,像C/C++, Java等。
Rscript -e 'servr::httd()' -p8000
dart措辞
dart措辞自带dhttpd可以实现:
pub global activate dhttpd[if not in PATH: pub global run] dhttpd
Crystal措辞
利用http/server和eval措辞启动:
crystal eval 'require "http/server"; HTTP::Server.new([HTTP::StaticFileHandler.new(".")]).listen(8000)'
OCaml措辞
oCaml措辞须要用cohttp和async模块实现:
opam install cohttp asynccohttp-server-async
或者cohttp,lwt和ssl模块也可以。
opam install cohttp lwt sslcohttp-server-lwt
Tcl
Tcl措辞须要版本8.6 ,Tcllib 1.19 更新版本才能支持,实现也较麻烦:
echo 'package require httpd 4; ::httpd::server create HTTPD port 8000 myaddr 127.0.0.1 doc_root [pwd]; vwait forever' | tclsh
Java
Java措辞基本上便是可以算是不支持,但是在JDK 1.7以上版本可以用折衷办法,而且只支持一个用户上岸,不能算是这个合格的Web做事。
echo -e 'import java.net.;import java.nio.file.;public class M{public static void main(String[] args)throws Exception{byte[]b=new byte[16777215];ServerSocket s=new ServerSocket(8000);for(;;)try{Socket c=s.accept();c.getInputStream().read(b);c.getOutputStream().write(("HTTP/1.1 200 OK\\r\\n\\r\\n"+new String(Files.readAllBytes(Paths.get(new String(b).split(" ")[1].substring(1))))).getBytes());c.getOutputStream().flush();c.close();}catch(Exception e){}}}'>M.java;javac M.java;java M
.NET Core
Dotnet core用户可以用dotnet-serve模块,先安装:
dotnet tool install --global dotnet-servedotnet serve -p 8000
C
C措辞写的web做事器,可以用webfs:
webfsd -F -p 8000
汇编
汇编措辞的版本的asmttpd(github/nemasu/asmttpd),之前文章中提到过,这可能最小版本的Web做事器了,大小只有6k,不过麻雀虽小功能很全,支持多线程,多文档种类,多Http状态和头支持。
asmttpd . 8000
IIS Express:
IIS命令也强行凑一波热闹:
C:\> "C:\Program Files (x86)\IIS Express\iisexpress.exe" /path:C:\MyWeb /port:8000
Gawk
Oneline运用怎么能少得了awk呢?虽然比较麻烦:
gawk '@load"filefuncs";@load"readfile";func send(s,e,d,t,b){print"HTTP/1.0 "s" "e|&S;print"Content-Length: "b|&S;print"Content-Type: "t|&S;print d|&S;close(S);}func cf(x){split(x,y,"/");for(z in y){print "FOUND "y[z];if(y[z]==".."){return 0;}}return 1;}func mt(f){c="file -b --mime-type "f;r="";while((c|getline z)>0){r=r z;}close(c);return r;}BEGIN{if(ARGV[1]!=""){if(chdir(ARGV[1])){print "Failed to chdir to "ARGV[1];exit;}ARGC=1;}RS=ORS="\r\n";while(1){S="/inet/tcp/8080/0/0";while((S|&getline l)>0){split(l,f," ");if(f[1]=="GET"){p=substr(f[2],2)}if(p==""){p="index.html"}stat(p,s);if(cf(p)&&s["type"]=="file"){m=mt(p);o=readfile(p);send(200,"OK",o,m,s["size"]);break;}n="<html>Not Found</html>";send(404,"Not Found",n,"text/html"RS,length(n));break;}}}'
PowerShell
PowerShell表示虽然只是途经,但是不愿意错过。
Hso=New-Object Net.HttpListener;$Hso.Prefixes.Add("http://+:8000/");$Hso.Start();While ($Hso.IsListening){$HC=$Hso.GetContext();$HRes=$HC.Response;$HRes.Headers.Add("Content-Type","text/plain");$Buf=[Text.Encoding]::UTF8.GetBytes((GC (Join-Path $Pwd ($HC.Request).RawUrl)));$HRes.ContentLength64=$Buf.Length;$HRes.OutputStream.Write($Buf,0,$Buf.Length);$HRes.Close()};$Hso.Stop()
从cmd启动的PowerShell:
Cmd表示借助孙子PS的邪术,我也可以,虽然啥也看不懂:
PowerShell.exe -nop -enc JABIAHMAbwA9AE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAEgAdAB0AHAATABpAHMAdABlAG4AZQByADsAJABIAHMAbwAuAFAAcgBlAGYAaQB4AGUAcwAuAEEAZABkACgAIgBoAHQAdABwADoALwAvACsAOgA4ADAAMAAwAC8AIgApADsAJABIAHMAbwAuAFMAdABhAHIAdAAoACkAOwBXAGgAaQBsAGUAIAAoACQASABzAG8ALgBJAHMATABpAHMAdABlAG4AaQBuAGcAKQB7ACQASABDAD0AJABIAHMAbwAuAEcAZQB0AEMAbwBuAHQAZQB4AHQAKAApADsAJABIAFIAZQBzAD0AJABIAEMALgBSAGUAcwBwAG8AbgBzAGUAOwAkAEgAUgBlAHMALgBIAGUAYQBkAGUAcgBzAC4AQQBkAGQAKAAiAEMAbwBuAHQAZQBuAHQALQBUAHkAcABlACIALAAiAHQAZQB4AHQALwBwAGwAYQBpAG4AIgApADsAJABCAHUAZgA9AFsAVABlAHgAdAAuAEUAbgBjAG8AZABpAG4AZwBdADoAOgBVAFQARgA4AC4ARwBlAHQAQgB5AHQAZQBzACgAKABHAEMAIAAoAEoAbwBpAG4ALQBQAGEAdABoACAAJABQAHcAZAAgACgAJABIAEMALgBSAGUAcQB1AGUAcwB0ACkALgBSAGEAdwBVAHIAbAApACkAKQA7ACQASABSAGUAcwAuAEMAbwBuAHQAZQBuAHQATABlAG4AZwB0AGgANgA0AD0AJABCAHUAZgAuAEwAZQBuAGcAdABoADsAJABIAFIAZQBzAC4ATwB1AHQAcAB1AHQAUwB0AHIAZQBhAG0ALgBXAHIAaQB0AGUAKAAkAEIAdQBmACwAMAAsACQAQgB1AGYALgBMAGUAbgBnAHQAaAApADsAJABIAFIAZQBzAC4AQwBsAG8AcwBlACgAKQB9ADsAJABIAHMAbwAuAFMAdABvAHAAKAApAA==
NC
NC表示我是网络界的瑞士军刀:
while true ; do nc -l 8080 < test.html ; done
busybox
busybox表示,咋啥也不说直接上代码就OK
busybox httpd -f -p 8000