Node http模塊

Node.js的http模塊提供有用的功能和類來構建HTTP服務器

HTTP核心模塊是Node網絡的關鍵模塊。

可以使用

const http = require('http')

該模塊提供了一些屬性和方法以及一些類。

特性

http.METHODS

此屬性列出了所有受支持的HTTP方法:

> require('http').METHODS
[ 'ACL',
  'BIND',
  'CHECKOUT',
  'CONNECT',
  'COPY',
  'DELETE',
  'GET',
  'HEAD',
  'LINK',
  'LOCK',
  'M-SEARCH',
  'MERGE',
  'MKACTIVITY',
  'MKCALENDAR',
  'MKCOL',
  'MOVE',
  'NOTIFY',
  'OPTIONS',
  'PATCH',
  'POST',
  'PROPFIND',
  'PROPPATCH',
  'PURGE',
  'PUT',
  'REBIND',
  'REPORT',
  'SEARCH',
  'SUBSCRIBE',
  'TRACE',
  'UNBIND',
  'UNLINK',
  'UNLOCK',
  'UNSUBSCRIBE' ]

http.STATUS_CODES

此屬性列出了所有HTTP狀態代碼及其描述:

> require('http').STATUS_CODES
{ '100': 'Continue',
  '101': 'Switching Protocols',
  '102': 'Processing',
  '200': 'OK',
  '201': 'Created',
  '202': 'Accepted',
  '203': 'Non-Authoritative Information',
  '204': 'No Content',
  '205': 'Reset Content',
  '206': 'Partial Content',
  '207': 'Multi-Status',
  '208': 'Already Reported',
  '226': 'IM Used',
  '300': 'Multiple Choices',
  '301': 'Moved Permanently',
  '302': 'Found',
  '303': 'See Other',
  '304': 'Not Modified',
  '305': 'Use Proxy',
  '307': 'Temporary Redirect',
  '308': 'Permanent Redirect',
  '400': 'Bad Request',
  '401': 'Unauthorized',
  '402': 'Payment Required',
  '403': 'Forbidden',
  '404': 'Not Found',
  '405': 'Method Not Allowed',
  '406': 'Not Acceptable',
  '407': 'Proxy Authentication Required',
  '408': 'Request Timeout',
  '409': 'Conflict',
  '410': 'Gone',
  '411': 'Length Required',
  '412': 'Precondition Failed',
  '413': 'Payload Too Large',
  '414': 'URI Too Long',
  '415': 'Unsupported Media Type',
  '416': 'Range Not Satisfiable',
  '417': 'Expectation Failed',
  '418': 'I\'m a teapot',
  '421': 'Misdirected Request',
  '422': 'Unprocessable Entity',
  '423': 'Locked',
  '424': 'Failed Dependency',
  '425': 'Unordered Collection',
  '426': 'Upgrade Required',
  '428': 'Precondition Required',
  '429': 'Too Many Requests',
  '431': 'Request Header Fields Too Large',
  '451': 'Unavailable For Legal Reasons',
  '500': 'Internal Server Error',
  '501': 'Not Implemented',
  '502': 'Bad Gateway',
  '503': 'Service Unavailable',
  '504': 'Gateway Timeout',
  '505': 'HTTP Version Not Supported',
  '506': 'Variant Also Negotiates',
  '507': 'Insufficient Storage',
  '508': 'Loop Detected',
  '509': 'Bandwidth Limit Exceeded',
  '510': 'Not Extended',
  '511': 'Network Authentication Required' }

http.globalAgent

指向Agent對象的全局實例,該實例是http.Agent班級。

它用於管理HTTP客戶端的連接持久性和重用,它是Node HTTP網絡的關鍵組成部分。

更多內容http.Agent稍後對類進行描述。

方法

http.createServer()

返回一個新的實例http.Server班級。

用法:

const server = http.createServer((req, res) => {
  //handle every single request with this callback
})

http.request()

向服務器發出HTTP請求,並創建一個實例http.ClientRequest班級。

http.get()

如同http.request(),但會自動將HTTP方法設置為GET並調用req.end()自動地。

班級

HTTP模塊提供5個類:

  • http.Agent
  • http.ClientRequest
  • http.Server
  • http.ServerResponse
  • http.IncomingMessage

http.Agent

節點創建一個全局實例http.Agent類,用於管理HTTP客戶端(Node HTTP網絡的關鍵組件)的連接持久性和重用。

該對象確保對服務器的每個請求都排隊,並且單個套接字被重用。

它還維護一個套接字池。出於性能原因,這是關鍵。

http.ClientRequest

一個http.ClientRequest對象何時創建http.request()或者http.get()叫做。

收到回應後,response通過響應調用事件,並帶有http.IncomingMessage實例作為參數。

可以通過兩種方式讀取響應的返回數據:

  • 你可以打電話給response.read()方法
  • 在裡面response事件處理程序,您可以為data事件,因此您可以偵聽流進其中的數據。

http.Server

通常使用創建新服務器時實例化並返回該類。http.createServer()

擁有服務器對像後,就可以訪問其方法:

  • close()阻止服務器接受新連接
  • listen()啟動HTTP服務器並偵聽連接

http.ServerResponse

由創建http.Server並作為第二個參數傳遞給request一旦發生火災。

眾所周知並在代碼中用作res

const server = http.createServer((req, res) => {
  //res is an http.ServerResponse object
})

您將始終在處理程序中調用的方法是end(),它將關閉響應,消息已完成,服務器可以將其發送給客戶端。必須在每個響應上調用它。

這些方法用於與HTTP標頭進行交互:

  • getHeaderNames()獲取已設置的HTTP標頭的名稱列表
  • getHeaders()獲取已設置的HTTP標頭的副本
  • setHeader('headername', value)設置HTTP標頭值
  • getHeader('headername')獲取已設置的HTTP標頭
  • removeHeader('headername')刪除已經設置的HTTP標頭
  • hasHeader('headername')如果響應中設置了該標頭,則返回true
  • headersSent()如果標頭已經發送到客戶端,則返回true

處理標頭後,您可以通過調用將其發送給客戶端response.writeHead(),它接受statusCode作為第一個參數,可選的狀態消息和標頭對象。

要將數據發送到響應正文中的客戶端,請使用write()。它將緩衝的數據發送到HTTP響應流。

如果尚未發送標題,請使用response.writeHead(),它將首先發送標頭,以及請求中設置的狀態代碼和消息,您可以通過設置statusCodestatusMessage屬性值:

response.statusCode = 500
response.statusMessage = 'Internal Server Error'

http.IncomingMessage

一個http.IncomingMessage對像是由以下人員創建的:

  • http.Server當聽request事件
  • http.ClientRequest當聽response事件

它可以用來訪問響應:

  • 使用其狀態statusCodestatusMessage方法
  • 標頭使用其headers方法或rawHeaders
  • HTTP方法使用method方法
  • HTTP版本使用httpVersion方法
  • 使用網址url方法
  • 底層套接字使用socket方法

使用流訪問數據,因為http.IncomingMessage實現Readable Stream接口。

免費下載我的Node.js手冊


更多節點教程: