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本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。
描述:GET方法用来请求访问已被URI 识别的资源。指定的资源经服务器端解析后返回响应内容。也就是说,如果请求的资源是文本,那就保持原样返回;如果是像CGI(Common Gateway Interface,通用网关接口)那样的程序,则返回经过执行后的输出结果
简述:POST 方法用来传输实体的主体。
描述:虽然用GET 方法也可以传输实体的主体,但一般不用GET 方法进行传输,而是用POST 方法。虽说POST 的功能与GET 很相似,但POST 的主要目的并不是获取响应的主体内容。POST方法期初是用来向服务器输入数据的,实际上,通常会用它来支持HTML的表单。表单中填好的数据通常会被送给服务器,然后由服务器将其发送到它要去的地方。
- 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 来优化网站性能,但是这个也有一定问题:
简述:本质上来讲,PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有POST的数据存放位置由服务器自己决定。
描述:PUT 方法用来传输文件。就像FTP 协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到请求URI 指定的位置。
简述:HEAD 方法和 GET 方法一样,只是不返回报文主体部分。用于确认URI 的有效性及资源更新的日期时间等。
描述:HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息。
简述:删除某一个资源。基本上这个也很少见,不过还是有一些地方比如amazon的S3云服务里面就用的这个方法来删除资源。
描述:DELETE方法用来删除文件,是与PUT相反的方法。DELETE方法按请求URI 删除指定的资源。
简述:OPTIONS方法用来查询针对请求 URI 指定的资源支持的方法。
复杂点说:OPTIONS:这个方法很有趣,但极少使用。它用于获取当前URL所支持的方法。若请求成功,则它会在HTTP头中包含一个名为Atow的头,值是所支持的方法,如GET,POST。
简述:TRACE请求服务器回送收到的请求信息,主要用于测试和诊断,所以是安全的。
描述:TRACE方法是让Web 服务器端将之前的请求通信环回给客户端的方法。
简述: CONNECT这个方法的作用就是把服务器作为跳板,让服务器代替用户去访问其它网页,之后把数据原原本本的返回给用户。
描述:CONNECT 方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP 通信。主要使用SSL(Secure Sockets Layer,安全套接层)和TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。