HTTP客户端请求方法

目录

HTTP方法概述

HTTP1.0定义了三种请求方法:GET、POST和HEAD方法。
HTTP1.1新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE和CONNECT

方法 简述 描述 支持HTTP协议版本
GET 获取资源 请求指定的页面信息,并返回实体主体 1.0、1.1
POST 传输实体主体 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。 1.0、1.1
HEAD 获得报文首部 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头 1.0、1.1
PUT 传输文件、数据 从客户端向服务器传送的数据取代指定的文档的内容 1.0、1.1
DELETE 删除文件、数据 请求服务器删除指定的页面 1.0、1.1
OPTIONS 询问支持的方法 允许客户端查看服务器的性能 1.1
CONNECT 要求用隧道协议连接代理 HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器 1.1
TRACE 追踪路径 回显服务器收到的请求,主要用于测试或诊断 1.1
PATCH PUT方法的补充 用来对已知资源进行局部更新 1.1

GET

简述:GET本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。

描述:GET方法用来请求访问已被URI 识别的资源。指定的资源经服务器端解析后返回响应内容。也就是说,如果请求的资源是文本,那就保持原样返回;如果是像CGI(Common Gateway Interface,通用网关接口)那样的程序,则返回经过执行后的输出结果

POST

简述:POST 方法用来传输实体的主体。

描述:虽然用GET 方法也可以传输实体的主体,但一般不用GET 方法进行传输,而是用POST 方法。虽说POST 的功能与GET 很相似,但POST 的主要目的并不是获取响应的主体内容。POST方法期初是用来向服务器输入数据的,实际上,通常会用它来支持HTML的表单。表单中填好的数据通常会被送给服务器,然后由服务器将其发送到它要去的地方。

GET 和 POST的区别

  • Get 是用来从服务器上获得数据,而 Post 是用来向服务器上传递数据。
  • GET 在浏览器回退时是无害的,而 POST 会再次提交请求。
  • GET 产生的 URL 地址可以被收藏为书签,而 POST 不可以。
  • GET 请求会被浏览器主动 cache,而 POST 不会,除非手动设置。
  • GET 请求只能进行 URL 编码,而 POST 支持多种编码方式。
  • GET 请求参数会被完整保留在浏览器历史记录里,而 POST 中的参数不会被保留。
  • GET 请求在 URL 中传送的参数是有长度限制的,而 POST 么有。
  • 对参数的数据类型,GET 只接受 ASCII 字符,而 POST 没有限制。
  • GET 比 POST 更不安全,因为参数直接暴露在 URL 上,所以不能用来传递敏感信息。
  • GET 参数通过 URL 传递,POST 放在 Request body 中。
  • Get 将表单中数据的按照 variable=value 的形式,添加到 action 所指向的 URL 后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post 是将表单中的数据放在 form 的数据体中,按照变量和值相对应的方式,传递到 action 所指向 URL。
    (本答案参考自 w3schools)

除此之外

  • GET 和 POST 本质上没有区别,HTTP 的底层是 TCP/IP,所以 GET 和 POST 的底层也是 TCP/IP,也就是说,GET/POST 都是 TCP 链接。
  • GET 和 POST 还有一个重大区别:
    简单的说:GET 产生一个 TCP 数据包;POST 产生两个 TCP 数据包。
    复杂的说:对于 GET 方式的请求,浏览器会把 http header 和 data 一并发送出去,服务器响应 200(返回数据);而对于 POST,浏览器先发送 header,服务器响应 100(continue),浏览器再发送 data,服务器响应 200(返回数据)。
    故此GET需要一步,POST 需要两步,时间上消耗的要多一点,看起来 GET 比 POST 更有效。

因此 Yahoo 团队有推荐用 GET 替换 POST 来优化网站性能,但是这个也有一定问题:

  1. GET 与 POST 都有自己的语义,不能随便混用。
  2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的 TCP 在验证数据包完整性上,有非常大的优点。
  3. 并不是所有浏览器都会在 POST 中发送两次包,比如 Firefox 就只发送一次。

PUT

简述:本质上来讲,PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有POST的数据存放位置由服务器自己决定。

描述:PUT 方法用来传输文件。就像FTP 协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到请求URI 指定的位置。

HEAD

简述:HEAD 方法和 GET 方法一样,只是不返回报文主体部分。用于确认URI 的有效性及资源更新的日期时间等。

描述:HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息。

DELETE

简述:删除某一个资源。基本上这个也很少见,不过还是有一些地方比如amazon的S3云服务里面就用的这个方法来删除资源。

描述:DELETE方法用来删除文件,是与PUT相反的方法。DELETE方法按请求URI 删除指定的资源。

OPTIONS

简述:OPTIONS方法用来查询针对请求 URI 指定的资源支持的方法。

复杂点说:OPTIONS:这个方法很有趣,但极少使用。它用于获取当前URL所支持的方法。若请求成功,则它会在HTTP头中包含一个名为Atow的头,值是所支持的方法,如GET,POST。

TRACE

简述:TRACE请求服务器回送收到的请求信息,主要用于测试和诊断,所以是安全的。

描述:TRACE方法是让Web 服务器端将之前的请求通信环回给客户端的方法。

CONNECT

简述: CONNECT这个方法的作用就是把服务器作为跳板,让服务器代替用户去访问其它网页,之后把数据原原本本的返回给用户。

描述:CONNECT 方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP 通信。主要使用SSL(Secure Sockets Layer,安全套接层)和TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。

上一篇:FreeRTOS消息队列 & ESP32使用


下一篇:从备考PMP到与项目经理同呼吸