http请求方式分类及区别

Http请求方式

其中HTTP1.0 定义了三种请求方法: GET, POSTHEAD 方法。
HTTP1.1 新增了五种请求方法:OPTIONS, PUT, DELETE, TRACECONNECT 方法。

  • GET: 请求指定的页面信息,并返回实体主体。
    GET可以说是最常见的了,它本质就是发送一个请求来取得服务器 上的某一资源。资源通过一组HTTP头和呈现据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。

  • HEAD:类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头。
    HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息。有的人可能觉得这个方法没什么用,其实不是这样的。
    想象一个业务情景:欲判断某个资源是否存在,我们通常使用GET,但这里用HEAD则意义更加明确。

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

    举个例子:如一个用于提交博文的URL,/addBlog。如果用PUT,则提交的URL会是像这样的”/addBlog/abc123”,其中abc123就是这个博文的地址。而如果用POST,则这个地址会在提交后由服务器告知客户端。目前大部分博客都是这样的。显然,PUT和POST用途是不一样的。具体用哪个还取决于当前的业务场景。

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

  • POST:向指定资源提交数据,进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。

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

  • CONNECT:HTP/1. 1协议中预留给能够将连接改为管道方式的代理服务器。

  • TRACE: 回显服务器收到的请求,主要用于测试或诊断。

    GET和POST的区别

    1、GET请求,请求的数据会附加在URL之后即请求行,以?分割URL和传输数据,多个参数用&连接。URL的编码格式采用的是ASCII编码,而不是uniclde,即是说所有的非ASCII字符都要编码之后再传输。
    而POST请求会把请求的数据放置在请求实体中。数据是以流的方式写过去,不会在地址栏上面显示。
    因此,GET请求的数据会暴露在地址栏中,而POST请求则不会。

2、传输数据的大小
在HTTP规范中,没有对URL的长度和传输的数据大小进行限制。但是在实际开发过程中,对于GET,特定的浏览器和服务器对URL的长度有限制。因此,在使用GET请求时,传输数据会受到URL长度的限制。(因为它是写在地址栏的)
而对于POST请求,由于不是URL传值,理论上是不会受限制的,但实际上各个服务器会规定对POST提交数据大小进行限制,Apache、IIS等服务器都有各自的配置。
3、安全性
POST的安全性比GET的高。
这里的安全是指真正的安全,而不同于上面GET提到的安全方法中的安全,上面提到的安全仅仅是不修改服务器的数据。比如,在进行登录操作,通过GET请求,用户名和密码都会暴露再URL上,因为登录页面有可能被浏览器缓存以及其他人查看浏览器的历史记录的原因,此时的用户名和密码就很容易被他人拿到了。除此之外,GET请求提交的数据还可能会造成Cross-site request frogery攻击。