首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用TCPServer的VirtualHost

使用TCPServer的VirtualHost
EN

Stack Overflow用户
提问于 2012-09-10 01:24:23
回答 1查看 70关注 0票数 1

我只是使用TCPServer Gem构建了我自己的HTTP-Webserver。现在,我让服务器使用相同的(localhost) IP和端口(80)运行。但是,如果我在一台服务器上有多个域,并希望在本地主机ip上使用该服务器,但为每个域打印不同的数据,该怎么办?

有人能告诉我如何找出请求是从哪个域调用的吗?

EN

回答 1

Stack Overflow用户

发布于 2016-06-15 07:21:39

我相信你的服务器是这样创建的

代码语言:javascript
复制
require 'socket'

server = TCPServer.new 80
loop do
  Thread.start(server.accept) do |client|
    ...
  end
end

在这段代码中,您可以检查client.recvmsg,它是一个数组。此数组client.recvmsg[0]的第一个元素包含向服务器发出的请求的头。类似于:

代码语言:javascript
复制
GET /something HTTP/1.1
Host: localhost:4321
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36
DNT: 1
Accept-Encoding: gzip, deflate, sdch
Accept-Language: pt-BR,pt;q=0.8,en-US;q=0.6,en;q=0.4,fr-CA;q=0.2,fr;q=0.2

如您所见,Host标头在第二行。然后,这只是一个孤立它的问题。我是这样做的:

代码语言:javascript
复制
def get_host(message)
  lines = message.split("\n")
  lines.shift
  host_name = ""
  lines.each{ |line|
    key_value = line.split(': ')
    host_name = key_value[1].strip if key_value[0].strip == "Host"
  }
  host_name
end

如果您像这样调用它,这将为您提供Host标头

代码语言:javascript
复制
host_header = get_host(client.recvmsg[0])

在Thread块内部。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12341223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档