<一> 发送服务器端响应流

  在createServer()方法的参数值回调函数或服务器对象的request事件函数中的第二个参数值为一个http.ServerResponse对象,可以利用该对象发送服务器响应流。

  1. 可以利用http.ServerResponse对象的writeHead方法来发送响应头信息。

response.writeHead(statusCode,[reasonPhrase],[headers])

  参数介绍:statusCode参数为必填,指定一个三位的HTTP状态码,例如200;

         reasonPhrase参数值为一个字符串,用于指定对于该状态的描述信息;

         headers为一个对象,用于指定服务器端创建的响应头对象。

  响应头中包含一些常用字段如下:

    content-type:用于指定内容类型;对照表

    location:用于将客户端重定向另一个URL地址;

    content-disposition:用于指定一个被下载的文件名;

    content-length:用于指定服务器端响应的字节数;

    set-cookie:用于在客户端设置一个cookie;

    content-encoding:用于指定服务器响应内容的编码方式;

    Cache-Control:用于开启缓存机制;

    Expires:用于指定缓存过期时间;

    Etag:用于指定当服务器响应内容没有变化时不重新下载数据。

例子: node

var http = require('http');

http.createServer(function (req, res) {
res.writeHead(200,{
'Content-Type':'tapplication/x-internet-signup',
'Access-Control-Allow-Origin':'*'
});
res.write('hello world');
res.end();
}).listen(6868);

  html代码 ajax源码封装来源

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
div{
width: 180px;
text-align: center;
background: #cc0000;
font-size: 24px;
color: black;
cursor: pointer;
}
</style>
</head>
<body>
<div id="btn">提交</div>
</body>
<script type="text/javascript" src="./js/ajax_02.js"></script>
<script>
window.onload = function () {
btn.onclick= function () {
_ajax({
url:'http://localhost:6868',
type:'get',
asyc:true, //默认是true
data:{
username:'zhange',
password:'123456'
},
success:function (data) {
btn.innerHTML = data;
},
error:function () { }
});
}
};
</script>
</html>

  打印结果:

  2. 如果没有使用http.ServerResponse对象的writeHead方法指定响应头对象,也可以使用http.ServerResponse对象的setHeader方法单独设置响应头信息。可以通过多个setHeader方法的使用来设置多个响应字段。

response.setHeader(name,value);

  参数介绍:name指定响应字段,value用于指定响应字段值。

  例如:

response.setHeader('Set-Cookie',['type=ninjia','language=javascript'])

  3. 在使用http.ServerResponse对象的setHeader方法设置响应头之后,可以使用http.ServerResponse对象的getHeader方法获取响应头的某个字段值。

response.getHeader(name)

  4. 在使用http.ServerResponse对象的setHeader方法设置响应头之后,可以使用http.ServerResponse对象的removeHeader方法删除一个响应字段

response.removeHeader(name)

  5. http.ServerResponse对象具有一个属性headersSent属性,当响应头已发送时,该属性值为true,当响应头未发送时,该值未false。

例如:

var http = require('http');

http.createServer(function (req, res) {
res.setHeader('Access-Control-Allow-Origin','*');
res.setHeader('Set-Cookie',['type=html','language=javascript']); if(req.url !== '/facicon.ico'){ if(res.headersSent){
console.log('响应头已发送');
}else{
console.log('响应头未发送');
} res.write('发送之前'); if(res.headersSent){
console.log('响应头已发送');
}else{
console.log('响应头未发送');
} res.write('发送之后');
res.end();
} }).listen(6868);

  打印结果

响应头未发送
响应头已发送

  备注:在使用setHeader方法时,当http.ServerResponse对象的write方法被第一次调用时即发送响应头。

  6.在默认情况下,HTTP服务器自动将服务器当前时间作为响应头中的Date字段值发送给客户端。可以通过http.ServerResponse对象的sendDate属性值设置为false的方法在响应头中删除字段。

  可以通过http.ServerResponse对象的statusCode属性值获取HTTP服务器返回的状态码。当不使用http.ServerResponse对象对象的writeHead方法设置状态码时,可以通过该属性值设置HTTP服务器返回的状态码。

  例如:响应头中statusCode=200,有Date字段

var http = require('http');

http.createServer(function (req, res) {
res.setHeader('Access-Control-Allow-Origin','*'); res.statusCode = 200;
// res.sendDate = false;
res.write('hello world n hao');
res.end(); }).listen(6868);

  响应头中statusCode=404,无Date字段

var http = require('http');

http.createServer(function (req, res) {
res.setHeader('Access-Control-Allow-Origin','*'); res.statusCode = 404;
res.sendDate = false;
res.write('hello world n hao');
res.end(); }).listen(6868);

  7. 可以使用http.ServerResponse对象的addTrailers方法在响应数据的尾部追加一个头信息。

response.addTrailers(headers)

  参数介绍: headers为一个要追加的对象。

  在使用addTrailers方法时,响应流必须使用分块编码方式。如果客户端HTTP的版本为1.1以上(包括1.1),则响应流自动设置为分块编码方式。如果客户端使用HTTP的版本为1.0,则addTrailers方法将不能生效。

  如果需要使用addTrailers方法,则必须在响应头中添加Trailers字段并且将字段设置为追加的响应头所指定的字段名。

var http = require('http');

http.createServer(function (req, res) {
// res.setHeader('Access-Control-Allow-Origin','*'); res.writeHead(200,{
'Content-Type':'text/plain',
'Access-Control-Allow-Origin':'*',
'Trailers':'Content_MD5' // 定义 追加字段
}); res.write('zhui jia'); res.addTrailers({'Content_MD5':'23ewsdfas90sdf2e'}); // 定义追加属性值 res.end();
}).listen(6868);

  

  8. 可以使用http.ServerResponse对象的write方法发送响应内容。如果http.ServerResponse对象的write方法使用之前开发者没有使用http.ServerResponse对象的writeHead方法,那么Node.js将隐式创建一个响应头

response.write(chunk,[encoding])

  参数介绍:chunk 必填,参数猴子为一个buffer对象或者一个字符串。如果为一个字符串,可以使用encoding参数指定任何编码该字符串,当不使用该参数时,默认为“UTF-8”。

  在使用http.ServerResponse对象的end方法结束响应之前,可以调用多次write方法。在第一次调用wirete方法时,Node.js将立即发送缓存的响应头信息及write方法中指定的响应内容。当之后再调用wirte方法时,Node.js将单独发送write方法中指定的响应内容。该响应内容将与之前发送的响应内容一起缓存在客户端中。

  在一个快速的网络中,当数据量较少的时候,Node.js总是将数据直接发送到操作系统内核缓存汇总,然后从该内核缓存区中取出数据发送给对方。在一个慢速的网络中或者需要发送大量数据时,HTTP服务器发送的数据并一定会立即被客户端接收,在这种情况下,Node.js会将这些数据缓存在内存中,并在对方接收数据的情况下将内存中的数据通过操作系统内核缓存区发送给对方。

  http.ServerResponse对象的wirte方法返回一个布尔类型的返回值,当数据直接发送到操作系统内核缓存中,该返回值为true,当数据首先缓存在内存中,该返回值为false。

  http.ServerResponse对象的end方法结束响应内容。

response.end([chunk],[encoding]);

  9. 可以使用http.ServerResponse对象的setTimeout方法设置响应超时是将。如果在指定的时间内服务器没有做出响应(可能是因为网络间的连接出现问题,也可能是因为服务器故障或网络防火墙组织了客户端与服务器的连接),则响应超时,同时触发http.ServerResponse对象的timeout事件。

response.setTimeout(msecs,[callback])  

  如果不使用回调函数callback,则可以调用timeout事件

response.on('timeout',function(){
// 回调函数
})

  例如:

var http = require('http');

http.createServer(function (req, res) {
res.setHeader('Access-Control-Allow-Origin','*'); res.setTimeout(1000);
res.on('timeout',function () {
console.log('响应超时');
}); setTimeout(function () {
res.write('hello world');
res.end();
},2000);
}).listen(6868);

  10. 在http.ServerResponse对象的end方法被调用之前,如果连接中断,将触发http.ServerResponse对象的close事件。可以通过监听该事件并指定事件回调函数的方法指定当连接中断时所需要执行的操作。

response.on('close',function(){
//回调函数
})

  例如:

var http = require('http');

http.createServer(function (req, res) {
res.setHeader('Access-Control-Allow-Origin','*'); res.on('close',function () {
console.log('连接被中端');
}); setTimeout(function () { // 设置超时时间
res.write('hello world');
res.end();
},5000);
}).listen(6868);

node基础学习——http基础知识-02-http响应数据流的更多相关文章

  1. node基础学习——http基础知识-01-客户单请求

    <一> HTTP基础createServer()相关事件介绍 1. 创建HTTP服务器 server = http.createServer([requestListener]) // 下 ...

  2. salesforce lightning零基础学习(二) lightning 知识简单介绍----lightning事件驱动模型

    看此篇博客前或者后,看一下trailhead可以加深印象以及理解的更好:https://trailhead.salesforce.com/modules/lex_dev_lc_basics 做过cla ...

  3. WebService基础学习(一)—基础知识

    一.WebService 1.什么是WebService      Web Service(WEB服务)能够快捷和方便地综合结合各种系统.商务和任何应用平台.利用最新的Web Service 标准能够 ...

  4. 【python基础学习】基础重点难点知识汇总

    python中decorator装饰器 语法示例: @decorator 什么是装饰器: 问题: 定义一个函数后 在运行时动态增加功能 又不想改动函数本身的代码 示例: # 希望对下列函数调用增加lo ...

  5. java基础学习总结——基础语法1

    一.标识符

  6. JAVA基础学习day24--Socket基础一UDP与TCP的基本使用

    一.网络模型 1.1.OIS参考模型 1.2.TCP/IP参考模型 1.3.网络通讯要素 IP地址:IPV4/IPV6 端口号:0-65535,一般0-1024,都被系统占用,mysql:3306,o ...

  7. JAVA基础学习day23--GUI基础

    一.GUI概述 1.1.GUI概述 Graphical User Interface(图形用户接口) 用图形的方式,来显示计算机操作的界面, CLI: Command line User Interf ...

  8. Python基础学习Day7 基础数据类型的扩展 集合 深浅copy

    一.基础数据类型的扩展 1.1GBK ---> UTF - 8 # str --->bytes s1 = '太白' # 字符串是unicode编码 b1 = s1.encode('gbk' ...

  9. 2019-10-8:渗透测试,基础学习,php基础,会话,文件包含,笔记

    php面向对象基础->调用符号构造函数construct,主要用来创建对象时初始化对象,为成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 析构函数destructor,与构造函数相 ...

随机推荐

  1. java js ur特殊格式处理 json 特殊格式处理

    url特殊格式处理: js中使用 encodeURIComponent() 编码对应的value $.ajax({ type: "post", url: "/tb_are ...

  2. Centos7.3之K8S安装初体验

    容器是发展趋势,所以是时候从虚拟机中脱离出来,投入到容器化的怀抱中了. 曾经试过安装k8s,都没有成功,各种乱七八糟的报错,于是一拖再拖,这次总算发现一个可以快速部署的工具,终于安装成功了. 这个k8 ...

  3. Java并发编程核心概念一览

    作者博客地址 https://muggle.javaboy.org. 并行相关概念 同步和异步 同步和异步通常来形容一次方法的调用.同步方法一旦开始,调用者必须等到方法结束才能执行后续动作:异步方法则 ...

  4. k8s-ingress安装

    一.编写nginx-ingress-controller.yaml文件 apiVersion: extensions/v1beta1 kind: Deployment metadata:   name ...

  5. Kafka Connect简介

    Kafka Connect简介 http://colobu.com/2016/02/24/kafka-connect/#more Kafka 0.9+增加了一个新的特性Kafka Connect,可以 ...

  6. Spring AOP的常用方法

    转  https://blog.csdn.net/u014745069/article/details/84887765

  7. unity 在editor编辑器下创建多个按钮

    入坑最后发现就几句话,真是气死人了.发现自己掉坑里,脑子就变笨了,把代码贴给你们,保持大脑清醒. using System.Collections; using System.Collections. ...

  8. Json schema前奏 关于JSON

    目录 1. 何为 JSON 2. JSON 基本语法 3. JSON值的类型 4. 与XML比较 5. 辅助工具 1. 何为 JSON JSON( JavaScript Object Notation ...

  9. 初学zipkin搭建链路追踪服务注意事项

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/fsy9595887/article/det ...

  10. 什么才是JavaEE基础

    近日里,很多人邀请我回答各种j2ee开发的初级问题,我无一都强调java初学者要先扎实自己的基础知识,那什么才是java的基础知识?又怎么样才算掌握了java的基础知识呢?这个问题还真值得仔细思考. ...