参考文章:
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods
1、options
返回服务器针对特定资源所支持的HTTP方法或向web服务器发送*测试服务器功能(允许客户端查看服务器性能)
用来描述了目标资源的通信选项,会返回服务器支持预定义URL的HTTP策略。
- 检测服务器所支持的请求方法
可以使用 OPTIONS 方法对服务器发起请求,以检测服务器支持哪些 HTTP 方法:
curl -X OPTIONS http://example.org -i
响应报文包含一个 Allow
首部字段,该字段的值表明了服务器支持的所有 HTTP 方法:
HTTP/1.1 200 OK
Allow: OPTIONS, GET, HEAD, POST
Cache-Control: max-age=604800
Date: Thu, 13 Oct 2016 11:45:00 GMT
Expires: Thu, 20 Oct 2016 11:45:00 GMT
Server: EOS (lax004/2813)
x-ec-custom-error: 1
Content-Length: 0
- CORS 中的预检请求
在 CORS中,可以使用 OPTIONS 方法发起一个预检请求,以检测实际请求是否可以被服务器所接受。预检请求报文中的 Access-Control-Request-Method
首部字段告知服务器实际请求所使用的 HTTP 方法Access-Control-Request-Headers
首部字段告知服务器实际请求所携带的自定义首部字段。服务器基于从预检请求获得的信息来判断,是否接受接下来的实际请求。
OPTIONS /resources/post-here/ HTTP/1.1
Host: bar.other
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Origin: http://foo.example
Access-Control-Request-Method: POST
Access-Control-Request-Headers: X-PINGOTHER, Content-Type
服务器所返回的 Access-Control-Allow-Methods
首部字段将所有允许的请求方法告知客户端。该首部字段与 Allow
类似,但只能用于涉及到 CORS 的场景中。
HTTP/1.1 200 OK
Date: Mon, 01 Dec 2008 01:15:39 GMT
Server: Apache/2.0.61 (Unix)
Access-Control-Allow-Origin: http://foo.example
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: X-PINGOTHER, Content-Type
Access-Control-Max-Age: 86400
Vary: Accept-Encoding, Origin
Content-Encoding: gzip
Content-Length: 0
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
Content-Type: text/plain
2、Get
GET 方法请求指定的资源(请求指定页面信息,并返回实体主体)。使用 GET 的请求应该只用于获取数据,并且不应对数据产生其他影响。。
-
说明:GET请求是可以缓存的,我们可以从浏览器历史记录中查找到GET请求,还可以把它收藏到书签中;且GET请求有长度限制,仅用于请求数据(不修改)。
-
注:因GET请求的不安全性,在处理敏感数据时,绝不可以使用GET请求。
3、Post
Post方法向指定资源提交数据进行处理请求(提交表单、上传文件),又可能导致新的资源的建立或原有资源的修改,POST
方法发送数据给服务器. 请求主体的类型由 Content-Type
首部指定.
-
application/x-www-form-urlencoded:
数据被编码成以'&'
分隔的键-值对, 同时以'='
分隔键和值. 非字母或数字的字符会被percent-encoding
: 这也就是为什么这种类型不支持二进制数据(应使用multipart/form-data
代替). multipart/form-data
text/plain
- 说明:POST请求永远不会被缓存,且对数据长度没有限制;我们无法从浏览器历史记录中查找到POST请求。
4、Put
PUT 请求方法使用请求中的负载创建或者替换目标资源。
用于将数据发送到服务器以创建或更新资源,它可以用上传的内容替换目标资源中的所有当前内容。(从客户端向服务器传送的数据取代指定文档的内容)
它会将包含的元素放在所提供的URL下,如果URL指示的是当前资源,则会被改变。如果URL未指示当前资源,则服务器可以使用该URL创建资源。
PUT
与 POST
方法的区别在于,PUT方法是幂等的:调用一次与连续调用多次是等价的(即没有副作用),而连续调用多次POST方法可能会有副作用,比如将一个订单重复提交多次。
5、Head
HEAD就像GET,只不过服务端接受到HEAD请求后只返回响应头,而不会发送响应内容。当我们只需要查看某个页面的状态的时候,使用HEAD是非常高效的,因为在传输的过程中省去了页面内容。
- 请求方法的一个使用场景是在下载一个大文件前先获取其大小再决定是否要下载, 以此可以节约带宽资源.
HEAD
方法的响应不应包含响应正文. 即使包含了正文也必须忽略掉. 虽然描述正文信息的entity headers
例如Content-Length
可能会包含在响应中, 但它们并不是用来描述HEAD
响应本身的, 而是用来描述同样情况下的GET
请求应该返回的响应.
6、Delete
Delete方法用来删除指定的资源,它会删除URL给出的目标资源页面。
7、Trace
TRACE
方法实现沿通向目标资源的路径的消息环回(loop-back)测试 ,提供了一种实用的 debug 机制。(回显服务器收到的请求,主要用于测试和诊断)
请求的最终接收者应当原样反射(reflect)它接收到的消息,除了以下字段部分,作为一个Content-Type
为 message/http
的200(OK)响应的消息的主体(body)返回给客户端 。
最终接收者是指初始(origin)服务器,或者第一个接收到 Max-Forwards
值为 0的请求的服务器。
8、Connect
CONNECT 方法可以开启一个客户端与所请求资源之间的双向沟通的通道。它可以用来创建隧道(tunnel)。它通过简单的TCP/IP隧道更改请求连接,通常是使用解码的HTTP代理来进行SSL编码的通信(HTTPS)。
CONNECT
可以用来访问采用了 SSL
(HTTPS
) 协议的站点。客户端要求代理服务器将 TCP 连接作为通往目的主机隧道。之后该服务器会代替客户端与目的主机建立连接。连接建立好之后,代理服务器会面向客户端发送或接收 TCP 消息流。
post和get总结:
get 和 post区别:
1.消息体与携带数据:
-
get请求无消息体,只能携带少量数据(提交的数据最多只能有1024字节)
-
post请求有消息体,可以携带大量数据(没有此限制)
2.携带数据的方式:
-
get请求将数据放在url地址中
-
post请求将数据放在消息体中
3.请求数据位置
-
get请求提交的数据放置在HTTP请求协议头中
-
post提交的数据则放在实体数据中;
可以说,GET是从服务器上获取数据,POST是向服务器传送数据
网友评论