/// /// /// /// /// /// 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; }