HTTP 有哪些方法
-
GET、HEAD、POST、PUT、DELETE、CONNECT、OPTIONS、TRACE、PATCH等8种类型。
-
方法 语义 GET 获取URL资源。 POST 更新URL对应资源。 HEAD 和GET相似,但是没有响应体 PUT 新增资源。 DELETE 删除资源。
GET 和 POST 有什么区别
- 其实GET 和 POST 在底层上是没有区别的。
- 因为 GET 和 POST 都是 HTTP 协议,都是基于 TCP/IP,所以在HTTP实现上,其实是没有区别的。
- GET 和 POST 都可以选择在URL 上 填入路径参数,也都可以在 request body 里面填入内容。(一般大家会觉得 路径参数 是get 常用,request body 是 post 常用)
- 但是GET 和 POST 的语义不一样,不同浏览器、服务器对此的操作不一样,导致我们使用上需要进行区别。
- GET 的语义是给定URL,获取资源,不对远程资源进行修改,是幂等的。
- POST 的语义是更新对应的远程资源,不是幂等的(多次操作的结果可能是不一样的)。
- 不同浏览器对URL长度有限制:大多是2k字节,因此对于长的修改内容,放在POST 的 request body 会更好。
- 不同服务器对GET中的request body 的处理方式也不同:有的服务器可能会直接忽视request body,有的不会忽视。
- 不同的服务器对于 GET 和 post 的发送方式可能也不同
- GET 请求,浏览器通常会把 http header 和 body 一并发送。
- POST 请求,有的浏览器会选择先发送 header,服务器响应 100 continue,之后再发送 body;有的浏览器也会选择一并发送(firefox)。
请求路径、请求头和请求体中的请求参数的区别
名称 | 内容 | 例子 | 优点 | 缺点 | java使用 |
---|---|---|---|---|---|
请求路径中的参数 | 跟在路径后面,用 / 分割 | http://example.com/{id} | @PathVariable | ||
请求路径中的查询参数 | 通常用于GET请求中,直接附在URL路径后方的参数。 | http://example.com/api?a=1&b=2 (问号后的参数) | 1. 简单,便于解析 2. 对于无状态简单的请求,很方便。 | 1. 不会加密,会直接暴露参数值。 2. 由于不同的浏览器对URL长度会有限制,因此参数长度有限制。 3. | |
请求头中的参数 | 在HTTP header中的字段。 | accept 字段 content-type 字段 content-length字段 | 1. 安全性较高,不会出现在浏览器URL上。 2. 适用与所有HTTP方法。 | 1. 由于HTTP 头大小通常有限制,因此不适合大量数据传输。 | @RequestHeader |
请求体中的参数 | 在请求体中。通常用于PUT、POST请求。 | 1. 可以传输大量数据。 2. 可以传输敏感数据。 | 1. 需要指定content-type 字段。 2. 相对更消耗带宽。 | @RequestBody |
- Reference: