如何在C ++中进行HTTP重定向

时间:2009-11-29 18:55:13

标签: c++ http redirect

我正在用c ++创建一个HTTP服务器,我注意到apache的工作方式是如果你在最后请求一个目录而不添加正斜杠,firefox仍然知道它是你要求的目录(这似乎是不可能的)为firefox做,这就是为什么我假设apache正在进行重定向)。

这个假设是对的吗? apache是​​否检查您是否正在请求目录,然后使用正斜杠执行http重定向到请求?如果这就是apache的工作方式,我该如何在c ++中实现呢?感谢任何回复的人。

5 个答案:

答案 0 :(得分:3)

确定资源是否代表目录,如果是,则回复:

HTTP/1.X 301 Moved Permanently
Location: URI-including-trailing-slash

使用301允许用户代理缓存重定向。

答案 1 :(得分:1)

如果你想这样做,你会:

  1. 在路径名上调用stat
  2. 确定它是目录
  3. 发送必要的HTTP响应以进行重定向
  4. 我完全不确定你是否需要这样做。安装Firefox的“web开发人员”插件,以查看到底来回的内容。

答案 2 :(得分:1)

说真的,这应该不是问题。关于如何进行的建议:

  • 获取Apache的源代码并查看它的作用
  • 构建Apache的调试版本,并在这种情况下逐步调试调试器中的代码;检查哪些代码可以运行。
  • 安装Wireshark(网络分析工具),Live HTTP Headers(Firefox扩展)等,并查看网络上发生的事情
  • 阅读HTTP的相关RFC - 如果您正在编写服务器,可能无论如何都应该保留在枕头下。

一旦你完成了这些事情,就应该明白如何做到这一点。如果你不能做这些事情,你不应该尝试用C ++开发Web服务器。

答案 3 :(得分:1)

假设是正确的,并确保您的回复包含允许目录列表的URL的位置标头和合法的301/302第一行。这不是一个C ++问题,它更像是一个HTTP协议问题,因为你试图编写一个HTTP服务器,正如其他帖子建议的那样,阅读RFC。

答案 4 :(得分:0)

您应该安装Fiddler并观察其他网络服务器发送的HTTP标头。

如果没有更多详细信息,您的问题无法准确回答,但您希望发送带有Location标题的HTTP 3xx状态代码。