首先引入http模块

获取http.ServerResponse对象的方式,
1.http.createServer(function(req,res){}) 其中res是http.ServerResponse对象

2.var server = http.createServer().listen(9332,'localhost')
   server.on('request',function(req,res){})    server的request对象的request事件中,res为http.ServerResponse对象

http.ServerResponse对象的方法:

1.报头:

1.writeHead()

2.setHeader()

3.getHeader(类型参数)

4.removeHeader()

5.addTrailers()    追加头信息

2.报文

1.write() 报文内容,返回值是true/false

  2.end()   结束响应,必须调用end()方法,否则是超时,没有响应.

3.setTimeout()    服务器没有响应时,触发这个事件.

http.ServerResponse对象的属性:

1.headerSent      当头部已经有响应后,res.headerSent 为true 否则为false.可以通过这个属性来判断是否已经响应.

2.statusCode

3.sendDate         true/fasle   当为false时,将删除头部时间

http.ServerResponse监听的事件

1.timeout事件

2.close事件

3.request事件

4.checkContinue事件

5.connect事件

6.clientError事件

设置头部信息,有两个方法:

  1.setHeader(name,value)方法可以调用多次,但真正写入到头部的必须调用一次writeHead()

  2.http.ServerResponse.writeHead(statusCode[,reasonPhrase][,headers]) 其中headers 为设置的头对象

3.设置的头部信息的内容:

content-type: 内容类型, [type]/[subtype]; parameter

      location: 将客户端的请求重定向

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

content-length: 服务器响应的字段数

set-cookie:设置cookie

Cache-Control: 开启缓存

Expires:缓存失效时间

Etag:当服务器没有变化时,不重新下载文件

(1)content-type的类型,这是几个大类,然后后面是具体的小类:

    Text:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的;

    Multipart:用于连接消息体的多个部分构成一个消息,这些部分可以是不同类型的数据;

    Application:用于传输应用程序数据或者二进制数据;

    Message:用于包装一个E-mail消息;

    Image:用于传输静态图片数据;

    Audio:用于传输音频或者音声数据;

    Video:用于传输动态影像数据,可以是与音频编辑在一起的视频数据格式。

(2)通常还有一些设置跨域的内容:

    res.setHeader("Access-Control-Allow-Origin", "*");

    res.setHeader("Access-Control-Allow-Headers", "X-Requested-With");

    res.setHeader("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");

报文信息:

在调用res.end()之前可以多次调用res.write()方法,res.write()返回一个true/fasle,

当没有响应或者超时时(这种情况遇到很多次,进程没有挂掉,一直处在无响应,但是客户端一直可以请求),res.setTimeout(毫秒数,callback),当超时时,会触发res.on(timeout,function(){}),如果没有回调函数,则自动调用end()结束请求.

当网络较好,数据量较少时,,将数据直接发送到上操作系统的内核缓存区,然后从内核缓存去取出数据发送给对方.返回值是true

当数据比较大,网速慢时,先将数据缓存在内存中,如果客户端可以接收数据了,再将数据发送到内核缓存区中,最后发送给对方.返回值是false

因此在大量数据的时候,会有内存爆满.

这是在并发情况下的用async做的控制,

当集合中元素很多,不能一次全部并行操作,又不想一个一个按顺序来,可以使用forEachLimit函数。它可以设定一批处理几个,每一批内并行执行,批与批之间顺序执行。

  1. async.forEachLimit(eles, 5000, (list, cb) => {
  2. // do something;
  3. }); 
 

获取req的报文信息

通过req.对象来获取(req对象参考上面的获取方法)

req.属性包含以下属性:

1.method:客户端请求的方法

2.url:客户端请求的url

3.headers:请求头对象,包含cookies和浏览器信息(报文)

Connection:keep-alive

    Content-Length:874

    Content-Type:application/json; charset=utf-8

    Date:Fri, 20 Jan 2017 03:25:38 GMT

    ETag:W/"36a-yQDJ0iz/THXt81YLCAOKTg"

    Vary:X-HTTP-Method-Override

    Via:1.0 am-forward (squid/3.1.23)

    X-Cache:MISS from am-forward

    X-Cache-Lookup:MISS from am-forward:3128

    X-powered-by:www.yunshipei.com

accept-encoding: 'gzip, deflate, sdch'                  //说明浏览器支持的压缩格式

httpVersion: http协议版本号

socket:客户端监听的socket对象

对于传输的压缩的处理请参考:http://www.poluoluo.com/jzxy/201504/353581.html.这时不仅要判断content-encoding还要与客户端协商一致.

获取部分内容

在头部中设置:

1.Range: bytes=5001-10000   //5001-10000字节

2.Range: bytes=5001-           //5001字节以后的

3.Range: bytes=-3000,5000-7000 //从一开始到3000字节和5000-7000字节

原生node的header的更多相关文章

  1. 原生node写一个静态资源服务器

    myanywhere 用原生node做一个简易阉割版的anywhere静态资源服务器,以提升对node与http的理解. 相关知识 es6及es7语法 http的相关网络知识 响应头 缓存相关 压缩相 ...

  2. 原生node实现简易留言板

    原生node实现简易留言板 学习node,实现一个简单的留言板小demo 1. 使用模块 http模块 创建服务 fs模块 操作读取文件 url模块 便于path操作并读取表单提交数据 art-tem ...

  3. node.js系列(实例):原生node.js+formidable模块实现简单的文件上传

    /** * 原生node.js结合formidable模块实现图片上传改名 * @Author:Ghost * @Date:2016/07/15 * @description: * 1.引入模块htt ...

  4. node.js系列(实例):原生node.js实现接收前台post请求提交数据

    前台界面: 前台代码: <form class="form-horizontal" method="post" action="http:127 ...

  5. 编写原生Node.js模块

    导语:当Javascript的性能需要优化,或者需要增强Javascript能力的时候,就需要依赖native模块来实现了. 应用场景 日常工作中,我们经常需要将原生的Node.js模块做为依赖并在项 ...

  6. NW.js安装原生node模块node-printer控制打印机

    1.安装原生node模块 #全局安装nw-gyp npm install -g nw-gyp #设置目标NW.js版本 set npm_config_target=0.31.4 #设置构建架构,ia3 ...

  7. koa 基础(十)原生node.js 在 koa 中获取表单提交的数据

    1.app.js // 引入模块 const Koa = require('koa'); const router = require('koa-router')(); /*引入是实例化路由 推荐*/ ...

  8. 使用原生node.js搭建HTTP服务器,支持MP4视频、图片传输,支持下载rar文件

    前言 如何安装node.js,如何搭建一个简易的http服务器我这里就不再赘述了,不懂的同学可以先去学习一下.当然了,我写的也就属于简易版的增强版,大家有什么高见的欢迎提出,然后进入正题. 目录结构 ...

  9. node.js系列(实例):原生node.js实现静态资源管理

    /** * node入门之综合案例(一):简易路由 * @Author : by Ghost * @Date : 2016/07/11 * @Description : * 1.引入以下模块 * ht ...

随机推荐

  1. Linux常用命令学习8---(用户和用户组管理)

    1.用户和用户组     用户和用户组概念        用户:使用操作系统的人(Linux支持多个用户在同一时间登陆同一个操作系统)        用户组:具有相同权限的一组用户(Linux系统中可 ...

  2. 第二十六篇:两个SOUI新控件 ---- SListView和SComboView(借用Andorid的设计)

    SOUI原来实现的SListBoxEx的效率一直是我对SOUI不太满意的地方.包括后来网友实现的SListCtrlEx. 这类控件为每一个列表项创建一个SWindow来容纳数据,当数据量比较大(100 ...

  3. Vue#表单控件绑定

    使用v-model 在表单控件上实现数据双向绑定. 单选:https://jsfiddle.net/miloer/bs49p0fx/ <input type="checkbox&quo ...

  4. 如何快速地从mongo中提取数据到numpy以及pandas中去

    mongo数据通常过于庞大,很难一下子放进内存里进行分析,如果直接在python里使用字典来存贮每一个文档,使用list来存储数据的话,将很快是内存沾满.型号拥有numpy和pandas import ...

  5. one_person年轻的程序员

    回顾大学三年,通过良师的教导和自身的刻苦学习,我已初步掌握如何运用计算机编程,也养成了认真对待学习和工作的好习惯! 在思想品德上,本人有良好道德修养,并有坚定的政治方向.我热爱祖国,热爱人民,遵纪守法 ...

  6. 《你不知道的JavaScript -- 上卷》笔记 --- 基于ES6新标准

    1.let A:let关键字:将变量绑定到所在的任意作用域 function process(){ //do something } //在这个块中定义的内容完事就可以销毁 { let someRea ...

  7. 超详细的Xcode代码格式化教程,可自定义样式

    为什么要格式化代码 当团队内有多人开发的时候,每个人写的代码格式都有自己的喜好,也可能会忙着写代码而忽略了格式的问题. 在之前,我们可能会写完代码后,再一点一点去调格式,很浪费时间. 有了ClangF ...

  8. mysql数据库安装及使用

    前言:本文为在ubuntu系统下使用mysql数据库,mysql 版本为:Ver 14.14 Distrib 5.5.43 (mysql版本可在命令行中输入mysql --version显示) 一.m ...

  9. 李洪强iOS经典面试题143-绘图与动画

    李洪强iOS经典面试题143-绘图与动画   绘图与动画 CAAnimation的层级结构 CAPropertyAnimation是CAAnimation的子类,也是个抽象类,要想创建动画对象,应该使 ...

  10. Cenos7 编译安装 Mariadb Nginx PHP Memcache ZendOpcache (实测 笔记 Centos 7.0 + Mariadb 10.0.15 + Nginx 1.6.2 + PHP 5.5.19)

    环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡) 系统版本:CentOS-7.0-1406-x86_64-DVD.iso 安装步骤: 1.准备 1.1 显示系统版 ...