node.js http中请求request和响应response信息说明
Request
http.ServerRequest 是 HTTP请求的信息,是后端开发者最关注的内容。
它一般由http.Server 的 request 事件发送,作为第一个参数传递,
通常简称request 或 req。
HTTP 请求一般可以分为两部分:
请求头(Request Header)
请求体(Requset Body)。
以上内容由于长度较短都可以在请求头解析完成后立即读取。
而请求体可能相对较长,需要一定的时间传输,
因此 http.ServerRequest 提供了以下4个事件用于控制请求体传输。
名称 |
含义 |
data |
当请求体数据到来时,该事件被触发。该事件提供一个参数 |
chunk |
表示接收到的数据。如果该事件没有被监听,那么请求体将会被抛弃。该事件可能会被调用多次。 |
end |
当请求体数据传输完成时,该事件被触发,此后将不会再有数据到来。 |
close |
用户当前请求结束时,该事件被触发。不同于end,如果用户强制终止了传输,也还是调用close。 |
ServerRequest 的属性
名称 |
含义 |
complete |
客户端请求是否已经发送完成 |
httpVersion |
HTTP 协议版本,通常是 1.0 或 1.1 |
method |
HTTP 请求方法,如 GET、POST、PUT、DELETE 等 |
url |
原始的请求路径 |
headers |
HTTP 请求头 |
trailers |
HTTP 请求尾(不常见) |
connection |
当前 HTTP 连接套接字,为 net.Socket 的实例 |
socket |
connection 属性的别名 |
client |
client 属性的别名 |
Response
http.ClientResponse 与 http.ServerRequest 相似,
提供了三个事件data、end和close,
分别在数据到达、传输结束和连接结束时触发,
其中data事件传递一个参数chunk,表示接收到的数据。
ClientResponse 的属性
名称 |
含义 |
statusCode |
HTTP 状态码,如 200、404、500 |
httpVersion |
HTTP 协议版本,通常是 1.0 或 1.1 |
headers |
HTTP 请求头 |
trailers |
HTTP 请求尾(不常见) |
http.ClientResponse 还提供了以下几个特殊的函数。
response.setEncoding([encoding]):设置默认的编码,
当 data 事件被触发时,数据将会以 encoding 编码。
默认值是 null,即不编码,以Buffer的形式存储。常用编码为 utf8。
response.pause():暂停接收数据和发送事件,方便实现下载功能。
response.resume():从暂停的状态中恢复。
打印信息如下:
IncomingMessage {
_readableState:
ReadableState {
objectMode: false,
highWaterMark: 16384,
buffer: [],
length: 0,
pipes: null,
pipesCount: 0,
flowing: null,
ended: false,
endEmitted: false,
reading: false,
sync: true,
needReadable: false,
emittedReadable: false,
readableListening: false,
resumeScheduled: false,
defaultEncoding: 'utf8',
ranOut: false,
awaitDrain: 0,
readingMore: false,
decoder: null,
encoding: null },
readable: true,
domain: null,
_events: {},
_eventsCount: 0,
_maxListeners: undefined,
socket:
Socket {
_connecting: false,
_hadError: false,
_handle:
TCP {
_externalStream: {},
fd: 13,
reading: true,
owner: [Circular],
onread: [Function: onread],
onconnection: null,
writeQueueSize: 0 },
_parent: null,
_host: null,
_readableState:
ReadableState {
objectMode: false,
highWaterMark: 16384,
buffer: [],
length: 0,
pipes: null,
pipesCount: 0,
flowing: true,
ended: false,
endEmitted: false,
reading: true,
sync: false,
needReadable: true,
emittedReadable: false,
readableListening: false,
resumeScheduled: false,
defaultEncoding: 'utf8',
ranOut: false,
awaitDrain: 0,
readingMore: false,
decoder: null,
encoding: null },
readable: true,
domain: null,
_events:
{ end: [Object],
finish: [Function: onSocketFinish],
_socketEnd: [Function: onSocketEnd],
drain: [Object],
timeout: [Function],
error: [Function: socketOnError],
close: [Object],
data: [Function: socketOnData],
resume: [Function: onSocketResume],
pause: [Function: onSocketPause] },
_eventsCount: 10,
_maxListeners: undefined,
_writableState:
WritableState {
objectMode: false,
highWaterMark: 16384,
needDrain: