Skip to main content

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