如何使用node.js定义具有自定义协议/方案的路由?

时间:2017-02-20 09:23:46

标签: node.js http protocols

我取消了互联网,但没有找到任何有关如何使用node.js创建自定义方案(my-app://)的路线的良好资源。

严格地说,它不是真正的自定义协议,它将是http,但服务于另一种方案。

我该怎么做?

我可以安装任何npm包。

1 个答案:

答案 0 :(得分:1)

如果它是HTTP,那么即使其他一些客户端应用程序正在使用另一种方案进行连接,您仍然可以在服务器端将其作为HTTP。

实际上,在HTTP协议中,您没有在请求中获得协议方案。你得到主机中的主机(主机名和端口),并且在获取请求的GET lite(或POST等)中获得路径(带有查询字符串但没有片段部分)。在任何情况下,客户端都不会发送任何关于它使用的协议的指示,除非它是对转发代理服务器的请求(但不是如果它是反向代理)。

您的服务器假设使用了哪种协议方案,因为它知道它在给定端口上使用的协议。如果您描述的客户端在URL中使用其他协议名称但使用HTTP连接到您的服务器,则您的服务器只需要知道HTTP并且路由通常不包括协议,可能除非它是Diet .js但即便如此,它仍然在listen参数中使用,而不是在路由中使用。

这是一个示例HTTP请求:

GET / HTTP/1.1
Host: localhost:3344
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/53.0.2785.143 Chrome/53.0.2785.143 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8,pl;q=0.6

唯一具有“HTTP”的地方是定义协议版本的第一行,以便客户端可以正确理解标题,无论如何你都需要保留,以便你的服务器可以使用内置的http模块或Node中的任何框架。如果你改变了那么你将不得不编写自己的协议解析器。