从哲学上讲,我习惯于总是对不改变状态的 HTTP 请求使用 GET,而对改变状态的请求使用 POST。然而,最近我在这方面遇到了一些困难,这导致我做出了例外。我很好奇使用错误的 HTTP 动词是否有任何非哲学上的缺点,例如跨站点攻击等安全问题。
例外 #1
我想触发下载动态打包到存档中的请求文件列表。但是,文件列表可能会变得如此之大,以至于当在 URL 中编码为查询字符串参数时,它们超出了 Internet Explorer 中的 url 长度限制。为了解决这个问题,我最终通过 POST 触发了下载。
例外 #2
有一个按钮始终显示,无论您是否登录,但它只能在您登录时改变状态。如果您在未登录时按下它,您将被带到登录页面一个查询字符串参数,指示您接下来打算去的地方。当您登录时,它会将您重定向到那里以完成您的操作。但是,重定向只能生成 GET,不能生成 POST。所以我们允许 GET 在这种情况下改变状态。
这些异常是否有任何漏洞或缺点?这些是否允许通过检查引用标头无法防止的任何跨站点请求伪造场景?