HTTP报文是由 header+body 组成,请求头里有请求方法和请求目标,响应头里有状态码和原因短语,本节学习的是请求头里的请求方法。

标准请求方法

  1. 请求方法的实际含义:客户端发送一个“动作指令”,要求服务器对URI定位的资源执行这个动作。
  2. 目前 HTTP/1.1 规定了八种方法,单词必须是大写形式。

  3. 请求方法只是客户端的指令,客户端没有决定权,服务端掌控所有资源,才有绝对的决策权力。

    举例:客户端发起一个 GET 请求,想获取 “/orders” 这个文件,但是文件级别较高,那么服务器可以有如下几种响应方式:

    1. 假装文件不存在,直接返回 404 Not found 报文;
    2. 稍微友好一点,明确告诉你有这个文件,但是不允许访问,返回一个 403 Forbidden;
    3. 再宽松一些,返回 405 Method Not Allowed,然后用 Allow 头告诉你可以用 HEAD 方法获取文件的元信息。

GET/HEAD

GET 方法

  1. 从 0.9 版出现一直保留至今。
  2. 含义是:请求从服务器获取资源,这个资源即可以是静态的文本,页面,图片,视频,也可以是由PHP、Java 动态生成的页面或者其他格式的数据。
  3. GET 方法可以搭配其他字段实现对资源更精细的操作:
    1. URI 后使用 # ,在获取页面后直接定位到某个标签所在的位置
    2. 使用 If-Modified-Since 字段,编程有条件的请求,仅当资源被修改时才会执行获取动作
    3. 使用 Range 字段就是“范围请求”,只获取资源的一部分数据

HEAD方法

  1. 请求从服务器获取资源,但是只传回响应头,即资源的“元信息”。
  2. HEAD 方法可以看作GET方法的一个简化版或轻量版,用在并不需要资源的场合,避免传输body数据的浪费。

POST/PUT

POST/PUT向 URI 指定的资源提交数据,数据就放在报文的body里

POST

  1. 使用频率高,应用场景多,只要向服务器发送数据,大多数都是POST。
  2. POST表示 “新建”“create”含义

PUT

  1. 使用频率低,和 POST 语义类似。
  2. PUT 表示 “修改”“update”含义。

非常用方法

应用的不是很多

DELETE 方法

  1. 指示服务器删除资源,因为这个动作危险性太大,所以通常服务器不会执行真正的删除操作,而是对资源做一个删除标记。
  2. 更多的时候服务器就直接不处理 DELETE 请求。

CONNECT 方法

  1. 是一个比较特殊的方法,要求服务器为客户端和另一台远程服务器建立一条特殊的连接隧道,这时 Web 服务器在中间充当了代理的角色。

OPTIONS 方法

  1. 要求服务器列出可对资源实行的操作方法,在响应头的 Allow 字段里返回。
  2. 它的功能很有限,用处也不大,有的服务器(例如 Nginx)干脆就没有实现对它的支持。

TRACE 方法

  1. 多用于对 HTTP 链路的测试或诊断,可以显示出请求 - 响应的传输路径。
  2. 它的本意是好的,但存在漏洞,会泄漏网站的信息,所以 Web 服务器通常也是禁止使用。

拓展方法

比如用 LOCK 方法锁定资源暂时不允许修改,或者使用 PATCH 方法给资源打个小补丁,部分更新数据。

但因为这些方法是非标准的,所以需要为客户端和服务器编写额外的代码才能添加支持。

安全和幂等

安全

在HTTP 协议里,安全是指 请求方法不会破坏服务器上的资源,即不会对服务器上的资源造成实质的修改。

GET、HEAD 方法是“安全”的,因为它们是“只读”操作,只要服务器不故意曲解请求方法的处理方式,无论GET和HEAD操作多少次,服务器上的数据都是“安全”的。

POST、PUT、DELETE 方法会修改服务器上的资源,增加或删除数据,所以是“不安全”的。

幂等

幂等是数学的用语,被借用到 HTTP 协议里,意思是多次执行相同的操作,结果也是相同的。

  1. GET、HEAD 是幂等的。
  2. DELET 可以多次删除同一个资源,效果都是“资源不存在”,所以也是幂等的。
  3. POST 是“新增或提交数据”,多次提交数据会创建多个资源,所以不是幂等的。
  4. PUT 是“替换或更新数据”,多次更新一个资源,资源还是保持第一次更新的状态,所以是幂等的。

8 HTTP 的请求方法的更多相关文章

  1. HTTP请求方法详解

    HTTP请求方法详解 请求方法:指定了客户端想对指定的资源/服务器作何种操作 下面我们介绍HTTP/1.1中可用的请求方法: [GET:获取资源]     GET方法用来请求已被URI识别的资源.指定 ...

  2. HTTP请求方法

    HTTP请求方法 根据HTTP标准,HTTP请求可以使用多种请求方法. HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法. HTTP1.1新增了五种请求方法:OPTIONS, ...

  3. iOS开发 GET、POST请求方法(NSURLSession篇)

    NSURLConnection,在iOS9被宣布弃用,本文不使用NSURLConnection进行网络编程,有兴趣的童鞋可以参考: [iOS开发 GET.POST请求方法(NSURLConnectio ...

  4. iOS开发 GET、POST请求方法(NSURLConnection篇)

    Web Service使用的主要协议是HTTP协议,即超文本传输协议. HTTP/1.1协议共定义了8种请求方法(OPTIONS.HEAD.GET.POST.PUT.DELETE.TRACE.CONN ...

  5. HTTP协议中POST、GET、HEAD、PUT等请求方法以及一些常见错误

    (来源:http://www.tuicool.com/articles/Ermmmyn) HTTP请求方法: 常用方法: Get\Post\Head (1)Get方法. 取回请求URL标志的任何信息, ...

  6. HTTP请求响应报文&&相关状态码&&GET_POST请求方法 总结

    HTTP请求报文: 一个HTTP请求报文由四个部分组成:请求行.请求头部.空行.请求数据 1.请求行   请求行由请求方法字段.URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔.比如 GE ...

  7. HTTP 笔记与总结(2 )HTTP 协议的(请求行的)请求方法 及 (响应行的)状态码

    (请求行的)请求方法 包括: GET,POST,HEAD,PUT,TRACE,DELETE,OPTIONS 注意:这些请求方法虽然是 HTTP 协议规定的,但是 Web Server 未必允许或支持这 ...

  8. httpclient请求方法

    /** * httpclient请求方法 * @param url 请求地址 * @param paramMap 请求参数 * @param ent 编码格式 gbk.utf-8 * @return ...

  9. HTTP请求方法对照表

    根据HTTP标准,HTTP请求可以使用多种请求方法. HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法. HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELE ...

  10. http请求方法与响应状态码

    请求方法:GET POST HEAD PUT DELETE OPTIONS常用的方法是:GET POST GET提交可以在浏览器地址栏看到提交的信息 POST提交方式不显示在地址栏,相对于GET方式较 ...

随机推荐

  1. 浅谈 Linux 下 vim 的使用

    Vim 是从 vi 发展出来的一个文本编辑器,其代码补全.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用. Vi 是老式的字处理器,功能虽然已经很齐全了,但还有可以进步的地方.Vim 可 ...

  2. Go 并发编程 - 并发安全(二)

    什么是并发安全 并发情况下,多个线程或协程会同时操作同一个资源,例如变量.数据结构.文件等.如果不保证并发安全,就可能导致数据竞争.脏读.脏写.死锁.活锁.饥饿等一系列并发问题,产生重大的安全隐患,比 ...

  3. api接口对接如何实现,php如何对接api

    API接口对接是现代软件开发中不可或缺的一部分,它允许不同的应用程序之间进行数据交换和服务调用.在PHP中,可以使用多种方式实现API接口的对接,包括基于HTTP协议的传统方法以及现代的API客户端库 ...

  4. Poor God Water(ACM-ICPC 2018 焦作赛区网络预赛 矩阵快速幂)

    题目描述 God Water likes to eat meat, fish and chocolate very much, but unfortunately, the doctor tells ...

  5. 【Azure Batch】在批处理的Task中如何让它执行多个CMD指令呢

    问题描述 根据Azure Batch的入门文档(使用 Azure 门户创建 Batch 帐户并运行作业 : https://docs.azure.cn/zh-cn/batch/quick-create ...

  6. Azure Data Factory(八)数据集验证之服务主体(Service Principal)

    一,引言 如下图所示,今天我们接着上一篇内容,继续讲解 Azure Data Factory 中的数据集连接服务的认证方式:Service Principal 关于 Service Principal ...

  7. vue指令 v-if

    1.字符'0'也显示为真 <div v-if="zeroStr">明月几时有,把酒问青天.</div> data() { zeroStr: '0' } 运行 ...

  8. CF1526C1

    题目简化和分析: 给您一个数组,在其中选择若干个数使得: 任意前缀和 \(\ge 0\) 数量尽可能的大 我们可以使用贪心策略,策略如下: 如果当前数为非负,必喝. 而毒药尽可能的多喝,如果喝没了,就 ...

  9. 从零用VitePress搭建博客教程(5) - 如何自定义页面模板、给页面添加独有的className和使页面标题变成侧边目录?

    接上一节:从零用VitePress搭建博客教程(4) – 如何自定义首页布局和主题样式修改? 上一节其实我们也简单说了自定义页面模板,这一节更加详细一点说明,开始之前我们要知道在vitePress中, ...

  10. ACL 与NAT

    ACL 概述 acl是由一系列permit或deny语句组成.有序规则的列表. ACL是一个匹配工具,能够对报文进行匹配和区分. 应用 匹配流量 在traffic-filter中备调用 在NAT中被调 ...