node.js中的端口号,关于content-Type的补充

所有的联网的程序都需要进行网络通信,计算机中只有一个物理网卡,而且网卡的地址,同一个局域网中,网卡的地址是唯一的,网卡是通过唯一的IP地址来进行定位的,创造域名是因为好记。

定位了IP地址就能定位到服务器。服务器中有软件,比如qq软件,微信软件,浏览器软件,apache服务器软件

IP地址用来定位计算机,端口号用来定位具体的应用程序,所有需要联网通信的应用程序都会占用一个端口号

端口号的范围在0-65536之间,在计算机中有一些默认的端口号,最好不要去使用例如http的80

这里打印出发送请求的客户端的端口号和IP地址

server.on('request',function(req,res){
  console.log('请求我的客户端的端口号是'+req.socket.remoteAddress,req.socket.remotePort)
//PS D:\100projects\nodepro> node .\07-http-url-res.js
//服务器已经启动了,可以访问了
请求我的客户端的端口号是::ffff:127.0.0.1 62694

可以同时开启多个服务,但是一定要确保不同服务占用的端口号不一致才可以。关于乱码问题,在服务端默认发送的数据,其实是UTF-8编码的内容,但是浏览器不知道你是UTF-8的编码的内容,会按照当前的操作系统的默认编码去解析,中文操作的系统默认是gbk,解决方法,正确的告诉浏览器我发送给你的编码是什么编码的,在http协议中,content-type就是用来告知对方我给你发送的数据内容是什么类型

res.setHeader('Content-Type','text/plain;charset = utf-8')
res.end('hello 世界')
res.end('<p>hello html<a href = "">点我</a></p>')

上面有个需要注意的地方就是,如果不写text/plain,浏览器会进行html渲染,如果加了text/plain则输出括号里面的字符串。发送html文件的时候要写text/html,即:

res.setHeader('Content-Type','text/html;charset = utf-8')
res.end('<p>hello html<a href = "">点我</a></p>')

渲染一个网页,并且不需要重新开启服务,直接修改对应资源的内容,用fs模块的readfile这里是一个引入html的例子

var http = require('http')
var fs = require('fs')
var server = http.createServer()
server.on('request',function(req,res){
  var url = req.url
  if (url==='/'){
    // 肯定不这么干
    // res.end('!Doc....太长了 也无法修改')
    // 所以我们引入fs模块 把读取到的内容赋值给data
    fs.readFile('./resource/index.html',function(err,data){
      if (err){
        res.setHeader('Content-Type','text/plain;charset=utf-8')
        res.end('文件读取失败,请稍后重试')
      }else {
        //data默认是二进制数据,可以通过.toString转为咱们的字符串
        // res.end()支持两种数据类型,一种是二进制一种是字符串
        res.setHeader('Content-Type','text/html;charset=utf-8')
        res.end(data.toString())
      }
    })
  }
})
server.listen(3000,function(){
  console.log('server is running')
})

这边的data默认是二进制数据,end()支持二进制数据,所以可以直接打印,并且由setheader规定html渲染,但是加了tostring好像也没有问题的,效果貌似就如同

res.end('<p>hello html<a href = "">点我</a></p>')

如果想读取图片成功,1.content-type改为’image/jpeg’,同时就不需要指定编码了

var http = require('http')
var fs = require('fs')
var server = http.createServer()
server.on('request',function(req,res){
  var url = req.url
  if (url==='/'){
    // 肯定不这么干
    // res.end('!Doc....太长了 也无法修改')
    // 所以我们引入fs模块 把读取到的内容赋值给data
    fs.readFile('./resource/index.html',function(err,data){
      if (err){
        res.setHeader('Content-Type','text/plain;charset=utf-8')
        res.end('文件读取失败,请稍后重试')
      }else {
        //data默认是二进制数据,可以通过.toString转为咱们的字符串
        // res.end()支持两种数据类型,一种是二进制一种是字符串
        res.setHeader('Content-Type','text/html;charset=utf-8')
        res.end(data.toString())
      }
    })
  } else if(url==='/a'){
    fs.readFile('./resource/kitty.jpg',function(err,data){
      if (err){
        res.setHeader('Content-Type','image/jpeg;charset=utf-8')
        res.end('文件读取失败,请稍后重试')
      }else {
        //data默认是二进制数据,可以通过.toString转为咱们的字符串
        // res.end()支持两种数据类型,一种是二进制一种是字符串
        res.setHeader('Content-Type','image/jpeg')
        res.end(data)
      }
    })
  }
})
server.listen(3000,function(){
  console.log('server is running')
})

完整代码。。这个是resource目录层级
不知道为啥今天学到这里的时候vscode直接占了700M多内存,是不是插件太多还是我开的文件太多了。。

查询content-type的对应不同文件的解析,可以去网站

# http://tool.oschina.net/commons

每天练习一个markdown语法~
今天是加粗~~粗粗粗粗 ctrl+B

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值