为什么 apache 没有将 location 标头从 cgi 脚本传递回客户端

为什么 apache 没有将 location 标头从 cgi 脚本传递回客户端

我有一个现有的 cgi Web 应用程序,它以前运行良好,但现在的行为已经改变。

其中一个 cgi 程序(在某些条件下)返回 Location 标头,以导致重定向。

Location 标头永远不会到达 Web 浏览器 - 相反,Apache 似乎返回 Location 标头重定向到的页面的内容。

不幸的是,该页面包含使用 Location 标头内的查询字符串的 javascript - 但是由于这种新行为,查询字符串为空,因为浏览器仍然认为该位置是原始 cgi 脚本。

为什么他们的行为发生了变化?我该怎么做才能防止这种情况发生?

答案1

根据这个答案,CGI指定了两种不同类型的重定向:内部和外部。

内部重定向otherpage.html(对浏览器不可见)当您在标头中指定不带方案和主机(如或/index.html)的URL 时使用Location

外部重定向(由浏览器执行)仅当您指定绝对 URL(即)时才使用http://www.example.com/some/other/page。绝对 URL必须从方案开始(即http)。

RFC 3875包含相关文档:

Location 标头字段用于向服务器指定脚本返回的是文档的引用,而不是实际的文档(请参阅第 6.2.3 和 6.2.4 节)。它要么是绝对 URI(可选地带有片段标识符),表示客户端要获取引用的文档,要么是本地 URI 路径(可选地带有查询字符串),表示服务器要获取引用的文档并将其作为响应返回给客户端。

相关内容