NodeJS http.ServerRequest & http.ServerResponse
2017-05-14 21:57
531 查看
http.ServerRequest
这个对象通常由HTTP SERVER建立而非用户手动建立,
并且会作为传递给
'request'事件监听器第一个参数(就是http.Server相关的request事件当中的函数的参数,一个是request,一个是response)
此对象的可以触发以下事件:
1. Event: ‘data’
function (chunk) { }
当接收到
消息体(客户端发过来的给服务器的)中的一部分时候会发出data 事件。
例如:代表
消息体的数据块(chunk)将作为唯一的参数传递给回调函数。
这个时候数据已经按照
传输编码进行了解码(不是字符集编码)。
消息体本身是一个字符串,
可以使用
request.setBodyEncoding()方法设定
消息体的编码。
2. Event: ‘end’
function () { }
每次完全接收完信息后都会触发一次。
没有参数,当这个事件发出后,
将不会再触发其他事件。
1. request.method
request.method是一个只读字符串。例如’GET’,’DELETE’
2. request.url
代表所请求的URL 字符串.它仅包括实际的HTTP 请求中的URL 地址。如果这个请求是GET /status?name=ryan HTTP/1.1\r\n Accept: text/plain\r\n \r\n
则request.url 应当是
'/status?name=ryan'
※ 如果你想要解析这个URL 中的各个部分
如果你想要解析这个URL 中的各个部分,你应当使用
require('url').parse(request.url). Example:
node> require('url').parse('/status?name=ryan') { href: '/status?name=ryan' , search: '?name=ryan' , query: 'name=ryan' , pathname: '/status' }
※ 如果你想从查询字符串中提出这些参数
如果你想从查询字符串中提出这些参数,你可以使用require(‘querystring’).parse 方法,或者传一个true 作为第二个 参数给require(‘url’).parse 方法。 Example:
node> require('url').parse('/status?name=ryan', true) { href: '/status?name=ryan' , search: '?name=ryan' , query: { name: 'ryan' } , pathname: '/status' }
3. request.headers 只读
4. request.httpVersion
这是HTTP 协议版本(字符串形式), 只读。例如
'1.1','1.0'。
request.httpVersionMajor是第一个数字,
request.httpVersionMinor是第二个数字。
5. request.setEncoding(encoding=’null’)
设置此请求的包体的字集编码,'utf8'或者'binary'。
缺省值是null,这表示’data’事件的参数将会是一个Buffer 对象。
6. request.pause()
暂停此request 触发事件.对于控制上传非常有用。7. request.resume()
恢复一个暂停的request。8. request.connection
request.connection是一个代表当前连接的
net.Stream对象。
对于HTTPS,使用
request.connection.verifyPeer()和
request.connection.getPeerCertificate()来获得客户端(浏览 器)的认证详情。
http.ServerResponse
这个对象一般由HTTP 服务器(也就是http.Server)建立而非用户自己手动建立。它作为'request'事件的第二个参数,这是一个可写流。
1. response.writeHead(statusCode, [reasonPhrase], [headers])
这个方法的是用来发送一个响应报文头给本次的请求方,第一个参数状态码是由一个3位数字所构成的HTTP 状 态,比如404之类的。
最后一个参数headers 是响应头具体内容.
也可以使用一个方便人们直观了解的
reasonPhrase作为第二个参数。
例如:
var body = 'hello world'; response.writeHead(200, { 'Content-Length': body.length, 'Content-Type': 'text/plain' });
在一次完整信息交互中此方法只能调用一次,
并且必须在调用
response.end()之前调用。
2. response.write(chunk, encoding=’utf8’)
此方法必须在writeHead 方法调用后才可以被调用,它负责发送响应报文中的部分数据。如果要发送一个报文体的多个部分,则可以多次调用此方法。
参数
chunk可以是一个字符串或者一个buffer。
如果chunk 是一个字符串,则第二个参数指定如何将这个字符串 编码成字节流,
缺省情况下,编码为’utf8’。
注意:
这是一个原始格式http 报文体,
和高层协议中的多段消息体编码格式
({'Transfer-Encoding':'chunked'})无关。
第一次调用
response.write()时,
此方法会将已经缓冲的消息头和第一块消息体发送给客户。
当第二次调用 response.write()的时候,
node 将假定你想要以流的形式发送数据(分别发送每一个数据块并不做缓存)。
这样, 其实response 对象只是缓存消息体的第一个数据块。
3. response.end([data], [encoding])
这个方法会告诉服务器此响应的所有报文头及报文体已经发出;服务器在此调用后认为这条信息已经发送完毕;
这个方法必须对每个响应调用一次。
如果指定data 参数,
他就相当于调用了
response.write(data, encoding)然后跟着调用了
response.end()。
相关文章推荐
- NodeJS http.ClientRequest & http.ClientResponse
- node.js http中请求request和响应response信息说明
- nodejs request & response 对象
- [Node.js]29. Level 6: Socket.io: Setting up Socket.io server-side & Client socket.io setup
- Request.ServerVariables("HTTP_X_FORWARDED_FOR")
- Nodejs + request + zlib 处理压缩格式http返回数据
- Multi-Core HTTP Server with NodeJS
- Request.ServerVariables("HTTP_REFERER")的工作方式
- 当前地址: <a href='"+Request.ServerVariables("HTTP_HOST").Item+"/a.asp?id="+sId+"'>点击查看</a>";
- 取得浏览器当前语言 Request.ServerVariables("HTTP_ACCEPT_LANGUAGE")
- [摘]HttpContext, HttpRequest, HttpResponse, HttpRuntime, HttpServerUtility
- 取得浏览器当前语言 Request.ServerVariables("HTTP_ACCEPT_LANGUAGE")
- [Node.js]27. Level 5: URL Building & Doing the Request
- node.js中的http.request.end方法使用说明
- Request.ServerVariables("HTTP_X_FORWARDED_FOR")
- InternalServerError时 HttpWebRequest 的 GetResponse 方法处理策略
- Request.ServerVariables("HTTP_USER_AGENT")
- Nodejs HTTP请求的超时处理 Nodejs HTTP Client Request Timeout Handle