Rails 应用程序为新的 ServerAlias 返回 HTTP 422 - 仅限 Internet Explorer

Rails 应用程序为新的 ServerAlias 返回 HTTP 422 - 仅限 Internet Explorer

我有一个长期运行的 Rails 应用程序,运行在 Mac OS X (apache2) 上。该设置使用 Apache 虚拟主机和 Passenger。Rails 应用程序还使用 HTTP 基本身份验证。

我需要将应用程序从一个 URL 域迁移到另一个 URL 域 - 两个域名在一段时间内有部分重叠可以同时访问。

为此,我将新域名作为现有域名的 ServerAlias 添加在 Passenger Virtual Host 配置中。

我现在可以使用旧 URL 和新 URL 从 Safari、Chrome、Firefox 或 Internet Explorer 中浏览 Rails 应用程序。

我还可以使用 Safari、Chrome 或 Firefox 将更新“HTTP 发布”到 Rails 应用程序。一切都很好。

除了,尝试从 Internet Explorer 发布更新导致 Rails 应用拒绝更新,

Rails 应用程序日志包含以下消息:

ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):

我的其他域名和别名在同一台机器上运行良好。

如果您能就导致 Rails 应用拒绝来自 IE 的帖子的原因提出任何建议,我们将不胜感激。

更新:我尝试将新域名更改为 ServerName,将旧域名更改为 ServerAlias,但使用新域名时仍然会出现 422 错误。我感到很困惑。

答案1

仔细观察日志,你那里一定有一个未编码的符号。422
意味着你收到了正确的请求,但由于(通常)编码问题而无法处理。

来自 rfc

The 422 (Unprocessable Entity) status code means the server
understands the content type of the request entity (hence a
415(Unsupported Media Type) status code is inappropriate), and the
syntax of the request entity is correct (thus a 400 (Bad Request)
status code is inappropriate) but was unable to process the contained
instructions.  For example, this error condition may occur if an XML
request body contains well-formed (i.e., syntactically correct), but
semantically erroneous, XML instructions.

答案2

我不知道为什么这有效,但希望它能够帮助别人......

我发现,如果我将新 URL 配置为使用相同的子域,则会接受来自 MSIE 的 Rails POST。

所以,

如果设置为,

originalsubdomain.originaldomainname.com

如果将新 URL 设置为,

newsubdomain.newdomainname.com

...然后 Safari、FireFox 和 Chrome 都很顺利,但是 MSIE 导致 Rails 在 POST 时出现问题(在多台机器上测试过)。

但是,如果我将新 URL 设置为

originalsubdomain.newdomain.com

它可以与所有列出的浏览器兼容(已在多台机器上测试)。

任何建议为什么这可能会受到赞赏。

相关内容