2017-03-11 162 views
0

我对编程相当陌生,这个问题是关于确保我正确地获得HTTP协议。我的问题是,当我阅读HTTP请求/响应时,它看起来需要采用状态码,HTTP版本号,头部以及正文后面的空白行的非常特定的格式。HTTP响应如何生成

但是,使用nodejs/express创建一个web应用后,我从来没有真正写过以这种格式编写HTTP响应的代码(我假设,尽管我不确定其他框架在轨道上的红宝石或python/Django是相同的)。在快速应用程序中,我只是设置路线处理程序来呈现适当的页面,当对该路线发出请求时。

这是因为快递实际上是在正确的HTTP格式背后的响应?换句话说,如果我查看expressJS代码,那么该代码中是否会有一些实际上以HTTP格式生成HTTP响应的内容?

我的困惑是,它看起来像HTTP请求/响应格式是如此重要,但不知怎的,我从来不必编写任何代码来处理节点/快速应用程序。也许这就像是一个像express一样的框架的整个要点...去掉细节,以便开发人员可以处理业务逻辑。如果这是正确的,有没有人写网络应用程序没有框架来做到这一点。你会负责编写将服务器的响应转换为精确的HTTP格式的代码吗?

回答

0

我是相当新的编程这个问题是关于如何确保我得到HTTP协议正确。我的问题是,当我阅读HTTP请求/响应时,它看起来需要采用状态码,HTTP版本号,头部以及正文后面的空白行的非常特定的格式。

只是给你一个想法,可能有数百个与HTTP协议有关的规范。它们不仅处理协议本身,而且还处理发送的所有内容的数据格式/编码,包括标题和所有可发送的各种内容类型,身份验证方案,缓存,状态码,URL解码等。可以通过查看这里看到一些涉及的规范:https://www.w3.org/Protocols/

现在一个简单的请求和一个简单的文本响应可以逃脱只知道这些规范中的一些,但生活并不总是如此简单。

这是因为express实际上是在正确的HTTP格式后面将响应放在幕后?换句话说,如果我查看expressJS代码,那么该代码中是否会有一些实际上以HTTP格式生成HTTP响应的内容?

是的,会有。 Express和HTTP library内置在node.js中的组合处理规范的所有细节。这是使用库/框架的优势。他们甚至可以处理不同版本的协议,并且来自数千名其他开发人员的反馈帮助他们清除了边缘案例错误。一个好的库/框架允许您仍然控制有关响应的任何细节(标题,内容类型,状态代码等),而无需通过实际创建确切响应的详细工作。这是一件好事。它可以让你更快地编写代码,并让你骑在已经弄清楚与您的应用逻辑无关的细节细节的其他人肩上。

事实上,人们可以对HTTP协议下面的TCP协议说同样的话。没有普通的应用程序开发人员想要编写自己的TCP堆栈。相反,你只需要一个可以使用的TCP堆栈,它已经为你调整和调试过了。

但是,创建一个带有nodejs/express的web应用程序后,我从来没有真正写过以这种格式编写HTTP响应的代码(我假设,尽管我不确定其他人Ruby on Rails或python/Django等框架是相同的)。在快速应用程序中,我只是设置路线处理程序来呈现适当的页面,当对该路线发出请求时。

是的,这是件好事。该框架为您做了详细的工作。您只需拨打res.setHeader(),res.status(),res.cookie(),res.send(),res.json()等,Express会为您提供整个回复。

如果这是正确的,有没有人写网络应用程序没有框架来做到这一点。你会负责编写将服务器的响应转换为精确的HTTP格式的代码吗?

如果您没有使用任何类型的框架或库,并且在原始TCP层进行编程,那么您会负责HTTP协议的所有细节。但是,除了图书馆开发人员之外,几乎没有人会这样做,因为坦率地说,这只是浪费时间。每一个平台都至少有一个开源库,可以实现这一点,即使您正在开发一个全新的平台,您也可以获得一个开源的代码体,并将其移植到您的平台上,比您可以编写所有这些更快你自己。


记住的node.js的巨大优势之一是,有开放源代码(主要是在NPM和Github上)一个巨大的身体已经预打包node.js中工作而且,由于node.js是服务器端,代码内存通常不太紧密,而代码只是在服务器初始化时从本地硬盘来的地方,所以抓住正在运行并经过测试的软件包几乎没有什么不利之处,即使你只打算使用包中5%的功能。或者,最糟糕的情况是克隆现有的存储库并进行修改以完全满足您的需求。

0

这是因为express实际上是在后台以正确的HTTP格式响应 ?

是的,没错,HTTP是无处不在,几乎所有的编程语言/框架处理的HTTP幕后的实际写作和解析。

有没有人写过没有框架的网络应用程序来做到这一点。 您是否负责编写将服务器的 响应转换为确切的HTTP格式的代码?

决不(除非你正在编写需要的HTTP代码什么的非常低的水平的调整代码)