【问题标题】:What does it mean to run a local web server?运行本地 Web 服务器意味着什么?
【发布时间】:2016-09-07 06:57:13
【问题描述】:

我可以使用 Ruby on Rails/JS/HTML/CSS 进行编程和开发,以制作一个全栈应用程序。但是,我对 HTTP 请求/响应周期的理解存在漏洞。以下几点是否正确?

  • 如果我创建一个 Rails 应用程序,并在命令行上键入 rails server,我会得到一个本地服务器,我可以向它发出请求。如果我打开浏览器,输入localhost:3000,然后按回车,我正在向本地服务器发出 HTTP 请求。
  • Rails 默认使用名为 WEBrick 的 Web 服务器,但也有其他服务器,如 Thin、Puma 和 Unicorn。这些都是软件,使它们成为网络服务器的原因是该软件实现了处理 HTTP 请求的功能。
  • 当我运行本地 Web 服务器时,这意味着我的计算机正在运行这些用于侦听 HTTP 请求的软件之一。

以上是“运行本地网络服务器”的意思吗?

  • 我还看到了“运行本地 Web 服务器”的其他示例。其中之一是在项目目录中运行npm install -g http-server,然后导航到localhost:8080。这也只是开始运行并在端口 8080 上接受 HTTP 请求的软件吗?
  • 在 Ruby 命令行上,安装 rack gem:gem install rack。然后在一个新的 Ruby 文件中我们require 'rack',启动一个 Web 服务器:

Rack::Server.start({ app: MySimpleApp, port: 3000 })

然后我们可以定义一个符合机架标准的 Web 应用程序 MySimpleApp(响应 call 方法的对象):

class MySimpleApp
  def self.call
    (...)
  end
end

所以现在当我们在浏览器中导航到 localhost:3000 时,MySimpleApp 被执行。 rack 是否只是运行它的默认 WEBrick 服务器?上述命令的作用是简单地运行本地 Web 服务器并定义 HTTP 请求进来时要做什么(执行 MySimpleApp)?

【问题讨论】:

    标签: ruby-on-rails ruby http webserver


    【解决方案1】:

    您对那里的理解非常正确。 HTTP 只是一种基于文本的协议,与许多协议一样,它通过 TCP/IP 运行。

    内置的 WEBrick 服务器不是用 Ruby 编写的 HTTP 服务器的最佳示例,但由于遗留原因,它被包括在内,因为它通常“足够好”让您开始。 Pow 要好得多,尽管它是由生产 Rails 的同一家公司生产的,但它主要是用 Node 编写的。

    与许多基于 Internet 的协议一样,HTTP 的美妙之处在于,只要您遵守标准,您使用什么语言并不重要。

    Rack 是一个在 HTTP 之后运行的层,并在请求/响应周期上提供了一层薄薄的抽象。

    【讨论】:

    • 小心第一段:HTTP 可能看起来就像是基于文本的。但它确实是一个二进制协议:它在八位字节上运行,而不是字符。
    • @DaSourcerer 我不确定这对于基于 7 位 ASCII 的协议或 encode other formats 的扩展是否重要。除非另有说明,此处的字节和字符相同。框架是纯文本的。有效负载可能是二进制的。
    • 不打算为此展开斗争,但是是的,虽然在实践中很明显,但它很重要。适合 7 位 ASCII 的代码字和分隔符实际上是一种防止互操作性问题并允许按字节读取协议的方法。哦,在 RFC 5987 之前引入的一些标头允许原始 UTF8 有效负载。 Cookie2 是其中之一,我想。
    • 使用某些扩展时,这条线确实会变得模糊,但其核心是基于 CRLF 文本的协议,如有必要,可以通过在 telnet 上输入内容来模拟。这对于二进制协议是不可能的。我明白你在说什么,但这是学术上的区别。
    • “这是学术上的区别。”鉴于实践中相当微妙的影响,我想我可以解决这个问题:)
    【解决方案2】:

    服务器是为某种数据传输打开端口(80、443、8080)的东西。端口 80 是 HTTP 端口,端口 443 是 HTTPS 端口。 8080 是开发中常用的端口(与 3000 一样)。 https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers

    根据定义,本地服务器是在您的计算机上运行的服务器。

    总的来说,你绝对是在正确的轨道上。

    【讨论】:

      猜你喜欢
      • 2015-03-19
      • 2017-03-31
      • 1970-01-01
      • 1970-01-01
      • 2012-10-10
      • 1970-01-01
      • 2016-07-28
      • 2012-05-11
      • 2017-06-22
      相关资源
      最近更新 更多