【问题标题】:AJAX POST vs GETAJAX POST 与 GET
【发布时间】:2020-07-07 09:47:50
【问题描述】:

我想知道在我的 AJAX 调用中使用 GET 或 POST 是否真的有什么不同。

我正在使用 AJAX 删除具有指定 ID 的项目。不知何故,POST 似乎是一个更合适的选择。但是对于 Razor Pages,AJAX POST 需要几个步骤来解决cross site request forgery measures

如果我只是在这里 GET 或 POST 有什么不同吗?或者如果我不这样做,我会遇到任何反模式吗?

【问题讨论】:

    标签: c# ajax asp.net-core post razor-pages


    【解决方案1】:

    有很多角度可以回答您的问题“如果我只是在这里获取或发布有什么不同吗?” 简而言之,是的,它有所作为。

    GET 和 POST 都容易受到 CSRF 攻击。通过使用 GET,您正在创建更广泛的攻击面。例如,电子邮件中的 IMG 标签可以在毫无戒心的用户上运行您的 DELETE api。使用 POST 使其变得不那么简单。与使用 GET 相比,在不支持防伪的情况下使用 post 会更好。理想情况下,您将 POST 与防伪令牌一起使用。

    其他注意事项可能包括:

    • 缓存如何处理此请求
    • 遵守 REST 原则(假设您打算采用“REST”ful/like 设计)
    • 通常假定 get 不直接操纵服务器端状态
    • 理论上,URL 标识资源的位置,如果您使用 get 删除该资源,下次调用 get 时会发生什么?
    • GET 不会受到 CORS 的保护,因为假定它不会修改状态,浏览器将执行 GET 并且不会将响应返回到有问题的站点。使用 POST 时,浏览器将使用 OPTIONS 谓词运行 CORS 预检检查,以确保在您的服务器收到带有谓词 POST 的请求之前,服务器返回的 CORS 策略允许该请求。

    【讨论】:

    • 虽然我同意这个答案,但 REST 只是一组想法/指南。假设您需要 REST,有时您必须调整范围。例如,不应在 Get 请求中进行包含敏感信息的“Get”调用。
    • 嗯,这是一个 Razor 页面,而不是 API。但听起来您建议仅在不修改数据时使用 GET。
    • 当然。 REST 是您在设计 API 时必须“订阅”的一组想法。没有一种正确的方法可以做任何事情。在使用 GET 与 POST 修改状态时,有很多理由不使用 GET 修改状态。
    • 关于不在 GET 上发送敏感信息的指南主要与日志记录有关。无论使用哪个动词,日志记录都可能泄漏。 GET 上的数据与 POST 正文中的数据受到相同级别的保护。
    • @MarkAtRamp51:我不确定最后一条评论是否是对我的回答。但是,显然,Razor Pages 为 POST 而不是 GET 实现 CSRF 保护。
    猜你喜欢
    • 2010-10-17
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 2012-01-15
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多