前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HTTP 请求方法

HTTP 请求方法

作者头像
Yif
发布2019-12-26 15:26:43
1.2K0
发布2019-12-26 15:26:43
举报
文章被收录于专栏:Android 进阶Android 进阶
undefined
undefined

在介绍HTTP 请求方法之前,先来谈一下幂等性,那什么是幂等性呢。

幂等性:指的是同样的请求不管执行多少次,效果都是一样,服务器状态也是一样的。具有幂等性的请求方法没有副作用。(统计用途除外)

Http的请求方法代表了客户端想对服务器进行的操作,比如:POST、GET、HEAD、PUT、DELETE、TRACE、OPTIONS。 常用的不过于CRUD四个。增:PUT;删:DELETE;改: POST;查: GET。

GET 与 POST

GET

  • 向服务器请求数据,获取资源,在大部分网络请求中,GET方法非常常见,并且它具有幂等性。
  • GET请求没有请求体,对于GET请求的请求参数在URL后面加上一个"?"的后面,参数以key=value的形式。参数与参数之间使用"&"进行连接。
  • GET请求是通过URL传输参数的,所以GET请求可以传输的参数是有限的。 POST
  • 用于向表单提交数据,传送的数据放在请求体中。
  • 在POST请求中,请求参数放在请求体中,服务器会根据POST请求体中的参数创建一个页面,然后返回给客户端。POST不具有幂等性。 POST 与 GET 区别
    1. 作用不同:GET 用于获取资源,而 POST 用于传输实体主体。
    2. 参数位置不一样:GET 和 POST 的请求都能使用额外的参数,但是 GET 的参数是以查询字符串出现在 URL 中,而 POST 的参数存储在实体主体中。但是并不是 POST 参数存储在实体主体中就认为它的安全性更高,我们可以通过一些抓包工具如(Fiddler)查看。 在URL 只支持 ASCII 码,因此 GET 的参数中如果存在中文等字符就需要先进行编码。例如 中文 会转换为 %E4%B8%AD%E6%96%87,而空格会转换为 %20。POST 支持标准字符集。
  1. 安全性:安全的 HTTP 方法不会改变服务器状态,也就是说它只是可读的。 GET 方法是安全的,而 POST 却不是,因为 POST 的目的是传送实体主体内容,这个内容可能是用户上传的表单数据,上传成功之后,服务器可能把这个数据存储到数据库中,因此状态也就发生了改变。
    • 安全的方法除了 GET 之外还有:HEAD、OPTIONS。
    • 不安全的方法除了 POST 之外还有 PUT、DELETE。
  2. 幂等性:GET是幂等性,而POST不是幂等性。在正确实现的条件下,GET,HEAD,PUT,OPTIONS 和 DELETE 等方法都是幂等的,而 POST 方法不是。 GET /pageX HTTP/1.1 是幂等的,连续调用多次,客户端接收到的结果都是一样的: GET /pageX HTTP/1.1 GET /pageX HTTP/1.1 GET /pageX HTTP/1.1 GET /pageX HTTP/1.1 POST /add_row HTTP/1.1 不是幂等的,如果调用多次,就会增加多行记录: POST /add_row HTTP/1.1 -> Adds a 1nd row POST /add_row HTTP/1.1 -> Adds a 2nd row POST /add_row HTTP/1.1 -> Adds a 3rd row DELETE /idX/delete HTTP/1.1 是幂等的,即便不同的请求接收到的状态码不一样: DELETE /idX/delete HTTP/1.1 -> Returns 200 if idX exists DELETE /idX/delete HTTP/1.1 -> Returns 404 as it just got deleted DELETE /idX/delete HTTP/1.1 -> Returns 404
  3. 可缓存性:GET可以缓存,但是POST大部分情况下无法缓存。 如果要对响应进行缓存,需要满足几个条件:
    • 请求报文的 HTTP 方法本身是可缓存的,包括 GET 和 HEAD,但是 PUT 和 DELETE 不可缓存,POST 在多数情况下不可缓存的。
    • 响应报文的状态码是可缓存的,包括:200, 203, 204, 206, 300, 301, 404, 405, 410, 414, and 501。
    • 响应报文的 Cache-Control 首部字段没有指定不进行缓存。
  4. 在使用 XMLHttpRequest 的 POST 方法时,浏览器会先发送 Header 再发送 Data。但并不是所有浏览器会这么做,例如火狐就不会。而 GET 方法 Header 和 Data 会一起发送。 XMLHttpRequest 简介:XMLHttpRequest 是一个 API,它为客户端提供了在客户端和服务器之间传输数据的功能。它提供了一个通过 URL 来获取数据的简单方式,并且不会使整个页面刷新。这使得网页只更新一部分页面而不会打扰到用户,局部刷新避免资源浪费。并且XMLHttpRequest 在 AJAX 中被大量使用。

HEAD

获取报文首部,并且具有幂等性。HEAD请求与GET请求一样,没有请求体。但是与GET区别在于,当使用HEAD进行请求服务器时,服务器只返回响应头,不返回响应体。 常用于:

  • 检查请求的URL是否有效,可以通过响应码进行判断
  • 可以根据返回的响应头进行判断资源是否被篡改

PUT

用来向服务器上传文件,并且具有幂等性。与POST区别在于:POST用于向服务器发送数据,而PUT用于向服务器储存数据。 它自身不带验证机制,导致任何人都可以上传文件,有很大的安全问题,一般不使用该方法。 当使用PUT进行请求时,服务器会使用PUT的请求体的数据创建一个由它请求的URL命名的新文件。没有进行特殊说明,一般PUT请求的请求体只用于创建或修改该资源上。如果请求的URL在服务器中不存在,则根据该请求的主体部分创建一个由该请求URL命名的新文档;如果该URL在服务器中已经存在,则用该主体替代他。

DELETE

用于删除服务器上的文件,并且具有幂等性。但是服务器并不是真正的删除文件,而是给需要删除的文件做一个标记,与PUT功能相反。它也没有验证机制,有很大的安全问题。

PATCH

对资源进行部分修改。与PUT区别在于,PUT是修改所有资源,替代它,而PATCH只是修改部分资源。

OPTIONS

具有幂等性。当客户端不清楚对资源操作的方法,可以使用这个请求询问服务器该资源支持的请求方法,在响应字段allow中返回,比如:Allow: GET, POST, HEAD。它只可以在HTTP 1.1中使用。

TRACE

用来查看一个请求,经过网关,代理到达服务器,最后请求的变换。显示出请求到响应的传输路径。不过有安全漏洞,会泄漏网站信息,被服务器禁止使用。仅在HTTP 1.1版本可以使用。

CONNECT

要求客户端与另一个远程服务器建立一个特殊的隧道,这时候web服务器充当代理角色。仅在HTTP 1.1版本可以使用。 使用 SSL(Secure Sockets Layer,安全套接层) TLS(Transport Layer Security,传输层安全)协议在网络隧道中进行加密传输。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年8月2日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • GET 与 POST
    • GET
    • HEAD
    • PUT
    • DELETE
    • PATCH
    • OPTIONS
    • TRACE
    • CONNECT
    相关产品与服务
    数据保险箱
    数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档