# wsock.tcp.simpleHttpServer 库模块帮助文档

[HTTP 服务端开发指南](https://www.aardio.com/zh-cn/docs/guide/quickstart/web-server.md)

## wsock.tcp.simpleHttpServer 成员列表 <a id="wsock.tcp.simpleHttpServer" href="#wsock.tcp.simpleHttpServer">&#x23;</a>

HTTP服务端  
支持文件上传,下载,下载支持断点续传  
支持多线程处理请求

### wsock.tcp.simpleHttpServer.defaultDocument <a id="wsock.tcp.simpleHttpServer.defaultDocument" href="#wsock.tcp.simpleHttpServer.defaultDocument">&#x23;</a>
默认文档，默认为"main.aardio",  

如果访问硬盘上存在的目录,request.path 尾部不加斜杠会自动跳转到以斜杠结束的路径  

如果访问嵌入资源目录,只有 request.path 以斜杠才会访问默认文档,  
对于访问嵌入资源文件,建议指定完整的文件路径,  
默认文档主要是用于硬盘上的网站

### wsock.tcp.simpleHttpServer.documentBase <a id="wsock.tcp.simpleHttpServer.documentBase" href="#wsock.tcp.simpleHttpServer.documentBase">&#x23;</a>
网站根目录,  
不会修改应用程序根目录,支持硬盘目录与资源目录,  
这个属性应当设置为应用程序根目录下的相对路径,  
例如 "/res/web/"  

注意： request.path 前面包含 documentBase 目录。  
而 request.pathInfo 忽略 documentBase 目录

### wsock.tcp.simpleHttpServer.documentRoot <a id="wsock.tcp.simpleHttpServer.documentRoot" href="#wsock.tcp.simpleHttpServer.documentRoot">&#x23;</a>
网站应用程序根目录,默认为"/",  
只能设置为硬盘上实际存在的目录,  
改变此目录,会同时改变  
服务端代码中的应用程序根目录以及用户库目录,  
如果只是相将所有请求路径转向某个目录,应当改用 documentBase 属性  
如果网站在嵌入资源目录中,应当改用 documentBase 属性

### wsock.tcp.simpleHttpServer.mainThread() <a id="wsock.tcp.simpleHttpServer.mainThread" href="#wsock.tcp.simpleHttpServer.mainThread">&#x23;</a>
[返回对象:HttpSimpleServerMainObject](#HttpSimpleServerMainObject)

### wsock.tcp.simpleHttpServer.mainThread(app) <a id="wsock.tcp.simpleHttpServer.mainThread" href="#wsock.tcp.simpleHttpServer.mainThread">&#x23;</a>

```aardio
wsock.tcp.simpleHttpServer.mainThread(   
    function(response,request,session){   
         response.loadcode( request.path /*可省略,可增加多个模板参数,  
在被调用文件的函数外部可使用owner参数获取首个模板参数,  
也可以使用...获取多个模板参数*/ );  
    } 	  
);
```

### wsock.tcp.simpleHttpServer.startSpaUrl <a id="wsock.tcp.simpleHttpServer.startSpaUrl" href="#wsock.tcp.simpleHttpServer.startSpaUrl">&#x23;</a>
返回 SPA 单页应用首页网址

### wsock.tcp.simpleHttpServer.startSpaUrl(indexHtmlPath,documentBase,app) <a id="wsock.tcp.simpleHttpServer.startSpaUrl" href="#wsock.tcp.simpleHttpServer.startSpaUrl">&#x23;</a>
参数指定 SPA 单页应用首页路径，  
404错误页也会自动设置到该路径，  
返回首页网址  

可选用参数 @documentBase 指定根目录  
以避免网页不支持非根目录路径。  

可选用 @app 参数指定处理 HTTP 请求的线程函数，  
该线程函数有 response,request,session 等三个回调参数

### wsock.tcp.simpleHttpServer.startUrl <a id="wsock.tcp.simpleHttpServer.startUrl" href="#wsock.tcp.simpleHttpServer.startUrl">&#x23;</a>
查找可用端口创建 HTTP 服务器线程，返回返回完整 URL  
此服务端限制使用本机IP 127.0.0.1 访问,并随机分配端口不会出现端口冲突  
如果HTTP服务器已启动则直接返回URL而不是重复启动服务器,  
注意当前线程结束时,此服务器线程会自动退出

### wsock.tcp.simpleHttpServer.startUrl(path,documentRoot,app) <a id="wsock.tcp.simpleHttpServer.startUrl" href="#wsock.tcp.simpleHttpServer.startUrl">&#x23;</a>
查找可用端口创建 HTTP 服务器线程，返回返回完整 URL  
如果 HTTP 服务器已启动则直接返回 URL 而不是重复启动服务器。  
省略参数返回首页URL,尾部不包含斜杠。  

可选用 @path 参数指定请求目标文件的相对路径。  
可选使用参数 @documentRoot 指定网站根目录,默认为"/"。  
documentRoot 只能设为硬盘实际存在的目录，并会改变用户库与应用根目录，  
如只想改变网页根目录请设置 wsock.tcp.simpleHttpServer.documentBase。  
可选用 @app 参数指定处理 HTTP 请求的线程函数,  
该线程函数有 response,request,session 等三个回调参数。  
也可以用参数@1 指定 @app 参数。

### wsock.tcp.simpleHttpServer.stopUrl() <a id="wsock.tcp.simpleHttpServer.stopUrl" href="#wsock.tcp.simpleHttpServer.stopUrl">&#x23;</a>
退出startUrl函数创建的HTTP服务器线程

## HttpSimpleServerMainObject 成员列表 <a id="HttpSimpleServerMainObject" href="#HttpSimpleServerMainObject">&#x23;</a>

### HttpSimpleServerMainObject.codeFileMode <a id="HttpSimpleServerMainObject.codeFileMode" href="#HttpSimpleServerMainObject.codeFileMode">&#x23;</a>
设置 response.loadcode 函数处理 `*.aardio` 代码文件的模式。  
值为 null 或者 "execute" 表示允许执行代码，默认为 null。  
设为 "static" 则 aardio 文件可作为普通文件下载。  
设为 "deny" 则禁止访问 aardio 文件。

### HttpSimpleServerMainObject.customErrors <a id="HttpSimpleServerMainObject.customErrors" href="#HttpSimpleServerMainObject.customErrors">&#x23;</a>

```aardio
HttpSimpleServerMainObject.customErrors = {  
    [404] = function(response){  
		response.status = "404 Not Found";  
		response.write("404 Not Found"); /*自定义错误页*/  
	}   
}
```

### HttpSimpleServerMainObject.defaultDocument <a id="HttpSimpleServerMainObject.defaultDocument" href="#HttpSimpleServerMainObject.defaultDocument">&#x23;</a>
默认文档，默认为"main.aardio",  

如果访问硬盘上存在的目录,request.path 尾部不加斜杠会自动跳转到以斜杠结束的路径  

如果访问嵌入资源目录,只有 request.path 以斜杠才会访问默认文档,  
对于访问嵌入资源文件,建议指定完整的文件路径,  
默认文档主要是用于硬盘上的网站

### HttpSimpleServerMainObject.documentBase <a id="HttpSimpleServerMainObject.documentBase" href="#HttpSimpleServerMainObject.documentBase">&#x23;</a>
网站根目录,  
不会修改应用程序根目录,支持硬盘目录与资源目录,  
这个属性应当设置为应用程序根目录下的相对路径,  
例如 "/res/web/",  

注意： request.path 前面包含 documentBase 目录。  
而 request.pathInfo 忽略 documentBase 目录

### HttpSimpleServerMainObject.documentRoot <a id="HttpSimpleServerMainObject.documentRoot" href="#HttpSimpleServerMainObject.documentRoot">&#x23;</a>
网站应用程序根目录,默认为"/",  
只能设置为硬盘上实际存在的目录,  
改变此目录,会同时改变  
服务端代码中的应用程序根目录以及用户库目录,  
如果只是相将所有请求路径转向某个目录,应当改用 documentBase 属性  
如果网站在嵌入资源目录中,应当改用 documentBase 属性

### HttpSimpleServerMainObject.getLocalIp() <a id="HttpSimpleServerMainObject.getLocalIp" href="#HttpSimpleServerMainObject.getLocalIp">&#x23;</a>
返回服务端IP,端口

### HttpSimpleServerMainObject.getUrl() <a id="HttpSimpleServerMainObject.getUrl" href="#HttpSimpleServerMainObject.getUrl">&#x23;</a>
返回HTTP服务端访问网址,可选指定目录或文件路径  
注意参数第一个字符不需要指定斜杠  
如果参数@2为true，IP "0.0.0.0"替换为合适的内网IP而不是localhost	  
如果服务器启动失败不返回任何值

### HttpSimpleServerMainObject.serverId <a id="HttpSimpleServerMainObject.serverId" href="#HttpSimpleServerMainObject.serverId">&#x23;</a>
当前服务端唯一ID，字符串,  
每次调用start函数都会改变这个属性的值

### HttpSimpleServerMainObject.start(IP,端口,请求队列大小) <a id="HttpSimpleServerMainObject.start" href="#HttpSimpleServerMainObject.start">&#x23;</a>
启动HTTP服务端

### HttpSimpleServerMainObject.startPort <a id="HttpSimpleServerMainObject.startPort" href="#HttpSimpleServerMainObject.startPort">&#x23;</a>
设置服务器端口,默认自动分配空闲端口

### HttpSimpleServerMainObject.startSpaUrl <a id="HttpSimpleServerMainObject.startSpaUrl" href="#HttpSimpleServerMainObject.startSpaUrl">&#x23;</a>
返回 SPA 单页应用首页网址

### HttpSimpleServerMainObject.startSpaUrl(indexHtmlPath,documentBase) <a id="HttpSimpleServerMainObject.startSpaUrl" href="#HttpSimpleServerMainObject.startSpaUrl">&#x23;</a>
参数指定 SPA 单页应用首页路径，  
404错误页也会自动设置到该路径，  
返回首页网址  

可选用参数 @documentBase 指定根目录以避免网页不支持非根目录路径

### HttpSimpleServerMainObject.stop() <a id="HttpSimpleServerMainObject.stop" href="#HttpSimpleServerMainObject.stop">&#x23;</a>
停止HTTP服务端

### HttpSimpleServerMainObject.threadGlobal <a id="HttpSimpleServerMainObject.threadGlobal" href="#HttpSimpleServerMainObject.threadGlobal">&#x23;</a>

```aardio
HttpSimpleServerMainObject.threadGlobal = {
	/*在onThreadCreated事件触发前  
添加HTTP服务监听线程的全局变量*/
}
```

### HttpSimpleServerMainObject.threadNum <a id="HttpSimpleServerMainObject.threadNum" href="#HttpSimpleServerMainObject.threadNum">&#x23;</a>
设置服务器线程数，默认为2个线程

## HttpSimpleServerMainObject 事件列表 <a id="HttpSimpleServerMainObjectEvent" href="#HttpSimpleServerMainObjectEvent">&#x23;</a>

### HttpSimpleServerMainObject.onThreadCreated() <a id="HttpSimpleServerMainObject.onThreadCreated" href="#HttpSimpleServerMainObject.onThreadCreated">&#x23;</a>

```aardio
HttpSimpleServerMainObject.onThreadCreated = function(documentRoot,urlRoot){
	/*一个HTTP服务监听线程准备就绪时触发此事件*/
}
```

## HttpSimpleServerObject 成员列表 <a id="HttpSimpleServerObject" href="#HttpSimpleServerObject">&#x23;</a>

### HttpSimpleServerObject._serverAddress <a id="HttpSimpleServerObject._serverAddress" href="#HttpSimpleServerObject._serverAddress">&#x23;</a>
服务端监听地址  

[返回对象:sockaddrInObject](#sockaddrInObject)

### HttpSimpleServerObject.beforeClose() <a id="HttpSimpleServerObject.beforeClose" href="#HttpSimpleServerObject.beforeClose">&#x23;</a>

```aardio
HttpSimpleServerObject.beforeClose = function(){
	/*服务器关闭前调用此函数*/
}
```

### HttpSimpleServerObject.close() <a id="HttpSimpleServerObject.close" href="#HttpSimpleServerObject.close">&#x23;</a>
关闭 HTTP 服务端

### HttpSimpleServerObject.codeFileMode <a id="HttpSimpleServerObject.codeFileMode" href="#HttpSimpleServerObject.codeFileMode">&#x23;</a>
设置 response.loadcode 函数处理 `*.aardio` 代码文件的模式。  
值为 null 或者 "execute" 表示允许执行代码，默认为 null。  
设为 "static" 则 aardio 文件可作为普通文件下载。  
设为 "deny" 则禁止访问 aardio 文件。

### HttpSimpleServerObject.customErrors[404] <a id="HttpSimpleServerObject.customErrors[404]" href="#HttpSimpleServerObject.customErrors[404]">&#x23;</a>

```aardio
HttpSimpleServerObject.customErrors[404] = function(response){
	response.status = "404 Not Found";
	response.write("404 Not Found"); /*自定义错误页处理函数，  
注意这是线程函数，应遵守多线程规则，  
也可以直接指定错误页路径*/
}
```

### HttpSimpleServerObject.defaultDocument <a id="HttpSimpleServerObject.defaultDocument" href="#HttpSimpleServerObject.defaultDocument">&#x23;</a>
默认文档，默认为"main.aardio"，设为 null 禁用默认文档。  
在启动服务端之前设置才会生效,  

如果访问硬盘上存在的目录,request.path 尾部不加斜杠会自动跳转到以斜杠结束的路径  

如果访问嵌入资源目录,只有 request.path 以斜杠才会访问默认文档,  
对于访问嵌入资源文件,建议指定完整的文件路径,  
默认文档主要是用于硬盘上的网站

### HttpSimpleServerObject.documentBase <a id="HttpSimpleServerObject.documentBase" href="#HttpSimpleServerObject.documentBase">&#x23;</a>
网站根目录,  
在启动服务端之前设置才会生效,  
不会修改应用程序根目录,支持硬盘目录与资源目录,  
这个属性应当设置为应用程序根目录下的相对路径,  
例如 "/res/web/"  

注意： request.path 前面包含 documentBase 目录。  
而 request.pathInfo 忽略 documentBase 目录

### HttpSimpleServerObject.documentRoot <a id="HttpSimpleServerObject.documentRoot" href="#HttpSimpleServerObject.documentRoot">&#x23;</a>
网站应用程序根目录,默认为"/",  
在启动服务端之前设置才会生效,  

只能设置为硬盘上实际存在的目录,  
改变此目录,会同时改变  
服务端代码中的应用程序根目录以及用户库目录,  
如果只是相将所有请求路径转向某个目录,应当改用 documentBase 属性  
如果网站在嵌入资源目录中,应当改用 documentBase 属性

### HttpSimpleServerObject.getLocalIp() <a id="HttpSimpleServerObject.getLocalIp" href="#HttpSimpleServerObject.getLocalIp">&#x23;</a>
返回当前绑定的IP,端口号

### HttpSimpleServerObject.getUrl() <a id="HttpSimpleServerObject.getUrl" href="#HttpSimpleServerObject.getUrl">&#x23;</a>
返回首页URL  
如果参数@1为true，IP "0.0.0.0"替换为上网卡IP而不是localhost

### HttpSimpleServerObject.id <a id="HttpSimpleServerObject.id" href="#HttpSimpleServerObject.id">&#x23;</a>
服务器唯一ID,字符串。  
所有继承自 wsock.tcp.server 的服务端。  
在任何线程都可以调用 wsock.tcp.server.closeById 关闭服务端。

### HttpSimpleServerObject.listen(请求队列大小) <a id="HttpSimpleServerObject.listen" href="#HttpSimpleServerObject.listen">&#x23;</a>
监听构造函数绑定的 IP 端口，成功返回 true 。  
已自动调用此函数。

### HttpSimpleServerObject.resourceRoot <a id="HttpSimpleServerObject.resourceRoot" href="#HttpSimpleServerObject.resourceRoot">&#x23;</a>
用于指定 WebDAV 共享文件根目录。  
仅适用于实现了 WebDAV 协议的服务端，例如 web.dav.server 。  
此目录不应当指向服务端应用程序根目录，也即 documentRoot 目录。  
在 documentRoot 目录下 /config 与 /lib 目录是受保护的目录，无法访问。  
但如果 resourceRoot 指向 documentRoot 则可能会错误地列出这两个目录。  
HTTP 服务端默认会禁止下载或执行 `*.aardio` 代码。  
但如果 resourceRoot 指向 documentRoot，WebDAV 服务端文件系统模块可能绕过此限制。

### HttpSimpleServerObject.run(httpProc,runArgs2) <a id="HttpSimpleServerObject.run" href="#HttpSimpleServerObject.run">&#x23;</a>

```aardio
HttpSimpleServerObject.run(   
    function(response,request,session,runArgs2){   
         response.loadcode( request.path /*可省略,可增加多个模板参数,  
在被调用文件的函数外部可使用 owner 参数获取首个模板参数,  
也可以使用 ... 获取多个模板参数*/ );  
    } 	  
);
```

### HttpSimpleServerObject.threadGlobal <a id="HttpSimpleServerObject.threadGlobal" href="#HttpSimpleServerObject.threadGlobal">&#x23;</a>

```aardio
HttpSimpleServerObject.threadGlobal = {
	/*在onThreadCreated事件触发前  
添加HTTP服务监听线程的全局变量*/
}
```

### HttpSimpleServerObject.threadNum <a id="HttpSimpleServerObject.threadNum" href="#HttpSimpleServerObject.threadNum">&#x23;</a>
设置服务器线程数，默认为2个线程

## HttpSimpleServerObject 事件列表 <a id="HttpSimpleServerObjectEvent" href="#HttpSimpleServerObjectEvent">&#x23;</a>

### HttpSimpleServerObject.onThreadCreated() <a id="HttpSimpleServerObject.onThreadCreated" href="#HttpSimpleServerObject.onThreadCreated">&#x23;</a>

```aardio
HttpSimpleServerObject.onThreadCreated = function(documentRoot,urlRoot){
	/*一个HTTP服务监听线程准备就绪时触发此事件*/
}
```

## wsock.tcp 成员列表 <a id="wsock.tcp" href="#wsock.tcp">&#x23;</a>

### wsock.tcp.simpleHttpServer() <a id="wsock.tcp.simpleHttpServer" href="#wsock.tcp.simpleHttpServer">&#x23;</a>
[返回对象:HttpSimpleServerObject](#HttpSimpleServerObject)

### wsock.tcp.simpleHttpServer(IP,端口,请求队列大小) <a id="wsock.tcp.simpleHttpServer" href="#wsock.tcp.simpleHttpServer">&#x23;</a>
创建HTTP服务端,所有参数可选,  

如果不写IP，则默认设为"0.0.0.0"也即监听本机所有IP,访问此服务端也不限制IP  
限制仅本机可以访问建议写127.0.0.1  

端口为0或省略则自动选择未用端口  
注意0-1023为系统通用服务保留端口,  
1024-49151为用户服务端口,其中大约%9已由IANA注册分配  
49152-65535为私有或临时端口
