三木社区

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 240|回复: 0
打印 上一主题 下一主题

nodejs http

[复制链接]

1562

主题

1564

帖子

4904

积分

博士

Rank: 8Rank: 8

积分
4904
跳转到指定楼层
楼主
发表于 2017-8-9 12:27:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 blake 于 2017-8-9 12:28 编辑

response.setHeader(name, value)
设置默认头某个字段内容。如果这个头即将被发送,内容会被替换。如果你想设置更多的头, 就使用一个相同名字的字符串数组。
例如:
  1. response.setHeader("Content-Type", "text/html");
复制代码
  1. response.setHeader("Set-Cookie", ["type=ninja", "language=javascript"]);
复制代码
response.headersSent
Boolean (只读)。如果headers发送完毕,则为 true,反之为 false。
response.sendDate
默认值为 true。若为 true,当 headers 里没有 Date 值时,自动生成 Date 并发送。
只有在测试环境才能禁用; 因为 HTTP 要求响应包含 Date 头.
response.getHeader(name)
读取一个在队列中但是还没有被发送至客户端的header。名字是大小写敏感。仅能再头被flushed前调用。
例如:
  1. var contentType = response.getHeader('content-type');
复制代码
response.removeHeader(name)
从即将发送的队列里移除头。
例如:
  1. response.removeHeader("Content-Encoding");
复制代码
response.write(chunk[, encoding][, callback])
如果调用了这个方法,且还没有调用 response.writeHead(),将会切换到默认的 header,并更新这个header。
这个方法将发送响应体数据块。可能会多次调用这个方法,以提供 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 头,它包含一些信息,比如:
  1. response.writeHead(200, { 'Content-Type': 'text/plain',
  2. 'Trailer': 'Content-MD5' });
  3. response.write(fileData);
  4. response.addTrailers({'Content-MD5': "7895bf4b8828b55ceaf47747b4bca667"});
  5. response.end();
复制代码
response.end([data][, encoding][, callback])
这个方法告诉服务器,所有的响应头和响应体已经发送;服务器可以认为消息结束。response.end() 方法必须在每个响应中调用。
如果指定了参数 data,将会在响应流结束的时候调用。

http.request(options[, callback])
Node 维护每个服务器的连接来生成 HTTP 请求。这个函数让你可以发布请求。
参数options是对象或字符串。如果 options 是字符串,会通过 url.parse() 自动解析。
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时才相关。

可选参数 callback 将会作为一次性的监视器,添加给 'response' 事件。
http.request() 返回一个 http.ClientRequest类的实例。ClientRequest实例是一个可写流对象。如果需要用 POST 请求上传一个文件的话,就将其写入到ClientRequest对象。
例如:
  1. var postData = querystring.stringify({
  2.   'msg' : 'Hello World!'
  3. });

  4. var options = {
  5.   hostname: 'www.google.com',
  6.   port: 80,
  7.   path: '/upload',
  8.   method: 'POST',
  9.   headers: {
  10.     'Content-Type': 'application/x-www-form-urlencoded',
  11.     'Content-Length': postData.length
  12.   }
  13. };

  14. var req = http.request(options, function(res) {
  15.   console.log('STATUS: ' + res.statusCode);
  16.   console.log('HEADERS: ' + JSON.stringify(res.headers));
  17.   res.setEncoding('utf8');
  18.   res.on('data', function (chunk) {
  19.     console.log('BODY: ' + chunk);
  20.   });
  21. });

  22. req.on('error', function(e) {
  23.   console.log('problem with request: ' + e.message);
  24. });

  25. // write data to request body
  26. req.write(postData);
  27. 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 参数重写,来计算基本的授权。

回复

使用道具 举报

Archiver|手机版|小黑屋|三木电子社区 ( 辽ICP备11000133号-4 )

辽公网安备 21021702000620号

GMT+8, 2025-6-27 00:33 , Processed in 0.028768 second(s), 23 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表