///
///
///
///
///
///
import { IncomingHttpHeaders, IncomingMessage, ServerResponse } from "http";
import { Http2SecureServer, Http2ServerRequest, Http2ServerResponse, SecureServerOptions } from "http2";
import { ServerOptions } from "https";
import { ParsedUrlQuery } from "querystring";
/** 表示一个 HTTP 服务器(支持 HTTPS、HTTP/2) */
export declare class HTTPServer {
/**
* 初始化新的服务器
* @param options 附加选项
* @param onRequestHandler 处理请求的回调函数
*/
constructor(options?: HTTPServerOptions, onRequestHandler?: HTTPServer["processRequest"]);
/** 判断当前服务器是否使用了加密传输协议(HTTPS) */
get isSecure(): boolean;
/** 获取当前服务器的根地址,如果服务器未在监听则返回 `undefined` */
get url(): string;
/** 获取或设置允许请求的最大字节数 */
maxAllowedContentLength: number;
/**
* 处理原生 HTTP 请求事件
* @param request 当前的请求对象
* @param response 当前的响应对象
*/
protected handleRequest: (request: HTTPRequest, response: HTTPResponse) => void;
/**
* 处理 HTTP 请求
* @param request 当前的请求对象
* @param response 当前的响应对象
*/
processRequest(request: HTTPRequest, response: HTTPResponse): void;
/** 会话管理器 */
private _sessions?;
/** 获取或设置当前服务器的会话管理器 */
get sessions(): HTTPSessionManager;
set sessions(value: HTTPSessionManager);
}
/** 表示 HTTP 服务器的附加选项 */
export interface HTTPServerOptions extends ServerOptions, SecureServerOptions {
/**
* 是否启用加密传输协议
* @default false
*/
https?: boolean;
/**
* 是否启用 HTTP/2 协议
* @default false
*/
http2?: boolean;
/**
* 允许请求的最大字节数
* @default 20 * 1024 * 1024
*/
maxAllowedContentLength?: number;
}
/** 表示一个 HTTP 请求对象 */
export declare class HTTPRequest extends IncomingMessage {
/**
* 获取请求的方法
* @example "POST"
*/
method: string;
/**
* 获取请求的地址
* @example "/index.html?from=tpack&type=source"
*/
url: string;
/**
* 获取请求的路径名
* @example "/index.html"
*/
path: string;
/**
* 获取请求的查询字符串
* @example "from=tpack&type=source"
*/
search: string | null;
/** 当前请求的查询参数 */
private _query?;
/** 获取当前请求的查询参数 */
get query(): ParsedUrlQuery;
/** 获取远程客户端的 IP 地址 */
get remoteAddress(): string;
/** 获取远程客户端的端口 */
get remotePort(): number;
/** 获取本地服务端的 IP 地址 */
get localAddress(): string;
/** 获取本地服务端的端口 */
get localPort(): number;
/** 判断当前请求是否使用了加密传输协议(HTTPS) */
get isSecure(): boolean;
/** 获取当前请求的传输协议 */
get protocol(): "https:" | "http:";
/** 获取当前请求的主机名和端口 */
get host(): string;
/** 获取当前请求的绝对地址 */
get href(): string;
/** 获取客户端的 IP 地址,如果用户使用了代理,则尝试获取代理报告的原 IP 地址 */
get ip(): string | string[];
/** 判断当前请求是否来自本机 */
get isLocal(): boolean;
/** 获取客户端的证书信息,如果请求未使用加密传输协议,则返回 `undefined` */
get certificate(): import("tls").DetailedPeerCertificate;
/** 获取客户端的可用语言 */
get acceptLanguages(): {
value: string;
quality: number;
}[];
/** 获取当前请求的来源地址 */
get referer(): string;
/** 获取客户端的用户代理字符串 */
get userAgent(): string;
/** 获取客户端的上一次缓存时间 */
get ifModifiedSince(): Date;
/** 获取客户端支持的所有 MIME 类型 */
get acceptTypes(): {
value: string;
quality: number;
}[];
/** 获取客户端支持的所有编码 */
get acceptCharsets(): {
value: string;
quality: number;
}[];
/** 获取当前请求内容的 MIME 类型 */
get contentType(): string;
/** 获取当前请求内容的字符编码 */
get contentEncoding(): string;
/** 获取当前请求已传输的字节数 */
get totalBytes(): number;
/** 获取当前请求内容的字节长度 */
get contentLength(): number;
/** 获取当前请求的二进制内容 */
body?: Buffer;
/** 获取用户提交的数据 */
get data(): any;
/** 当前请求的文本 */
private _text?;
/** 获取当前请求的文本内容,如果当前请求不包含内容则返回 `undefined` */
get text(): string;
/** 当前请求的表单数据 */
private _forms?;
/** 获取当前请求的表单数据,如果当前请求不包含表单则返回 `undefined` */
get forms(): {
[key: string]: string | HTTPFile | (string | HTTPFile)[];
};
/** 获取当前请求的文件,如果当前请求不包含文件则返回 `null`数组 */
get files(): HTTPFile[];
/** 当前请求的 JSON 数据 */
private _json?;
/** 获取当前请求的 JSON 数据,如果当前请求不包含 JSON 数据则返回 `undefined` */
get json(): any;
/** 请求的 Cookies */
private _cookies?;
/** 获取请求的 Cookies */
get cookies(): any;
/** 当前请求的参数 */
private _params?;
/** 获取当前请求的所有参数 */
get params(): {
[key: string]: string | HTTPFile | (string | HTTPFile)[];
};
}
/** 表示一个 HTTP 响应对象 */
export declare class HTTPResponse extends ServerResponse {
/** 获取或设置响应内容的 MIME 类型 */
get contentType(): string;
set contentType(value: string);
/** 获取或设置响应内容的字节长度 */
get contentLength(): number;
set contentLength(value: number);
/** 获取或设置本次请求在客户端缓存的失效时间,`undefined` 表示禁用缓存 */
get expires(): Date;
set expires(value: Date);
/** 获取或设置响应内容的最后修改时间 */
get lastModified(): Date;
set lastModified(value: Date);
/** 获取或设置跳转的地址 */
get redirectLocation(): string | number | string[];
set redirectLocation(value: string | number | string[]);
/**
* 将客户端重定向到新的地址
* @param url 要重定向的新地址
* @param end 是否结束请求
*/
redirect(url: string, end?: boolean): void;
/**
* 设置客户端的 Cookie
* @param name 要设置的 Cookie 名
* @param value 要设置的 Cookie 值
* @param expires Cookie 过期的秒数或客户端时间
* @param domain 要设置的 Cookie 所在域
* @param path 要设置的 Cookie 路径
* @param httpOnly 是否禁止在客户端脚本中获取此 Cookie
* @param secure 是否只在安全协议下传输 Cookie
* @param sameSite Cookie 的同源策略
*/
setCookie(name: string, value: string, expires?: Date | number, domain?: string, path?: string, httpOnly?: boolean, secure?: boolean, sameSite?: "Strict" | "None" | "Lax"): string;
/**
* 删除客户端的 Cookie
* @param name 要设置的 Cookie 名
*/
deleteCookie(name: string): string;
/**
* 向客户端写入一个 JSON 并关闭连接
* @param data 要写入的数据
*/
writeJSON(data: any): void;
/**
* 向客户端写入一个 HTML 并关闭连接
* @param data 要写入的数据
*/
writeHTML(data: string): void;
}
/** 表示一个 HTTP 服务器(支持 HTTPS、HTTP/2) */
export interface HTTPServer extends Http2SecureServer {
}
/** 表示 HTTP 服务器的附加选项 */
export interface HTTPServerOptions extends ServerOptions, SecureServerOptions {
}
/** 表示一个 HTTP 请求对象 */
export interface HTTPRequest extends Omit {
}
/** 表示一个 HTTP 响应对象 */
export interface HTTPResponse extends Omit {
}
/**
* 解析一个 `multipart/form-data` 请求内容
* @param body 要解析的原始数据
* @param boundary 请求头标记的分隔符
*/
export declare function parseMultipart(body: Buffer, boundary: string): {
[key: string]: string | HTTPFile | (string | HTTPFile)[];
};
/** 表示一个 HTTP 请求文件 */
export declare class HTTPFile {
/** 获取文件名 */
readonly fileName: string;
/** 获取当前文件的请求头 */
readonly headers: IncomingHttpHeaders;
/** 文件的内容所在的二进制缓存对象 */
private _body;
/** 文件的内容在二进制缓存对象的开始索引(从 0 开始) */
private _startIndex;
/** 文件的内容在二进制缓存对象的结束索引(从 0 开始)(不含) */
private _endIndex;
/**
* 初始化新的 HTTP 请求文件
* @param headers 请求头
* @param body 文件的内容所在的二进制缓存对象
* @param startIndex 文件的内容在二进制缓存对象的开始索引(从 0 开始)
* @param endIndex 文件的内容在二进制缓存对象的结束索引(从 0 开始)(不含)
*/
constructor(fileName: string, headers: IncomingHttpHeaders, body: Buffer, startIndex?: number, endIndex?: number);
/** 获取文件的字节大小 */
get contentLength(): number;
/** 获取当前文件的 MIME 类型 */
get contentType(): string;
/** 获取当前文件的编码 */
get contentEncoding(): string;
/** 获取请求文件的二进制内容 */
get body(): Buffer;
/** 获取请求文件的文本内容 */
get text(): string;
}
/**
* 解析请求的数据
* @param request 请求数据
* @param maxAllowedContentLength 最大允许的内容长度
*/
export declare function parseBodyAsBuffer(request: IncomingMessage, maxAllowedContentLength?: number): Promise;
/**
* 解析请求的数据为文本
* @param request 请求数据
* @param maxAllowedContentLength 最大允许的内容长度
*/
export declare function parseBodyAsText(request: IncomingMessage, maxAllowedContentLength?: number): Promise;
/**
* 解析请求的数据为 JSON
* @param request 请求数据
* @param maxAllowedContentLength 最大允许的内容长度
*/
export declare function parseBodyAsJSON(request: IncomingMessage, maxAllowedContentLength?: number): Promise;
/**
* 解析含表单的请求数据
* @param request 请求数据
* @param maxAllowedContentLength 最大允许的内容长度
*/
export declare function parseBodyAsMultipartForm(request: IncomingMessage, maxAllowedContentLength?: number): Promise<{
[key: string]: string | HTTPFile | (string | HTTPFile)[];
}>;
/** 解析 HTTP Cookies 头 */
export declare function parseCookies(value: string | undefined): any;
/** 表示一个 HTTP 会话状态管理对象 */
export declare class HTTPSessionManager {
/** 获取用户存储会话 ID 的 Cookie 名 */
readonly cookieName: string;
/** 获取会话共享的域 */
readonly domain?: string;
/** 获取会话过期的秒数 */
readonly maxAge: number;
/** 是否只允许在安全协议下传输会话 ID */
readonly secure: boolean;
/** 清理过期会话的计时器 */
private timer;
/**
* 初始化新的 HTTP 会话状态管理对象
* @param maxAge 会话过期的秒数
* @param domain 会话共享的域
* @param secure 只允许在安全协议下传输会话 ID
* @param cookieName 存储会话 ID 的 Cookie 名
*/
constructor(maxAge?: number, domain?: string, secure?: boolean, cookieName?: string);
/** 所有会话状态对象,键为远程 IP + 会话 ID */
private readonly _sessions;
/**
* 获取属于某个请求的会话对象
* @param request 当前的请求对象
* @param response 当前的响应对象
*/
getSession(request: HTTPRequest, response: HTTPResponse): {
[key: string]: any;
};
/**
* 清除属于某个请求的会话对象
* @param request 当前的请求对象
* @param response 当前的响应对象
*/
deleteSession(request: HTTPRequest, response: HTTPResponse): void;
/**
* 生成一个新的会话 ID
* @param request 当前的请求对象
*/
private createSessionId;
/** 清理已过期的会话数据 */
clean(): void;
/** 释放占用的系统资源 */
close(): void;
}