解决响应内容的显示问题
- 在前面增强版HTTP服务器中,有一个文字响应过来乱码的问题,这一节主要就是解决它
setHeader
- setHeader
- 作用: 为隐式响应头设置单个响应头的值。
- 语法:
response.setHeader(name, value)
,其中name
为响应头的类型,value
为响应类型的值。
例:没有加setHeader
- 首先,还是
stronghttp.js
文件
const http = require('http');
let server = http.createServer();
server.on('request', function(request, response) {
if(request.url == '/') {
response.end(`虞美人·听雨
少年听雨歌楼上,红烛昏罗帐。壮年听雨客舟中,江阔云低,断雁叫西风。
而今听雨僧庐下,鬓已星星也。悲欢离合总无情,一任阶前点滴到天明。`);
} else if(request.url == '/login') {
response.end(`阮郎归·耒阳道中为张处父推官赋
山前灯火欲黄昏,山头来去云。鹧鸪声里数家村,潇湘逢故人。
挥羽扇,整纶巾,少年鞍马尘。如今憔悴赋招魂,儒冠多误身。`);
}
});
server.listen(8080, function() {
console.log('loading...')
});
- 然后,在命令行运行,浏览器访问
localhost:8080
image.png
- 注意: 这里没有加上
response.setHeader('Content-Type', 'text/plain; charset=utf-8;')
,所以显示的响应内容好像乱码了一样,其实这里并不是乱码,服务器返回的相应数据默认就是utf-8
,但是浏览器在你没有告诉它是什么字符集的时候,它会选择默认的字符集来进行编码,中文操作系统默认的就是gbk
,所以这里的显示会出现问题。
例: 加上setHeader()
- 首先,给
stronghttp.js
加上response.setHeader()
const http = require('http');
let server = http.createServer();
server.on('request', function(request, response) {
response.setHeader('Content-Type', 'text/plain; charset=utf-8;');
if(request.url == '/') {
response.end(`虞美人·听雨
少年听雨歌楼上,红烛昏罗帐。壮年听雨客舟中,江阔云低,断雁叫西风。
而今听雨僧庐下,鬓已星星也。悲欢离合总无情,一任阶前点滴到天明。`);
} else if(request.url == '/login') {
response.end(`阮郎归·耒阳道中为张处父推官赋
山前灯火欲黄昏,山头来去云。鹧鸪声里数家村,潇湘逢故人。
挥羽扇,整纶巾,少年鞍马尘。如今憔悴赋招魂,儒冠多误身。`);
}
});
server.listen(8080, function() {
console.log('loading...')
});
- 然后,命令行运行,在浏览器访问
localhost:8080
结果如下:
image.png
当然,Conten-Type
的类型并不仅仅只有text/plain
还有text/html
,text/html
就是将文本解析成html
代码来响应回来,例子就不举了,很简单