本帖最后由 blake 于 2017-8-9 12:28 编辑
response.setHeader(name, value)设置默认头某个字段内容。如果这个头即将被发送,内容会被替换。如果你想设置更多的头, 就使用一个相同名字的字符串数组。 例如: - response.setHeader("Content-Type", "text/html");
复制代码或 - response.setHeader("Set-Cookie", ["type=ninja", "language=javascript"]);
复制代码 response.headersSentBoolean (只读)。如果headers发送完毕,则为 true,反之为 false。 response.sendDate默认值为 true。若为 true,当 headers 里没有 Date 值时,自动生成 Date 并发送。 只有在测试环境才能禁用; 因为 HTTP 要求响应包含 Date 头. response.getHeader(name)读取一个在队列中但是还没有被发送至客户端的header。名字是大小写敏感。仅能再头被flushed前调用。 例如: - var contentType = response.getHeader('content-type');
复制代码 response.removeHeader(name)从即将发送的队列里移除头。 例如: - response.removeHeader("Content-Encoding");
复制代码 response.write(chunk[, encoding][, callback])这个方法将发送响应体数据块。可能会多次调用这个方法,以提供 body 成功的部分内容。 chunk 可以是字符串或 buffer。如果 chunk 是字符串,第二个参数表明如何将它编码成字节 流。encoding 的默认值是'utf8'。最后一个参数在刷新这个数据块时调用。 注意:这个是原始的 HTTP body,和高级的multi-part body 编码无关。 第一次调用 response.write() 的时候,将会发送缓存的头信息和第一个 body 给客户端。第二次,将会调用 response.write()。Node 认为你将会独立发送流数据。这意味着,响应缓存在第一个数据块中。 如果成功的刷新全部数据到内核缓冲区,返回 true 。如果部分或全部数据在用户内存中还处于排队状况,返回 false 。当缓存再次释放的时候,将会触发 'drain'。 response.addTrailers(headers)这个方法给响应添加 HTTP 的尾部 header(消息末尾的 header)。 只有数据块编码用于响应体时,才会触发 Trailers;如果不是(例如,请求是HTTP/1.0),它们将会被自动丢弃。 如果你想触发 trailers, HTTP 会要求发送 Trailer 头,它包含一些信息,比如: - response.writeHead(200, { 'Content-Type': 'text/plain',
- 'Trailer': 'Content-MD5' });
- response.write(fileData);
- response.addTrailers({'Content-MD5': "7895bf4b8828b55ceaf47747b4bca667"});
- response.end();
复制代码 response.end([data][, encoding][, callback])这个方法告诉服务器,所有的响应头和响应体已经发送;服务器可以认为消息结束。response.end() 方法必须在每个响应中调用。 如果指定了参数 data,将会在响应流结束的时候调用。
http.request(options[, callback])Node 维护每个服务器的连接来生成 HTTP 请求。这个函数让你可以发布请求。 options 值: - host: 请求的服务器域名或 IP 地址,默认:'localhost'
- hostname: 用于支持 url.parse()。 hostname 优于 host
- port: 远程服务器端口。 默认: 80.
- localAddress: 用于绑定网络连接的本地接口
- socketPath: Unix域 socket(使用host:port或socketPath
- method: 指定 HTTP 请求方法。 默认: 'GET'.
- path: 请求路径。 默认: '/'。如果有查询字符串,则需要包含。例如'/index.html?page=12'。请求路径包含非法字符时抛出异常。目前,只有空格不行,不过在未来可能改变。
- headers: 包含请求头的对象
- auth: 用于计算认证头的基本认证,即 user:password
- agent: 控制Agent的行为。当使用了一个Agent的时候,请求将默认为Connection: keep-alive。可能的值为:
- undefined (default): 在这个主机和端口上使用 global Agent
- Agent object: 在Agent中显式使用 passed .
- false: 选择性停用连接池,默认请求为: Connection: close.
- keepAlive: {Boolean} 持资源池周围的socket,用于未来其它请求。默认值为false。
- keepAliveMsecs: {Integer} 使用HTTP KeepAlive 的时候,通过正在保持活动的sockets发送TCP KeepAlive包的频繁程度。默认值为1000。仅当keepAlive为true时才相关。
http.request() 返回一个 http.ClientRequest类的实例。ClientRequest实例是一个可写流对象。如果需要用 POST 请求上传一个文件的话,就将其写入到ClientRequest对象。 例如: - var postData = querystring.stringify({
- 'msg' : 'Hello World!'
- });
- var options = {
- hostname: 'www.google.com',
- port: 80,
- path: '/upload',
- method: 'POST',
- headers: {
- 'Content-Type': 'application/x-www-form-urlencoded',
- 'Content-Length': postData.length
- }
- };
- var req = http.request(options, function(res) {
- console.log('STATUS: ' + res.statusCode);
- console.log('HEADERS: ' + JSON.stringify(res.headers));
- res.setEncoding('utf8');
- res.on('data', function (chunk) {
- console.log('BODY: ' + chunk);
- });
- });
- req.on('error', function(e) {
- console.log('problem with request: ' + e.message);
- });
- // write data to request body
- req.write(postData);
- req.end();
复制代码注意,例子里调用了 req.end()。http.request() 必须调用 req.end() 来表明请求已经完成,即使没有数据写入到请求 body 里。 如果在请求的时候遇到错误(DNS 解析、TCP 级别的错误或实际 HTTP 解析错误),在返回的请求对象时会触发一个 'error' 事件。 有一些特殊的头需要注意: 发送 Connection: keep-alive 告诉服务器保持连接,直到下一个请求到来。 发送 Content-length 头将会禁用chunked编码。 发送一个 Expect 头,会立即发送请求头,一般来说,发送 Expect: 100-continue ,你必须设置超时,并监听 continue 事件。更多细节参见 RFC2616 Section 8.2.3 。 - 发送一个授权头,将会使用 auth 参数重写,来计算基本的授权。
|