【问题标题】:Should I have to include res.writeHead in node.js when I deal with HTML5?处理 HTML5 时是否必须在 node.js 中包含 res.writeHead?
【发布时间】:2013-06-04 21:51:57
【问题描述】:

我已经开始学习 HTML5/CSS3/JavaScript/Node.js 并且没有使用 HTML4 的经验,更不用说 Web 应用程序了。所以这可能是一个愚蠢的问题,但无论如何我在网上寻找时都看不到答案,因为我在网上和书籍上阅读的所有示例都假定是用 HTML4 编写的,所以我我现在在这里。

在 Node.js 中,当您向客户端发送响应标头时,您将编写以下示例代码:

var http = require('http');
http.createServer(function(req, res){
    res.writeHead(200, {'Content-Type':'text/html'});
    res.write(some_data);
    res.end();
});

但是,在 HTML5 中,您不需要编写标题 {'Content-Type':'text/html'},对吧?那么我可以在我的节点应用程序文件中删除一行res.writeHead 吗?我知道有些浏览器仍然不支持 HTML5,但如果可行,那么我想让我的代码只适用于 HTML5/CSS3。

另外,当我完成创建 Web 应用程序并发布它时,在处理仍然不支持 HTML5/CSS3 的浏览器(例如,旧的 IE)时,我应该去哪条路径。

1) 即使那里的某些内容崩溃并且看起来很糟糕,仍然会发布它

2) 出于安全考虑,完全屏蔽使用该浏览器的用户,并提示他们使用其他浏览器,如果可行的话(我不知道,但我怀疑我可以访问客户端的浏览器信息并处理相应地使用 JavaScript...对吗?)

我不想费心使我的代码适用于所有浏览器,因为我想将它作为一种爱好发布并使用 HTML5/CSS3 花费尽可能少的时间来构建一个漂亮的网站。

谢谢。

【问题讨论】:

  • 这些标头是 HTTP 标头,而不是 HTML

标签: javascript html node.js css browser


【解决方案1】:

content-type:text/html 是浏览器将页面识别为 HTML 所必需的content-type 不是 HTML5(或 HTML4)规范的一部分;它是 HTTP 标头的一部分;它告诉浏览器正在接收什么样的内容。

如果您提供了错误的内容类型,浏览器可能无法显示您的页面,或者可能只是将其接收到的内容显示为原始文本。内容类型是 HTTP 协议的必需部分。

如果您需要证明,here's a page on GitHub, which is HTML code, but which is served with a non-HTML content-type。如您所见,浏览器将其显示为纯文本。

默认情况下,某些 Web 服务器可能会为 HTML 页面发送正确的 mime 类型,具体取决于服务器配置(通常这是基于服务器查看文件扩展名来确定要发送的内容类型,但这取决于服务器配置)。

但是,如果服务器未配置为为您的页面发送正确的 mime 类型,那么是的,您确实需要自己在代码中执行此操作。浏览器不够聪明,无法自行解决。

您还需要为您的 CSS、JS、JSON、图像文件等提供适当的 content-type 标头。同样,如果这些文件作为具有可识别文件扩展名的静态文件提供,那么很可能是默认服务器config 将发送正确的内容类型,而无需您考虑。但是,如果您正在编写一个动态创建这些文件的程序,那么您很可能需要将内容类型正确设置为程序的一部分,以便浏览器能够理解并正确显示它们。

【讨论】:

  • 需要指出的是,GitHub 页面的标头中带有 Content-Type: text/plain; charset=utf-8。内容类型是必需的。
  • @Quentin:是的,这确实是强制性的。重点是要证明,仅仅因为代码是 HTML,并不意味着浏览器会神奇地将其呈现为 HTML,这正是 OP 所期望的。 :-)
  • 感谢您的精彩解释。我得到了它。我仍在寻找可以帮助我解决不支持的浏览器问题的人。
  • @user2360798 - 对于不受支持的浏览器,唯一相关的是 IE v8 或更早版本。其中,只有 IE8 仍然拥有庞大的用户群。要支持带有 HTML5 的 IE8,首先将 Modernizr 添加到您的站点。然后找出你需要哪些 IE8 没有的功能,或者想办法为 IE8 优雅地降级网站,或者找出是否有任何 polyfill 脚本可以帮助 IE8 支持那些功能。如果您需要 Modernizr 或 Polyfills 方面的帮助,可以在 SO 上找到大量提示。
  • 再次感谢。真的很感激。
【解决方案2】:

但是,在 HTML5 中,您不需要编写标题 {'Content-Type':'text/html'},对吧?

错了。每个返回一些内容的 HTTP 响应都需要指定内容的 Content-Type。

【讨论】:

    猜你喜欢
    • 2016-11-16
    • 1970-01-01
    • 2017-12-04
    • 2013-06-22
    • 2022-09-29
    • 2013-08-21
    • 2018-08-04
    • 1970-01-01
    • 2017-05-19
    相关资源
    最近更新 更多