前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >修复hexo涉及中文的302问题

修复hexo涉及中文的302问题

作者头像
jeremyxu
发布2018-05-10 17:58:00
1K0
发布2018-05-10 17:58:00
举报

今天在用hexo写博文时遇到一个涉及中文的302问题,记录一下。

当访问链接为http://middle3.dev.vivo.xyz:4000/authors/测试时,控制台报错:

代码语言:javascript
复制
TypeError: The header content contains invalid characters
   at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:358:11)
   at /home/hexo/blog/node_modules/hexo-server/lib/middlewares/route.js:27:11
   at call (/home/hexo/blog/node_modules/connect/index.js:239:7)
   at next (/home/hexo/blog/node_modules/connect/index.js:183:5)
   at /home/hexo/blog/node_modules/hexo-server/lib/middlewares/header.js:9:5
   at call (/home/hexo/blog/node_modules/connect/index.js:239:7)
   at next (/home/hexo/blog/node_modules/connect/index.js:183:5)
   at Function.handle (/home/hexo/blog/node_modules/connect/index.js:186:3)
   at Server.app (/home/hexo/blog/node_modules/connect/index.js:51:37)
   at emitTwo (events.js:106:13)
   at Server.emit (events.js:191:7)
   at HTTPParser.parserOnIncoming [as onIncoming] (_http_server.js:546:12)
   at HTTPParser.parserOnHeadersComplete (_http_common.js:99:23)

跟踪了下hexo-server/lib/middlewares/route.js的代码如下:

代码语言:javascript
复制
var url = route.format(decodeURIComponent(req.url));
var data = route.get(url);
var extname = pathFn.extname(url);

// When the URL is `foo/index.html` but users access `foo`, redirect to `foo/`.
if (!data) {
  if (extname) return next();

  res.statusCode = 302;
  res.setHeader('Location', root + url + '/');
  res.end('Redirecting');
  return;
}

这里url是decode出来的字符串,如果字符串里包含中文,然后调用res.setHeader方法即会报上面的错,解决方法也比较简单,加入一行即可:

代码语言:javascript
复制
if (!data) {
  if (extname) return next();

  url = encodeURI(url);

  res.statusCode = 302;
  res.setHeader('Location', root + url + '/');
  res.end('Redirecting');
  return;
}

进一步查了下,hexo-server的git版本是修复了这个问题的,见这里,但hexo依赖的hexo-server@0.2.0版本却没有修复这个问题,估计很多非英语用户都会遇到这个问题,真坑爹!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档