首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么不应该在HTTP GET请求上修改数据?

在HTTP GET请求上修改数据可能会导致许多问题,因为GET请求被设计为用于获取数据,而不是用于修改数据。以下是一些原因:

  1. 安全性:GET请求可以在浏览器历史记录中被记录,这意味着用户可以轻松地查看和重新发送请求。这可能导致数据被意外地修改或泄露敏感信息。
  2. 可缓存性:GET请求可以被代理服务器或浏览器缓存,这意味着如果数据被修改,缓存的数据可能会被使用,导致数据不一致。
  3. 可靠性:GET请求应该是幂等的,这意味着多次发送相同的请求应该产生相同的结果。如果GET请求被用于修改数据,那么多次发送请求可能会导致数据被多次修改。
  4. 可扩展性:GET请求应该只用于获取数据,而不是用于修改数据。这样可以确保其他开发人员和服务可以安全地使用GET请求来获取数据,而不必担心数据被意外地修改。

因此,为了避免这些问题,最好将数据修改操作放在其他HTTP方法(如POST、PUT或DELETE)上。这样可以确保数据的安全性、可缓存性、可靠性和可扩展性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

使用ASP.NET Core 3.x 构建 RESTful API - 4.3 HTTP 方法的安全性和幂等性

例如 HTTP GETHTTP HEAD 就被认为是安全的,但需要注意的是,这并不意味着执行GET请求就不会引起其它的资源操作,在表面之下,你的服务层有可能会对其它相关的一些表的数据做出修改,但是本资源的表述不应该被改变...但即使相关的一些数据修改了,这也不是API消费者所请求的事。 什么样的HTTP方法是幂等的? 如果一个方法执行多次和执行一次的结果(带来的副作用)是一样的话,那么这个方法就被认为是幂等的。...其中: GET 是安全的也是幂等的,首先它不会改变资源的表述,而且针对某个资源(的URI)执行一次和执行多次GET的结果是一样的,这里的结果是指它带来的副作用,因为GET请求没有副作用,所以执行一次和执行多次的副作用是一样的...它会修改资源表述,所以不是安全的。但是为什么它和 PUT 不一样,PATCH 不是幂等的呢?因为 PUT 其实是整体替换,替换多次和一次的效果是一样的,而 PATCH 是针对局部进行修改。...它们不仅仅是纯理论,它们应该在不同的业务场景中合理的使用。 现在我们都应该知道了为什么 GET 请求不应该用来创建或者修改资源了。。。

50110

REST API 最佳实践

1.REST API 设计建议 1.用名词表示资源 当你设计一个 REST API 时,你不应该在端点路径中使用动词。端点应该使用名词,表示它们各自的作用。...这就是为什么你的集合应该使用复数的名词。 所以,不应该是 https://mysite.com/post/123,而是 https://mysite.com/posts/123。...为了确保客户端正确地解释 JSON 数据,你应该在发出请求时将响应头中的 Content-Type 类型设置为 application/json。...12.使用 HTTP 状态码 你应该在对你的 API 请求的响应中始终使用常规的 HTTP 状态代码。这将帮助你的用户知道发生了什么——请求是否成功,或者是否失败,或者其他情况。...,还应该在HTTP响应正文中提供有用且详细的错误描述。

1.6K20

RFC2616-HTTP1.1-Status Code(状态码规定部分—译文)

10.3.5 304 未修改(Not Modified)   如果客户端执行了有条件的GET请求并允许访问,但是文件没有修改,此状态码应该用该状态码来响应。...如果客户端正在发送数据,那么使用TCP的服务器实现应该在服务器关闭输入连接之前确保客户端确认收到包含响应的数据包。...10.4.1 400 非法请求(Bad Request)   由于语法错误,服务器无法理解请求。客户端不应该在没有修改的情况下重复请求。...如果请求方法不是HEAD并且服务器希望公开请求为什么没有完成,它应该在实体中说明拒绝的原因。如果服务器不希望将此信息提供给客户端,那么可以使用404状态码来代替。...此响应码允许客户端在当前资源的元信息(header字段数据)放置先决条件,从而防止请求的方法被应用到预期资源之外的资源。

92420

RFC2616-HTTP1.1-Status Code(状态码规定部分—译文)

10.3.5 304 未修改(Not Modified)   如果客户端执行了有条件的GET请求并允许访问,但是文件没有修改,此状态码应该用该状态码来响应。...如果客户端正在发送数据,那么使用TCP的服务器实现应该在服务器关闭输入连接之前确保客户端确认收到包含响应的数据包。...10.4.1 400 非法请求(Bad Request)   由于语法错误,服务器无法理解请求。客户端不应该在没有修改的情况下重复请求。...如果请求方法不是HEAD并且服务器希望公开请求为什么没有完成,它应该在实体中说明拒绝的原因。如果服务器不希望将此信息提供给客户端,那么可以使用404状态码来代替。...此响应码允许客户端在当前资源的元信息(header字段数据)放置先决条件,从而防止请求的方法被应用到预期资源之外的资源。

97440

http报文详解

GET 方法和 HEAD 方法都被认为是安全的,这就意味着使用 GET 或 HEAD 方法的 HTTP 请求不会在服务器产生修改资源的操作。...但是这并不是一定的,因为web开发者也可以让GET方法修改资源,这是由开发者决定的。通常大多数开发者都是开发RESTful风格的api,GET方法不会产生修改资源的效果。...可以通过某些重定向状态码对资源的应用程序本地副本与源端服务器的资源进行验证。比如,HTTP 应用程序可以查看其资源的本地副本是否仍然是最新的,或者在源端服务器资源是否被修改过。...如果客户端发起了一个条件 GET请求,而最近资源未被修改的话,就可以用这个状态码来说明资源未被修改。...通常,服务器会包含一些首部,以便客户端弄清楚为什么请求无法满足。

63510

深入理解RESTful API设计

在这个过程中,势必涉及到数据和状态的变化。 互联网通信协议HTTP协议,是一个无状态协议。这意味着,所有的状态都保存在服务器端。...它的具体表现形式,应该在HTTP请求的头信息中用Accept和Content-Type字段指定,这两个字段才是对”表现层”的描述. 客户端用到的手段,只能是HTTP协议。...具体来说,就是HTTP协议里面操作方式的动词:GET、POST、PUT、PATCH、DELETE 当然还有一些不经常使用的 ?...REST四个基本原则: 1.使用HTTP动词:GET POST PUT PATCH DELETE等; 2.无状态连接,服务器端不应保存过多上下文状态,即每个请求都是独立的; 3.为每个资源设置唯一的...Request URI和Request body是否合法:如果请求带有了不该有的数据,或者某些必须包含的数据没有出现或内容不合法,一律返回4xx。

43720

http超文本协议,让http不再难懂

基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等) 工作原理 工作于客户端-服务端架构为 Web服务器根据接收到的请求后,向客户端发送响应信息 浏览器作为HTTP客户端通过...服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。 HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。...GET 请求指定的页面信息,并返回实体主体。...HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。...POST请求可能会导致新的资源的建立和/或已有资源的修改。 PUT 从客户端向服务器传送的数据取代指定的文档的内容。 DELETE 请求服务器删除指定的页面。

95670

关于HTTP报文请求方法和状态响应码

这样客户端就可以查看所有中间HTTP应用程序组成的请求/响应链,原始包文是否,以及如何被毁坏或修改过; TRACE方法主要用于诊断;也就是说,用于验证请求是否如愿的穿过了请求/响应链。...比如:用来查看本地的副本是否仍为最新的,或者远端服务器的资源是否被修改过; 下图是客户端发送了一个特殊的if-Modified-Since首部,说明会读取1997年10月之后修改过的文档。...其主要目的是允许POST请求的响应将客户端定向到某个资源上去; 304:Not Modified 客户端发出了条件式请求,但服务器的资源未曾发生改变,则通过通过此响应状态码通知客户端(带有这个状态码的响应不应该包含实体的主体部分...URL发送一个GET请求; 问题出在HTTP/1.1。...通常,服务器会包含一些首部,以便客户端弄清楚为什么请求无法满足。

1.3K30

HTTP认知(请求与响应)

3、请求体(数据) 将一个页面表单中的组件通过键值对形式编码生成一个格式化窜,可以表示支持多个请求参数的数据。...如果客户端发起了一个条件 GET 请求,而最近资源未被修改的话,就可以用这个状态码来说明资源未 被修改。带有这个状态码的响应不应该包含实体的主体部分。...通常,服务器会包含一些首部,以便客户端弄清楚为什么请求无法满足。...补充:HTTP的常见请求方法:   GET、PUT、DELETE、POST、HEAD等,GET和HEAD方法是被认为安全的方法,因为出来进行获取资源信息外,不会有其他意义(作用)。...不如判断资源的类型,通过查看响应中的状态码,看看某个对象是否存在;通过查看首部,测试资源是否被修改了。 ?   POST:用于向服务器发送数据,对数据进行 增删改查 的操作;常用于提交表单。 ?

60350

HTTP方法之GET与POST对比

超文本传输协议(HTTP)的设计目的是保证客户端与服务器之间的通信。最常用的是GET与POST   1.GET方法:     查询字符串(键/值对)是在GET请求的URL中发送的。...a=value1&b=value2 get请求可被缓存 get请求保留在浏览器历史中 get请求可以收藏书签 get请求有长度限制(url长度最大为2048 get请求不应该在有敏感数据时使用(相较于...post请求不安全) 2.POST方法:     查询字符串(键/值对)是在POST请求的消息主体中发送的。...POST /test.php HTTP/1.1 Host: g.cn a=value1&b=value2 post请求不被缓存 post请求不被保留在浏览器历史中 post请求不能收藏书签 post请求长度没有限制...除了get与post请求HTTP还有一些其它的请求方法(HEAD,PUT,DELETE,OPTIONS,CONNECT)。下面这张图是其它HTTP请求方法: ?

95360

分享 8 个 VSCode 插件,提升你的编码体验

如果你想找出是谁修改了一行代码或者一段代码块,以及为什么修改,它非常有用。 我个人觉得这非常方便,如果我想知道为什么添加或删除了某行代码。通过查看历史记录,我可以追溯到最初的用户故事。...REST 客户端 REST客户端扩展允许您直接在Visual Studio Code中发送HTTP请求并查看响应。这样就不再需要使用外部应用程序来向服务器发送HTTP请求了。...语法非常简洁:只需一行代码,使用GET关键字后跟URL即可完成简单的GET请求。如果您想发送更复杂的请求,有很多选项可供您使用,以满足您的需求。...您可以添加身份验证标头,或者如果需要,发送包含JSON数据的完整POST请求。 这个扩展已经安装了超过350万次,如果你需要从API获取数据,它是必备的。 7....一个非常简单的扩展,但是拥有接近250万的安装量,你不应该低估它的能力。

43110

从Feign使用注意点到RESUFUL接口设计规范

预设一个RestController,在本地的8080端口启动一个应用,用于接收http请求。...发出一个这样的GET请求GET /hello?...而email不同,它可能是唯一的,但更多的,它是资源的属性,所以,笔者认为不应该在路径中出现非定位性的动态参数。而是把email作为@RequestParam参数。...接口不应该出现动词,这里的update并不是一个动作,而是标记着操作的类型,因为针对某个属性可能出现的操作类型可能会有很多,所以我习惯加上一个update后缀,明确表达想要进行的操作,而不是仅仅依赖于GET...实际修改操作推荐使用的请求方式应当是PUT,这点笔者的理解是,已经使用update标记了行为,实际开发中不习惯使用PUT。

2.6K70

JSON Web Tokens 是如何工作的

在任何时候,如果用户希望访问一个受保护的资源或者路由的时候,用户应该在访问请求中包含 JWT 令牌。...通常这个令牌是存储在 HTTP 请求的头部信息,一般会使用 Authorization 字段,使用 Bearer 模式。...服务器受保护的路由将会检查随着访问提交的 JWT 令牌。如果令牌是有效的,用户将会被允许访问特定的资源。...如果 JWT 令牌中包含有必要的信息,服务器的服务端将不需要再次对数据库进行查询以加快访问速度。当然,不是所有的时候都可以这样进行处理。...需要注意的是,通过使用了签名的令牌,尽管用户可能没有办法对使用的令牌进行修改,但是令牌中包含的所有信息将会暴露给用户或者其他的应用。因此,你不应该在你的令牌中存储密钥或者任何的敏感信息。

49311

RESTful API 设计最佳实践

在资源集合URL使用POST来创建新的资源过程 客户端向资源集合URL /employees 发送POST请求HTTP body 包含新资源的属性 “Albert Stark”。...- 如果客户端发生错误(例如客户端发送无效请求或未被授权) 5xx – 服务器错误 - 如果服务器发生错误(例如,尝试处理请求时出错) 参考维基百科HTTP状态代码。...403 禁止 404 未找到 返回有用的错误提示 除了合适的状态码之外,还应该在HTTP响应正文中提供有用的错误提示和详细的描述。.../v1/employees 你不需要使用次级版本号(“v1.2”),因为你不应该频繁的去发布API版本。 提供分页信息 一次性返回数据库所有资源不是一个好主意。因此,需要提供分页机制。...因此,您应该在URL中使用动词而不是名词,来清楚的区分资源请求和非资源请求。 考虑特定资源搜索和跨资源搜索 提供对特定资源的搜索很容易。

1.3K60

HTTP Headers

最常见的HTTP Headers 使用和优化HTTP Headers。这种方法会大大减少您的网络爬虫被各种数据源封锁的可能性,并确保检索到高质量的数据。...因此,有经验的网页抓取者会把User-Agent Header修改成不同的字符串,从而让服务器识别成是多个自然用户在发出请求。...If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答。...HTTP应答头 说明 Allow 服务器支持哪些请求方法(如GET、POST等)。 Content-Encoding 文档的编码(Encode)方法。...客户可以通过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个304(Not Modified)状态。

12510

详解高级PHP工程师面试题

git 为什么好,为什么要用 git,这不是我本文想要说明的问题。 这里想要给大家分享一下自己使用过程中产生的疑惑,以及解决的这些疑惑的过程。话又说回来,我现在依然充满疑惑。...在多人的团队中,我们应该在 master 分支直接开发吗? 如果线上产生了bug该通过什么样方式的分支去修复? 当有多个分支的时候,测试如何有效的参与进来每一个分支的测试?...这个分支是为预发准备的,测试的介入,也只应该在该分支产生时才介入。当我们不管是新功能开发,还是一般的bug修改都差不多了。...比如你在一个 http 请求里面,你需要请求外面的接口,那么会有下面的场景。 你的前置 server 是 nginx,nginx 是非阻塞异步的,但是 php-fpm 是同步阻塞的。...你的进程就不必耗在这一个任务上了,可以去处理其它的 http 请求了。这样是不是并发量就高了? 同理,当你的请求在查询数据库的时候,也是一个 IO 请求,也是同步的。

54920

RESTful API 设计最佳实践

使用四种HTTP方法POST,GET,PUT,DELETE可以提供CRUD功能(创建,获取,更新,删除)。 获取:使用GET方法获取资源。GET请求从不改变资源的状态。无副作用。GET方法是幂等的。...在资源集合URL使用POST来创建新的资源过程 客户端向资源集合URL /employees发送POST请求HTTP body 包含新资源的属性 “Albert Stark”。...- 如果客户端发生错误(例如客户端发送无效请求或未被授权) 5xx – 服务器错误 - 如果服务器发生错误(例如,尝试处理请求时出错) 参考维基百科HTTP状态代码。.../v1/employees 你不需要使用次级版本号(“v1.2”),因为你不应该频繁的去发布API版本。 提供分页信息 一次性返回数据库所有资源不是一个好主意。因此,需要提供分页机制。...因此,您应该在URL中使用动词而不是名词,来清楚的区分资源请求和非资源请求。 考虑特定资源搜索和跨资源搜索 提供对特定资源的搜索很容易。

1.4K10
领券