本指南将揭示为什么 HTTP GET 方法不像其他 HTTP 方法那样使用请求体,以及如何在 API 开发中有效地使用 GET 请求。...当谈到 HTTP(超文本传输协议)时,您可能会好奇为什么 GET 方法通常不涉及请求体。在 Web 请求中,发送数据到请求体是很常见的,用来向服务器传递信息。...理解 HTTP 中的请求体在 HTTP 中,请求体是请求消息的一部分,承载客户端到服务器的数据。像 POST、PUT 和 PATCH 这样的 HTTP 方法通常需要使用请求体来创建、更新或修改资源。...GET 请求可以有请求体吗?从技术上讲,可以在 HTTP GET 请求中包含请求体。根据 HTTP/1.1 规范,任何 HTTP 请求消息都允许包含消息体,服务器必须适当解析这些消息。...将请求体附加到 GET 请求上违背了 GET 用于安全检索数据而不修改服务器资源的原则。为什么 HTTP GET 请求不使用请求体?为什么 GET 方法不使用请求体呢?
找到一个开源项目: GitHub - elnormous/HTTPRequest: Single-header C++ HTTP request class 使用项目都有介绍,很简单,这里我在ubuntu...上使用CMakeLists跑起来 CMakeList.txt cmake_minimum_required (VERSION 3.10) project(test) add_definitions(-std...iostream> #include "HTTPRequest.hpp" using namespace std; int main() { try { // you can pass http...::InternetProtocol::V6 to Request to make an IPv6 request http::Request request{"http://www.baidu.com..."}; // send a get request const auto response = request.send("GET"); std::cout << std::string
数据-方法&头部&状态码 请求request 1、常规请求-Get 2、用户登录-Post •get:向特定资源发出请求(请求指定页面信息,并返回实体主体); •post:向指定资源提交数据进行处理请求...(提交表单、上传文件),又可能导致新的资源的建立或原有资源的修改; •head:与服务器索与get请求一致的相应,响应体不会返回,获取包含在小消息头中的原信息(与get请求类 似,返回的响应中没有具体内容...,用于获取报头); •put:向指定资源位置上上传其最新内容(从客户端向服务器传送的数据取代指定文档的内容),与post的区别是put为幂等,post为非幂等; •trace:回显服务器收到的请求,...trace是http8种请求方式之中最安全的l •delete:请求服务器删除request-URL所标示的资源*(请求服务器删除页面) •option:返回服务器针对特定资源所支持的HTML请求方法...或web服务器发送*测试服务器功能(允许客户 端查看服务器性能); •connect : HTTP/1.1协议中能够将连接改为管道方式的代理服务器 -参数 演示: 1、UA头-设备平台
例如 HTTP GET 和 HTTP HEAD 就被认为是安全的,但需要注意的是,这并不意味着执行GET请求就不会引起其它的资源操作,在表面之下,你的服务层有可能会对其它相关的一些表的数据做出修改,但是本资源的表述不应该被改变...但即使相关的一些数据被修改了,这也不是API消费者所请求的事。 什么样的HTTP方法是幂等的? 如果一个方法执行多次和执行一次的结果(带来的副作用)是一样的话,那么这个方法就被认为是幂等的。...其中: GET 是安全的也是幂等的,首先它不会改变资源的表述,而且针对某个资源(的URI)执行一次和执行多次GET的结果是一样的,这里的结果是指它带来的副作用,因为GET请求没有副作用,所以执行一次和执行多次的副作用是一样的...它会修改资源表述,所以不是安全的。但是为什么它和 PUT 不一样,PATCH 不是幂等的呢?因为 PUT 其实是整体替换,替换多次和一次的效果是一样的,而 PATCH 是针对局部进行修改。...它们不仅仅是纯理论,它们应该在不同的业务场景中合理的使用。 现在我们都应该知道了为什么 GET 请求不应该用来创建或者修改资源了。。。
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响应正文中提供有用且详细的错误描述。
10.3.5 304 未修改(Not Modified) 如果客户端执行了有条件的GET请求并允许访问,但是文件没有修改,此状态码应该用该状态码来响应。...如果客户端正在发送数据,那么使用TCP的服务器实现应该在服务器关闭输入连接之前确保客户端确认收到包含响应的数据包。...10.4.1 400 非法请求(Bad Request) 由于语法错误,服务器无法理解请求。客户端不应该在没有修改的情况下重复请求。...如果请求方法不是HEAD并且服务器希望公开请求为什么没有完成,它应该在实体中说明拒绝的原因。如果服务器不希望将此信息提供给客户端,那么可以使用404状态码来代替。...此响应码允许客户端在当前资源的元信息(header字段数据)上放置先决条件,从而防止请求的方法被应用到预期资源之外的资源。
GET 方法和 HEAD 方法都被认为是安全的,这就意味着使用 GET 或 HEAD 方法的 HTTP 请求不会在服务器上产生修改资源的操作。...但是这并不是一定的,因为web开发者也可以让GET方法修改资源,这是由开发者决定的。通常大多数开发者都是开发RESTful风格的api,GET方法不会产生修改资源的效果。...可以通过某些重定向状态码对资源的应用程序本地副本与源端服务器上的资源进行验证。比如,HTTP 应用程序可以查看其资源的本地副本是否仍然是最新的,或者在源端服务器上资源是否被修改过。...如果客户端发起了一个条件 GET请求,而最近资源未被修改的话,就可以用这个状态码来说明资源未被修改。...通常,服务器会包含一些首部,以便客户端弄清楚为什么请求无法满足。
206 Partial ContentHTTP 206 Partial Content 成功状态响应代码表示请求已成功,并且主体包含所请求的数据区间,该数据区间是在请求的 Range 首部指定的。...提示备注: 尽管规范要求浏览器在收到该响应并进行重定向时不应该修改 http method 和 body,但并非所有的用户代理都符合此要求。...在重定向过程中,请求方法和消息主体不会发生改变,然而在返回 301 状态码的情况下,请求方法有时候会被客户端错误地修改为 GET 方法。...警告客户端不应该在未进行修改的情况下重复发送此请求。...410 GoneHTTP 410 Gone 说明请求的目标资源在原服务器上不存在了,并且是永久性的丢失。
动作:API对资源的操作应该通过HTTP中的标准方法来完成,包括GET、POST、PUT和DELETE。...状态:API应该是无状态的,即不应该在服务器端保存客户端的状态。客户端应该在每个请求中提供必要的信息,服务器端则根据这些信息来处理请求。...2.操作索引 PUT http://ip:端口/索引名称 查询 GET http://ip:端口/索引名称 # 查询单个索引信息 GET http://ip:端口/索引名称1,索引名称2......读取文档 在Elasticsearch中,可以使用HTTP GET方法读取文档,例如: GET /my_index/_doc/1 # 查询所有文档 GET /my_index/_search 该请求将从...Doe", "age": 32 } } 该请求将更新"my_index"索引中ID为1的文档,将"name"字段的值修改为"Jane Doe","age"字段的值修改为32。
在这个过程中,势必涉及到数据和状态的变化。 互联网通信协议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。
基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等) 工作原理 工作于客户端-服务端架构为上 Web服务器根据接收到的请求后,向客户端发送响应信息 浏览器作为HTTP客户端通过...服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。 HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。...GET 请求指定的页面信息,并返回实体主体。...HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。...POST请求可能会导致新的资源的建立和/或已有资源的修改。 PUT 从客户端向服务器传送的数据取代指定的文档的内容。 DELETE 请求服务器删除指定的页面。
这样客户端就可以查看所有中间HTTP应用程序组成的请求/响应链上,原始包文是否,以及如何被毁坏或修改过; TRACE方法主要用于诊断;也就是说,用于验证请求是否如愿的穿过了请求/响应链。...比如:用来查看本地的副本是否仍为最新的,或者远端服务器上的资源是否被修改过; 下图是客户端发送了一个特殊的if-Modified-Since首部,说明会读取1997年10月之后修改过的文档。...其主要目的是允许POST请求的响应将客户端定向到某个资源上去; 304:Not Modified 客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过通过此响应状态码通知客户端(带有这个状态码的响应不应该包含实体的主体部分...URL发送一个GET请求; 问题出在HTTP/1.1。...通常,服务器会包含一些首部,以便客户端弄清楚为什么请求无法满足。
3、请求体(数据) 将一个页面表单中的组件通过键值对形式编码生成一个格式化窜,可以表示支持多个请求参数的数据。...如果客户端发起了一个条件 GET 请求,而最近资源未被修改的话,就可以用这个状态码来说明资源未 被修改。带有这个状态码的响应不应该包含实体的主体部分。...通常,服务器会包含一些首部,以便客户端弄清楚为什么请求无法满足。...补充:HTTP的常见请求方法: GET、PUT、DELETE、POST、HEAD等,GET和HEAD方法是被认为安全的方法,因为出来进行获取资源信息外,不会有其他意义(作用)。...不如判断资源的类型,通过查看响应中的状态码,看看某个对象是否存在;通过查看首部,测试资源是否被修改了。 ? 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请求方法: ?
如果你想找出是谁修改了一行代码或者一段代码块,以及为什么修改,它非常有用。 我个人觉得这非常方便,如果我想知道为什么添加或删除了某行代码。通过查看历史记录,我可以追溯到最初的用户故事。...REST 客户端 REST客户端扩展允许您直接在Visual Studio Code中发送HTTP请求并查看响应。这样就不再需要使用外部应用程序来向服务器发送HTTP请求了。...语法非常简洁:只需一行代码,使用GET关键字后跟URL即可完成简单的GET请求。如果您想发送更复杂的请求,有很多选项可供您使用,以满足您的需求。...您可以添加身份验证标头,或者如果需要,发送包含JSON数据的完整POST请求。 这个扩展已经安装了超过350万次,如果你需要从API获取数据,它是必备的。 7....一个非常简单的扩展,但是拥有接近250万的安装量,你不应该低估它的能力。
更重要的是,由于http是事实上的互联网通讯标准协议,基于rest设计的api接口,就好像你出国用英语和别人交流,完全不存在沟通障碍。...它的具体表现形式,应该在HTTP请求的头信息中用Accept和Content-Type字段指定,这两个字段才是对"表现层"的描述。...经常会用到的status code整理如下: 200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。...201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。...400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。
HTTP请求头提供了关于请求,响应或者其他的发送实体的信息。 在本章节中我们将具体来介绍HTTP响应头信息。 应答头 说明 Allow 服务器支持哪些请求方法(如GET、POST等)。...Java的GZIPOutputStream可以很方便地进行gzip压缩,但只有Unix上的Netscape和Windows上的IE 4、IE 5才支持它。...只有当浏览器使用持久HTTP连接时才需要这个数据。...客户可以通过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件GET,只有改动时间迟于指定时间的文档才会返回,否则返回一个304(Not Modified)状态。...Refresh 表示浏览器应该在多少时间之后刷新文档,以秒计。
预设一个RestController,在本地的8080端口启动一个应用,用于接收http请求。...发出一个这样的GET请求: GET /hello?...而email不同,它可能是唯一的,但更多的,它是资源的属性,所以,笔者认为不应该在路径中出现非定位性的动态参数。而是把email作为@RequestParam参数。...接口不应该出现动词,这里的update并不是一个动作,而是标记着操作的类型,因为针对某个属性可能出现的操作类型可能会有很多,所以我习惯加上一个update后缀,明确表达想要进行的操作,而不是仅仅依赖于GET...实际上,修改操作推荐使用的请求方式应当是PUT,这点笔者的理解是,已经使用update标记了行为,实际开发中不习惯使用PUT。
在任何时候,如果用户希望访问一个受保护的资源或者路由的时候,用户应该在访问请求中包含 JWT 令牌。...通常这个令牌是存储在 HTTP 请求的头部信息,一般会使用 Authorization 字段,使用 Bearer 模式。...服务器上受保护的路由将会检查随着访问提交的 JWT 令牌。如果令牌是有效的,用户将会被允许访问特定的资源。...如果 JWT 令牌中包含有必要的信息,服务器的服务端将不需要再次对数据库进行查询以加快访问速度。当然,不是所有的时候都可以这样进行处理。...需要注意的是,通过使用了签名的令牌,尽管用户可能没有办法对使用的令牌进行修改,但是令牌中包含的所有信息将会暴露给用户或者其他的应用。因此,你不应该在你的令牌中存储密钥或者任何的敏感信息。