http响应
拼接并返回http报文。
这里顶一个一个默认报文结构,其他报文都在此结构上更改。
export class DefaultHeader { public code = 200; public status = 'OK'; public httpVersion = 'HTTP/1.1'; public headers: Headers = new Map<any, any>();
constructor(request: Request) { if (!(request.method === 'OPTIONS')) { this.headers.set('Content-Type', 'text/plain; charset=UTF-8'); } }}
sendText函数实现返回响应,这里需要获取响应体的字节大小,并设置Content-Length字段。
function sendText(text: string | undefined) { defaultHeader.headers.set( 'Content-Length', Buffer.byteLength(text, 'utf-8'), ); socket.write(spliceHeader(defaultHeader) + '\r\n' + text); socket.end();}
spliceHeader将defaultHeader分解成字符串
export function spliceHeader(defaultHeader: DefaultHeader) { let string = `${defaultHeader.httpVersion} ${defaultHeader.code} ${defaultHeader.status}\r\n`; defaultHeader.headers.forEach((value, key) => { string += `${key}:${value}\r\n`; }); return string;}