DAY14: HTPP服务器:Respone对象

Day13: HTTP这篇的范例中很常看到使用respone对象,而respone对象就是SeverResponse一个实际例子。

一、response的头部讯息

首先设置response的头部讯息可以透过setHeader或是writeHead
前者只能设response header单个属性内容;後者可以一次设置所有的状态码、响应头、状态资讯。

writeHead(statusCode,[, StatusMessage[, headers]]);

statusCode,在Node中若不手动设置,状态码的值会默认为200
而另一个数字比较常在网路上看到,有没有曾经点进一个网站後,页面上只有一串文字"404 not found"。
https://ithelp.ithome.com.tw/upload/images/20210925/20140244fIzg8XB7rT.png
图片来源: https://lis7o.com/wp-content/uploads/2016/03/404_file_directory_not_found-1466002402791.png
这个404就是状态码(statusCode),代表是服务器找不到请求,或是遇到非法的路径,
而200是请求成功,且对应的页面会返回。
当然也不只有这两组状态码,只是在服务器中是最常看到的。
可以参考资料:https://developer.mozilla.org/zh-TW/docs/Web/HTTP/Status ,有更多状态码的讯息。

//respone.writeHead
respone.writeHead(200,//状态码
  {'Content-Lenghth':'Buffer.byteLenght(body)',//告知浏览器发送的数据类型
  'Content-Type':'text/html;charset=UTF-8'});//具体会如何显示数据

在上面程序码旁边已经标注了writeHead中的各个用意;
另外要提的是headers各个格式:

1.代表可以识别HTML的结构,并使用UFT-8编码分析。

'Content-Type':'text/html;charset=UTF-8'

2.代表设置成纯文本的结构,并不可识别Html的结构。

'Content-Type':'text/plain'

3.代表设置图片结构(png/jpg)。

'Content-Type':'image/png'
'Content-Type':'image/jpg'

二、response body

//response body
response.write("<html>");
response.write("<body>");
response.write("<h1> My name is Nicole!!</h1>");
response.write("<p1> response body </p>");
response.write("</body>");
response.write("</html>");
response.end();

由於上面过程会显得繁琐,也可以使response body作为end的方法的参数作返回,请看下面例子。

//respone end
response.end("<html><body><h1>My name is Nicole!!</h1><p1> response 
body </p1></body></html>");

这样就简洁多了!

三、response end

在每个HTTP请求的最後都会调用end方法,就是结束响应,当客户端请求完成後,都会被调用执行。
如果不调用end的话,客户端就会一直等待,就像在使用浏览器时,网页一直没跑完的样式,如下图红框处:
https://ithelp.ithome.com.tw/upload/images/20210925/20140244h0Uwqslwct.jpg

红框的x,就代表这个请求还没完成。

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

data: 代表end方法执行完所要输出的字元,如果指定了data值,代表执行完
response.end()後,会执行一个response.write()
encoding: 对应data的字符编号。

例子:
使用Day13: HTTP修改一下这篇的其中一个例子

//respone end
var http=require("http");
const sever=http.createServer((req,res)=>
{
  res.writeHead(200,{'Content-Type':'text/html;charset=UTF-8'});
  res.write('<h1>Welcome Nicole Page!!!</h1>');
  res.write('<h2>欢迎来到Nicole网页</h2>')
  res.end("<p>Hello My name is Nicole!</p>");
});
sever.listen(3000);

若有使用中文的部分,记得在response.writeHead()中的header设定UFT-8,不然会出先奇怪的文字喔!
若没有使用中文的话,省略也没关系!
执行结果:
https://ithelp.ithome.com.tw/upload/images/20210925/20140244NmFgQzjoj2.png

总结:
好的~今天的部分就到这里了~
明天会介绍HTTP服务器的GET请求!
明天见罗!!!!


<<:  Data layer testing (2)

>>:  Day11 Channel

Day21 用更高阶的网路框架实现更多功能

上一回介绍过 CC: Tweaked Wired Modem 和 Wireless Modem 的网...

Siemens EDA 线上研讨会 - 车用半导体设计 !

https://www.digitimes.com.tw/seminar/mentor_202105...

Day 01-Workshop Azure Get-Started

上一篇:Day 01-引言:Terraform 是个好东西 课程内容与代码会放在 Github 上:...

部署 Google App Script 专案(1)

今天要接着完成部署 GAS 专案并且让 Line Bot 可以简单的回应验证码给使用者。 将先前的 ...

[Day25] swift & kotlin 游戏篇!(7) 小鸡BB-游戏制作-API与游戏动画

游戏示意 swift - 游戏功能 接下来当我们点击按钮 我们来打个API 并告知道有没有猜对 来看...