PATCH方法被防火墙阻止了吗?

equ*_*nt8 6 rest firewall

嗨,有人曾经遇到PATCH过XHR(AJAX请求)方法被防火墙阻止的情况吗?

基本上我们有一种情况,客户抱怨他无法更新我们的应用程序的东西.我们在它工作的世界各地检查了它(我们通过VPN几个地方连接)

然后他们为我们提供了一个远程桌面(最新的Windows,最新的Chrome),所以我们从他们的网络中为我们自己尝试了它,他们是对的.通过AJAX调用的所有PATCH方法最终都以405结束,但所有PUT POST DELETE GET方法都很好.我们试图在应用程序和Nginx日志中跟踪这些PATCH请求,但似乎它们从未到过我们的服务器.所以结论是他们的防火墙更新让请求离开建筑物.

正常:

| Laptop PATCH  ->  Clients Firewal   ->   Load Balancer   ->  Nginx proxy  -> Rails app (200 response) |
Run Code Online (Sandbox Code Playgroud)

这个防火墙案例:

| Laptop PATCH ->  Clients Firewal  (405 response)   |
Run Code Online (Sandbox Code Playgroud)

由于没有时间对此进行调查,我们只是将一些有问题的端点从PATCH更改为PUT,一切正常!

我唯一的解释是因为PATCH是另一个(后来介绍的)RFC的一部分,他们的防火墙必须是超级旧的,而不是将PATCH注册为有效方法.他们的系统管理员不知道为什么会这样.但有一条线索是,应用程序是EdTech,客户是学校=>他们不一定可能在他们的网络堆栈上拥有最新技术.也可以预设保姆软件.

在同一问题上交叉引用Reddit讨论:https://www.reddit.com/r/rest/comments/5gkvba/patch_blocked_by_firewall/

equ*_*nt8 5

仍然不太清楚为什么会这样,但是我很确定由于PATCH方法比防火墙设置还年轻。

基本上正确的解决方法是用POST替换PATCH,因为两者都是非幂等的。

HTTP标准的最佳实践告诉您,尽管某些Web框架(如Ruby on Rails)使其变得非常简单,但您不应将其替换为PUT。事实是,由于中间设备将PUT视为幂等,因此您可能还会遇到其他问题。

我在文章http://www.eq8.eu/blogs/37-post-create-and-put-updatepost中总结了整个故事