代码之家  ›  专栏  ›  技术社区  ›  adhanlon

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

  •  0
  • adhanlon  · 技术社区  · 15 年前

    我在C++中制作了一个HTTP服务器,我注意到Apache工作的方式是,如果你在最后不添加一个前斜杠的时候请求一个目录,Firefox仍然知道它是你请求的目录(这似乎是火狐不可能做的,这就是为什么我假设Apache正在做重定向)。

    这个假设正确吗?Apache是否检查您是否在请求目录,然后HTTP是否重定向到带有正斜杠的请求?如果Apache是这样工作的,我如何在C++中实现它呢?感谢任何回复的人。

    5 回复  |  直到 15 年前
        1
  •  3
  •   Mic    15 年前

    确定资源是否代表目录,如果代表目录,请使用以下内容答复:

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

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

        2
  •  1
  •   bmargulies    15 年前

    如果你想这样做,你会:

    1. 在路径名上调用stat
    2. 确定它是一个目录
    3. 为重定向发送必要的HTTP响应

    我一点也不确定你是否需要这么做。安装firefox“web developer”插件,查看前后的确切内容。

        3
  •  1
  •   MarkR    15 年前

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

    • 获取Apache的源代码并查看它的功能
    • 构建一个Apache的调试构建,并在这种情况下在调试程序中逐步执行代码;检查运行哪段代码。
    • 安装wireshark(网络分析工具)、实时HTTP报头(firefox扩展)等,并查看网络上发生的情况。
    • 阅读HTTP的相关RFC——如果你在写服务器的话,你应该把它放在枕头下面。

    一旦你做了这些事情,就应该知道如何去做了。如果你不能做这些事情,你就不应该尝试在C++中开发一个Web服务器。

        4
  •  1
  •   Murali VP    15 年前

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

        5
  •  0
  •   SLaks    15 年前

    你应该安装 Fiddler 并观察其他Web服务器发送的HTTP头。

    如果没有更多的细节,你的问题是不可能准确回答的,但是你想发送一个 HTTP 3xx 状态代码 Location 标题。

    推荐文章