HTTP的几种请求方法用途
一、GET
方法:
发送一个请求来获取服务器上的某一资源
-
GET
方法的特点:- 是HTTP的一种请求方法,用于从服务器获取资源
- 是一种幂等的方法,多次发送相同的
GET
请求会返回相同的结果
-
GET
请求和POST
请求的区别:- GET请求将参数附加在URL的查询字符串中,而POST请求将参数放在请求体中
- GET请求的数据会显示在URL中,而POST请求的数据不会显示在URL中
- GET请求一般用于获取数据,而POST请求一般用于提交数据
-
GET
请求可以有请求体吗?- 可以,但根据HTTP规范,GET请求不应该有请求体,参数应该通过URL的查询字符串传递
-
GET
请求的参数如何传递?- GET请求的参数可以通过URL的查询字符串传递,例如:
/api/users?id=123&name=poetry
- GET请求的参数可以通过URL的查询字符串传递,例如:
-
GET请求的安全性和幂等性如何保证?
- GET请求不会对服务器端的资源产生副作用,因此被视为安全的
- GET请求是幂等的,多次发送相同的GET请求不会对服务器端产生影响
二、POST
方法:
向URL
指定的资源提交数据或附加新的数据
-
POST
方法的特点:- POST方法是HTTP的一种请求方法,用于向服务器提交数据
- 它不是幂等的,多次发送相同的POST请求可能会产生不同的结果
-
GET
请求和POST
请求的区别:- POST请求将参数放在请求体中,而GET请求将参数附加在URL的查询字符串中
- POST请求的数据不会显示在URL中,而GET请求的数据会显示在URL中
- POST请求一般用于提交数据,而GET请求一般用于获取数据
-
POST请求的请求体如何传递数据?
- POST请求的数据可以通过请求体以表单形式传递,或者以JSON等格式传递
-
POST请求的安全性和幂等性如何保证?
- POST请求可能对服务器端的资源产生副作用,因此被视为不安全的
- POST请求不是幂等的,多次发送相同的POST请求可能会对服务器端产生影响
三、PUT
方法:
将数据发送给服务器,并将其存储在指定的URL位置。与POST方法不同的是,PUT方法指定了资源在服务器上的位置。
-
PUT
方法的特点:- PUT方法是HTTP的一种请求方法,用于将数据发送给服务器并存储在指定的URL位置
- 它是一种幂等的方法,多次发送相同的PUT请求会对服务器端产生相同的结果
-
PUT请求和POST请求有什么区别?
- PUT请求用于指定资源在服务器上的位置,而POST请求没有指定位置
- PUT请求一般用于更新或替换资源,而POST请求一般用于新增资源或提交数据
-
PUT请求的幂等性如何保证?
- PUT请求的幂等性保证是由服务器端实现的
- 服务器端应该根据请求中的资源位置来处理请求,多次发送相同的PUT请求会对该位置上的资源进行相同的更新或替换操作
注: 由于HTTP/1.1的PUT方法自身不带验证机制,所以会导致任何人都可以上传文件,存在安全性问题,一般不使用,除非配合验证机制,或架构设计采用REST(Representational State Transfer,表征状态转移)标准的同类网站,才会选择使用。
四、HEAD
方法:
获得报文首部
- HEAD方法和GET方法一样,只是不返回报文主体部分
- 一般用于确认URL的有效性及资源更新的日期时间等
五、DELETE
方法:
删除服务器上的某资源
- 与PUT方法相反,按请求URL删除指定的资源
- 但是与PUT一样不带验证机制
六、OPTIONS
方法:
用于获取当前URL
所支持的方法
- 如果请求成功,会有一个
Allow
的头包含类似“GET,POST”
这样的信息
七、TRACE
方法:
让Web服务器端将之前的请求通信返回给客户端
-
请求过程
发送请求时,在Max-Forwards首部字段中填入数值,每经过一个服务器端就减1,当变成0时,就停止继续传输,最后接收到请求的服务器则返回状态码200 OK的响应。
-
目的
客户端可以通过TRACE方法可以查询发送出去的请求是怎么被加工修改/篡改的,因为请求想要连接到源目标服务器可能会通过代理中转,TRACE方法就是用来确认连接过程中发生的一系列操作。但是它容易引发XST(Cross-Site Tracing,跨站追踪)
八、CONNECT
方法:
把请求连接转换到透明的TCP/IP
通道
-
要求
- 要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信
- 主要使用SSL(Secure Sockets Layer,安全套接层)和TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输
-
格式
CONNECT 代理服务器名:端口号 HTTP版本