c# - AJAX POST 与 GET
问题描述
我想知道如果我在 AJAX 调用中使用 GET 或 POST 是否真的有什么不同。
我正在使用 AJAX 删除具有指定 ID 的项目。不知何故,POST 似乎是一个更合适的选择。但是对于 Razor Pages,AJAX POST 需要几个步骤来解决跨站点请求伪造措施。
如果我只是在这里 GET 或 POST 有什么不同吗?或者如果我不这样做,我是否会遇到任何反模式?
解决方案
有很多角度可以回答您的问题“如果我在这里 GET 或 POST 有什么不同吗?” 简而言之,是的,它有所作为。
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 策略允许该请求。
推荐阅读
- javascript - Django datepicker 问题,$ 无法识别
- azure - Azure 文件存储中支持的文件类型
- spring-boot - 如何将计划作业实现为微服务
- node.js - 尝试使用错误密码登录后尝试将请求 /api/users/login 从 localhost:3000 代理到 http://localhost:5000/ 时出错
- python - 如何在opencv中显示轮廓或形态变化的图像
- clojure-java-interop - 如何使用 clojure 作为 Java 程序的脚本语言?
- python - 如何创建具有类似 numpy nd 数组的数据结构
- c# - 有没有办法像使用 c# 一样运行 CMD 命令而不将其拆分为文件名和参数?
- reactjs - 反应,导入外部 json 而不是本地
- java - 如何将基数为 10 的数字转换为带字符的编号系统?