基于HTTP的请求方式总结

请求方式

CONNECT

在 HTTP 协议中,CONNECT 方法可以开启一个客户端与所请求资源之间的双向沟通。它可以用来创建隧道(tunnel)。

 

例如,​CONNECT 可以用来访问采用了 SSL (HTTPS)  协议的站点。客户端要求代理服务器将 TCP 连接作为通往目的主机隧道。之后该服务器会代替客户端与目的主机建立连接。连接建立好之后,代理服务器会面向客户端发送或接收 TCP 消息流。

 

CONNECT 是一个点对点的连接。它是一个没有实体的请求,但是能够成功请求到响应,同时也是一种不安全、不可缓存、无法运用到 HTML 表单上和非幂等的的一种请求连接方式。

 

示例

CONNECT server.example.com:80 HTTP/1.1 

Host: server.example.com:80 

Proxy-Authorization: basic aGVsbG86d29ybGQ=

 

DELECT

HTTP DELECT 请求方法用于删除指定的资源。

请求是否有主体可以有
成功的返回是否有主体可以有
安全
幂等
可缓存
可以在HTML forms中使用

示例

请求

DELECT /file.html HTTP/1.1

响应

如果 ​DELETE ​方法成功执行,那么可能会有以下几种状态码:

  • 状态码  ​202​ (​Accepted​) 表示请求的操作可能会成功执行,但是尚未开始执行。
  • 状态码  ​204​ (​No Content​) 表示操作已执行,但是无进一步的相关信息。
  • 状态码  ​200​ (​OK​) 表示操作已执行,并且响应中提供了相关状态的描述信息。

HTTP/1.1 200 OK 

Date: Wed, 21 Oct 2015 07:28:00 GMT

<html>

  <body>

    <h1>File deleted.</h1> 

  </body>

</html>

GET

GET 方法是根据一个资源地址进行资源访问,该方式的请求只用于获取数据。

 

请求是否有主体
成功的响应是否有主体
安全
幂等
可缓存
HTML 表单是否支持

语法

GET /index.html HTTP/1.1

HEAD

HEAD 方法是在请求大的资源之前发送的一个请求,该请求的响应会返回请求资源的大小,判断是否要下载该资源,可以节省宽带。该方法请求资源的头部信息和 GET 方式请求的返回一致。

 

HEAD 方法响应不应该包过正文部分,即使有正文部分也会被隐藏,虽然描述正文的响应头部可能会包含 Content-Length 但是这是给描述相同情况下 GET 请求的。

 

如果 HEAD 请求结果显示在上一次 GET 请求后缓存的资源已经过期了,那么该缓存会失效,即使 GET 请求已经完成。

 

请求是否有主体
成功的响应是否有主体
安全
幂等
可缓存
HTML 表单是否支持

语法

HEAD /index.html HTTP/1.1

OPTIONS

OPTIONS 方法用于获取目的资源所支持的通信方式,客户端可以通过指定 URL 或者用 * 表示对整个服务站使用 OPTIONS 方法。

 

请求是否有主体
成功的响应是否有主体
安全
幂等
可缓存
HTML 表单是否支持

语法

OPTIONS /index.html HTTP/1.1

OPTIONS * HTTP/1.1

示例

检测服务器所支持的请求方式

可以使用 OPTIONS 方法对服务器发起请求,已检测服务器支持哪些 HTTP 方法:

curl -X OPTIONS http://example.org -i

随后服务端会响应成功,其中会带有 Allow 属性。Allow 属性中所有的方法就是该资源允许的访问方式。

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 的预检请求,是为了检测在跨域情况下,实际请求是否被允许。首先这个请求必须带有一个 Origin 告诉服务器这个请求来自哪里,这样才能够继续预检请求。服务器会根据预检请求中的 Access-Control-Request-Method、Access-Control-Request-Headers 来判断是否接受实际请求,其中还会通过 Access-Control-Request-Credentials 来判断是否带有 Cookie 属性。

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-Request-Credentials: true

服务器返回 Access-Control-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

PATCH

PATCH 方式是一种非等幂的请求方式,这种方式每次请求都会产生不同的结果,PUT 代表着一种覆盖文件请求方式,而 POST 请求方式又不带有补丁一说的性质。

我们可以通过响应头中的 Allow 、Allow-Control-Request-Method(CORS 跨域)中查看服务器支不支持 PATCH 请求方式。响应头还有一个隐式属性 Accept-Patch 表示接受补丁文件的格式。

 

请求是否有主体
成功的响应是否有主体
安全
幂等
可缓存
HTML 表单是否支持

语法

PATCH /file.txt HTTP/1.1

示例

请求

PATCH /file.txt HTTP/1.1 

Host: www.example.com

Content-Type: application/example

If-Match: "e0023aa4e"

Content-Length: 100

 

[description of changes]

响应

204 状态码表示操作执行成功,没有任何返回。

HTTP/1.1 204 No Content

Content-Location: /file.txt

ETag: "e0023aa4f"

POST

POST 方式发送数据给服务器,请求主题由 Content-Type 属性来决定,POST 是一个非幂等请求方式。

如果 POST 请求通过 HTML 表单提交,其需要设置 enctype 属性,如果是 input 、button 标签的时候需要设置 formenctype 属性。

    1. applicationc/xxx-form-urlencoded : 数据被编码成以 & 分割的对子键模式,以 = 分割的 key value 的模式,非字母和数字字符会被提前 precent-encoding,这也是为什么这种类型不支持二进制数据。(应该用 multipart/form-data 代替)。
    1. multipart/form-data
    1. text/plain

当 POST 请求时通过除了 HTML 表单的其他方式发送请求的,例如 fetch XMLHttpRequest,那么任何 Content-Type 都可以设置。

 

请求是否有主体
成功的响应是否有主体
安全
幂等
可缓存当时新数据时才缓存
HTML 表单是否支持

语法

POST /index.html HTTP/1.1

示例

使用默认的 application/xxx-form-urlencoded 做为 content type 的简单表单:

POST / HTTP/1.1

Host: foo.com

Content-Type: application/x-www-form-urlencoded

Content-Length: 13

 

say=Hi&to=Mom

使用 multipart/form-data 作为 content-type 的表单

POST /test.html HTTP/1.1 

Host: example.org 

Content-Type: multipart/form-data;boundary="boundary" 

 

--boundary 

Content-Disposition: form-data; name="field1" 

 

value1 

--boundary 

Content-Disposition: form-data; name="field2"; filename="example.txt" 

 

value2

 

PUT

PUT 请求方式是一种 创建、覆盖目标资源的操作。如果服务器没有这个资源,该资源将会被创建,如果服务器由该资源,那么这个资源将会被覆盖。

 

请求是否有主体
成功的响应是否有主体
安全
幂等
可缓存
HTML 表单是否支持

语法

PUT /text.txt HTTP/1.1

示例

请求

PUT /text.txt HTTP/1.1

Host: example.com

Content-type: text/plain

Content-length: 10

 

hello world

响应

如果是被创建,需要返回 201 Created 状态码

HTTP/1.1 201 Created

Content-Location: /text.txt

如果是被覆盖的,需要返回 200(ok) 或者 204 No Content

HTTP/1.1 204 No Content

Content-Location: /text.txt

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值