首页>>前端>>Node->nodejs之http模块

nodejs之http模块

时间:2023-11-29 本站 点击:0

http

nodejs提供给了我们http模块,http有两个作用

1、搭建服务端,express就是基于http.createServer

2、做客户端,向其他服务端请求

Agent模块

http协议是通过,浏览器发送请求,服务端 响应请求这种方式交互,每次交互都需要进行,建立-传输-销毁的过程,http提供了持久连接即已经通过的连接可以重复使用,在客户端这个操作是浏览器完成的,但是在服务端需要我们自己来完成,所以有了agent 我们必须使用agent类来创建一个实例化,进行配置之后再去设置我们的请求的的agent

 const http=require('http'); const agent=new http.Agent({      keepAlive:true, //开启长连接,因为每一次请求服务器,都要创建一次连接,完成后关闭,所以开启keep-live后会使得连接持续有效    maxSockets:10, //最大的套接字(socket)数量    keepAliveMsecs:1000, //指定Tcp的初始延迟时间    maxTotalSockets:10, //主机允许的最大套接字(socket数量)    maxFreeSockets:156,//主机在空闲状态下保持打开的最大套接字(socket)数量    timeout:2000,//创建socket设置超时 }) http.get({    hostname: 'localhost',         port: 80,//端口号        path: '/',        agent: agent  // 仅为这个请求创建新代理 },res=>{    res.on('data',data=>{       console.log(data.toString(),'data')    }) })

上边的Agent的配置信息一直在提到套接字(socket)所以我们来看一下socket是什么

什么是socket?

socket的中文是 "插座" ,在计算机通信领域socket被译为套接字,它是计算机之间进行通信的一种或者一种方式,通过socket这种方式一台计算机可以接收数据,也可以发送数据。 socket最典型的例子就在身边,就是web服务器和浏览器,浏览器获取用户输入的url,服务器分析接收到的url将对应的html返回给浏览器。 浏览器在服务器发起请求时会有socket,然后服务器接收请求时也会有socket,socket一定是成对出现的

agent的方法

agent.createConnection

 创建一个可用于http请求的socket,返回一个socket或者是可读可写的双工流

const a=agent.createConnection({ //创建一个可以用于http请求的socket //返回一个可读可写的双工流 //path  或者  port},(err,stream)=>{    console.log(e,'e');    console.log(s,'s')    a.write('11')})a.on('data',e=>{    console.log(e.toString())})

agent.getName

获取当前使用agent的请求的名称

  agent.getName({host:'127.0.0.1',port:'80'})

agent.sockets

返回当前代理的socket的数组

 console.log(agent.sockets)

ClientRequest类

clientRequest类是由http.request返回给我们的,用于管理已经被放入请求队列中的请求,http.request是供给我们向服务端发起请求的,http.request创建请求后会返回给我们ClientRequest类,在请求创建时并不会发起,我们可以通过setHeader,getHeader,removeHead来对请求头进行操作,在request.end()之后请求才会发起

实例演示

 const Http=require('http'); const ClientRequest=Http.request({  protoclo:'http:', //请求的协议  host:'localhost', // 地址//域名  port:'80', //端口号  method:'GET', //请求方式  agent,  path:'/' ,//请求路径'  timeout:1000 //超时时间  },res=>{      //请求受到 响应之后的回调  //res就是 http.IncomingMessage的实例这个在后边写    res.on('data',data=>{       //data就是返回过来的数据    }) }) //http.request只是创建请求,创建完请求后就会返回ClientRequest //我们调用ClientRequest.end才会发起请求 ClientRequest.end();

ClientRequest的方法

getHeader,setHeader,removeHead (获取,修改,删除请求头)

 我们可以在发起请求之前去进行获取,修改和删除请求头

  const Http=require('http'); const ClientRequest=Http.request({  protoclo:'http:',   host:'localhost',   port:'80',  method:'GET',   agent,  path:'/' ,  timeout:1000},res=>{res.on('data',data=>{} })  //在发起请求前去获取,修改,删除,。请求头  console.log(ClientRequest.getHeader('host'));     //getHeader方法接收一个参数,请求头的名称,返回值是请求头的值   ClientRequest.setHeader('cookie','{c:"11"}')     //setHeader 方法接收两个参数,第一个是要设置的请求头的名称,第二个是请求头的值   ClientRequest.removeHead('cookie');    //removeHead 方法接收一个参数  , 要删除的请求头的名称 ClientRequest.end();

destory

destory方法用于关闭请求

 创建一个可用于http请求的socket,返回一个socket或者是可读可写的双工流0

destoryed

destoryed是ClinetRequest的属性,它的值分为以下两种情况

 创建一个可用于http请求的socket,返回一个socket或者是可读可写的双工流1

close

close事件,当请求被关闭时会被触发

 创建一个可用于http请求的socket,返回一个socket或者是可读可写的双工流2

connect

connect事件是只有当请求是connect请求时才会被触发

 创建一个可用于http请求的socket,返回一个socket或者是可读可写的双工流3

continue

continue事件,只有请求头带有 'Expect:100-continue' 才会被触发

 创建一个可用于http请求的socket,返回一个socket或者是可读可写的双工流4

finish

 创建一个可用于http请求的socket,返回一个socket或者是可读可写的双工流5

 创建一个可用于http请求的socket,返回一个socket或者是可读可写的双工流6

information

information事件是在请求发送1xx中间时触发

 创建一个可用于http请求的socket,返回一个socket或者是可读可写的双工流7

socket

socket事件,在socket被分配到请求时触发

 创建一个可用于http请求的socket,返回一个socket或者是可读可写的双工流8

Server类 (node做web服务器的重中之重)

server是用于我们使用node搭建服务器,express框架就是基于Server类的

实例演示

 创建一个可用于http请求的socket,返回一个socket或者是可读可写的双工流9

Server的方法

checkContinue

当服务端的请求头有Expect:100-continue会触发此事件,而且不再触发request事件

const a=agent.createConnection({ //创建一个可以用于http请求的socket //返回一个可读可写的双工流 //path  或者  port},(err,stream)=>{    console.log(e,'e');    console.log(s,'s')    a.write('11')})a.on('data',e=>{    console.log(e.toString())})0

checkExpectation

请求头中带有,Expect属性且值不是100-continue会触发此事件,且不再触发request事件

const a=agent.createConnection({ //创建一个可以用于http请求的socket //返回一个可读可写的双工流 //path  或者  port},(err,stream)=>{    console.log(e,'e');    console.log(s,'s')    a.write('11')})a.on('data',e=>{    console.log(e.toString())})1

clientError

当客户端连接触发error事件时,会触发此事件

const a=agent.createConnection({ //创建一个可以用于http请求的socket //返回一个可读可写的双工流 //path  或者  port},(err,stream)=>{    console.log(e,'e');    console.log(s,'s')    a.write('11')})a.on('data',e=>{    console.log(e.toString())})2

close

当调用Server.close()时触发

const a=agent.createConnection({ //创建一个可以用于http请求的socket //返回一个可读可写的双工流 //path  或者  port},(err,stream)=>{    console.log(e,'e');    console.log(s,'s')    a.write('11')})a.on('data',e=>{    console.log(e.toString())})3

connect

接收connect请求

const a=agent.createConnection({ //创建一个可以用于http请求的socket //返回一个可读可写的双工流 //path  或者  port},(err,stream)=>{    console.log(e,'e');    console.log(s,'s')    a.write('11')})a.on('data',e=>{    console.log(e.toString())})4

request

每次接收到请求时都会触发request事件

const a=agent.createConnection({ //创建一个可以用于http请求的socket //返回一个可读可写的双工流 //path  或者  port},(err,stream)=>{    console.log(e,'e');    console.log(s,'s')    a.write('11')})a.on('data',e=>{    console.log(e.toString())})5

close

close方法用于关闭服务,调用此方法会触发close事件

const a=agent.createConnection({ //创建一个可以用于http请求的socket //返回一个可读可写的双工流 //path  或者  port},(err,stream)=>{    console.log(e,'e');    console.log(s,'s')    a.write('11')})a.on('data',e=>{    console.log(e.toString())})6

listen

listen方法用于开启服务,

const a=agent.createConnection({ //创建一个可以用于http请求的socket //返回一个可读可写的双工流 //path  或者  port},(err,stream)=>{    console.log(e,'e');    console.log(s,'s')    a.write('11')})a.on('data',e=>{    console.log(e.toString())})7

headersTimeout

headersTimeout方法用来限制,解析请求头的时间,如果超时则关闭连接

const a=agent.createConnection({ //创建一个可以用于http请求的socket //返回一个可读可写的双工流 //path  或者  port},(err,stream)=>{    console.log(e,'e');    console.log(s,'s')    a.write('11')})a.on('data',e=>{    console.log(e.toString())})8

listening

listenting属性用来查看是否正在监听连接,即服务是否开启

const a=agent.createConnection({ //创建一个可以用于http请求的socket //返回一个可读可写的双工流 //path  或者  port},(err,stream)=>{    console.log(e,'e');    console.log(s,'s')    a.write('11')})a.on('data',e=>{    console.log(e.toString())})9

ServerResponse类

ServerResponse就是request事件里的,res

  agent.getName({host:'127.0.0.1',port:'80'})0

res的方法

SetHeader

  agent.getName({host:'127.0.0.1',port:'80'})1

  agent.getName({host:'127.0.0.1',port:'80'})2

getHeader

获取响应头

  agent.getName({host:'127.0.0.1',port:'80'})3

hasHeader

查询响应后

  agent.getName({host:'127.0.0.1',port:'80'})4

getHeadersNames

获取到所有响应头的名称

  agent.getName({host:'127.0.0.1',port:'80'})5

getHeaders

获取到所有的响应头

  agent.getName({host:'127.0.0.1',port:'80'})6

statusCode

设置 响应的状态码

  agent.getName({host:'127.0.0.1',port:'80'})7

statusMeassage

设置响应的状态信息

  agent.getName({host:'127.0.0.1',port:'80'})8

write

写入响应内容,并发送

  agent.getName({host:'127.0.0.1',port:'80'})9

end

结束写入内容,可参考writeableStream的end方法

 console.log(agent.sockets)0

finish

finish事件,在开始响应请求时触发

 console.log(agent.sockets)1

close

close事件,请求响应完成时触发

 console.log(agent.sockets)2

IncomingMessage类

IncomingMessage分别存在于http.server(做服务端)里和http.request(发起请求)里边,在server里是request,在request里是response,它是一个可读流,包含了请求头,和数据和响应状态

实例演示

 console.log(agent.sockets)3

IncominMessage的方法

close

 console.log(agent.sockets)4

 console.log(agent.sockets)5

complete 属性

如果已经成功解析HTTP消息,则complete属性为true,否则为false 最好在服务关闭的时候进行判断

 console.log(agent.sockets)6

destory

关闭服务  或者  关闭请求

 console.log(agent.sockets)7

headers  httpVersion

http版本httpAVersion 接收到的headers 在服务端是客户端发来请求的的headers和http版本 在客户端是服务端返回数据的headers和http版本

 console.log(agent.sockets)8

method (仅使用于server)

仅仅在服务端使用,客户端请求的方式,get 或者Post等

 console.log(agent.sockets)9

socket

获取互相连接的socket,可在服务端或者客户端获取

url

仅在服务端获取,得到客户端的url

clientRequest类是由http.request返回给我们的,用于管理已经被放入请求队列中的请求,http.request是供给我们向服务端发起请求的,http.request创建请求后会返回给我们ClientRequest类,在请求创建时并不会发起,我们可以通过setHeader,getHeader,removeHead来对请求头进行操作,在request.end()之后请求才会发起0

statucCode

仅仅在客户端获取,得到请求响应的状态码

clientRequest类是由http.request返回给我们的,用于管理已经被放入请求队列中的请求,http.request是供给我们向服务端发起请求的,http.request创建请求后会返回给我们ClientRequest类,在请求创建时并不会发起,我们可以通过setHeader,getHeader,removeHead来对请求头进行操作,在request.end()之后请求才会发起1

常见的http状态码
clientRequest类是由http.request返回给我们的,用于管理已经被放入请求队列中的请求,http.request是供给我们向服务端发起请求的,http.request创建请求后会返回给我们ClientRequest类,在请求创建时并不会发起,我们可以通过setHeader,getHeader,removeHead来对请求头进行操作,在request.end()之后请求才会发起2

http上的方法

METHODS

列出所有node支持的请求方法

clientRequest类是由http.request返回给我们的,用于管理已经被放入请求队列中的请求,http.request是供给我们向服务端发起请求的,http.request创建请求后会返回给我们ClientRequest类,在请求创建时并不会发起,我们可以通过setHeader,getHeader,removeHead来对请求头进行操作,在request.end()之后请求才会发起3

STATUS_CODES

返回一个对象,包含了所有http状态码,以及描述

clientRequest类是由http.request返回给我们的,用于管理已经被放入请求队列中的请求,http.request是供给我们向服务端发起请求的,http.request创建请求后会返回给我们ClientRequest类,在请求创建时并不会发起,我们可以通过setHeader,getHeader,removeHead来对请求头进行操作,在request.end()之后请求才会发起4

createServer

createServer方法,帮助我们快速搭建一个web服务器,它返回一个Server实例

clientRequest类是由http.request返回给我们的,用于管理已经被放入请求队列中的请求,http.request是供给我们向服务端发起请求的,http.request创建请求后会返回给我们ClientRequest类,在请求创建时并不会发起,我们可以通过setHeader,getHeader,removeHead来对请求头进行操作,在request.end()之后请求才会发起5

get

http.get方法,相当于http.request方法,主要用于请求,区别就是它的method固定于get

clientRequest类是由http.request返回给我们的,用于管理已经被放入请求队列中的请求,http.request是供给我们向服务端发起请求的,http.request创建请求后会返回给我们ClientRequest类,在请求创建时并不会发起,我们可以通过setHeader,getHeader,removeHead来对请求头进行操作,在request.end()之后请求才会发起6

maxHeaderSize

设置请求头大小(默认是16kb)

clientRequest类是由http.request返回给我们的,用于管理已经被放入请求队列中的请求,http.request是供给我们向服务端发起请求的,http.request创建请求后会返回给我们ClientRequest类,在请求创建时并不会发起,我们可以通过setHeader,getHeader,removeHead来对请求头进行操作,在request.end()之后请求才会发起7

globalAgent

设置全局的agent

clientRequest类是由http.request返回给我们的,用于管理已经被放入请求队列中的请求,http.request是供给我们向服务端发起请求的,http.request创建请求后会返回给我们ClientRequest类,在请求创建时并不会发起,我们可以通过setHeader,getHeader,removeHead来对请求头进行操作,在request.end()之后请求才会发起8

request

request方法用于发起请求,它返回ClientRequest实例

clientRequest类是由http.request返回给我们的,用于管理已经被放入请求队列中的请求,http.request是供给我们向服务端发起请求的,http.request创建请求后会返回给我们ClientRequest类,在请求创建时并不会发起,我们可以通过setHeader,getHeader,removeHead来对请求头进行操作,在request.end()之后请求才会发起9
原文:https://juejin.cn/post/7096405468137914398


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/Node/884.html