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. 获取API接口返回的商品详情数据后该如何使用

    获取API接口返回的商品详情数据后,我们可以使用以下方式将其处理和利用: 数据展示:我们可以将API接口返回的商品详情数据以列表.表格.图形等形式展示给用户,以便他们更好地了解商品的基本信息.特征.评 ...

  2. 2023-09-01:用go语言编写。给出两个长度均为n的数组, A = { a1, a2, ... ,an }, B = { b1, b2, ... ,bn }。 你需要求出其有多少个区间[L,R]

    2023-09-01:用go语言编写.给出两个长度均为n的数组, A = { a1, a2, ... ,an }, B = { b1, b2, ... ,bn }. 你需要求出其有多少个区间[L,R] ...

  3. API接口开发管理平台--多领域企业数字化管理解决方案

    随着数字化时代的到来,企业需要进行数字化转型才能更好地适应市场需求和用户需求.而API接口则是数字化转型中的重要组成部分,可以帮助企业更好地管理信息,提高效率.本文将介绍挖数据解决方案--API接口开 ...

  4. RocketMQ 系列(三) 集成 SpringBoot

    RocketMQ 系列(三) 集成 SpringBoot 前两篇文章介绍了 RocketMQ 基本概念与搭建,现在以它与 SpringBoot 的结合来介绍其基本的用法. RocketMQ系列(一) ...

  5. 机器学习(6)K近邻算法

    k-近邻,通过离你最近的来判断你的类别 例子: 定义:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近的样本中大多数属于某一类别),则该样本属于这个类别 K近邻需要做标准化处理 例如: imp ...

  6. python入门基础(14)--类的属性、成员方法、静态方法以及继承、重载

    上一篇提到过类的属性,但没有详细介绍,本篇详细介绍一下类的属性 一 .类的属性 方法是用来操作数据的,而属性则是建模必不的内容,而且操作的数据,大多数是属性,比如游戏中的某个boss类,它的生命值就是 ...

  7. getchar()和putchar()

    #include <stdio.h> #include <stdlib.h> int main() { char ch; /*.putchar() a. putchar函数的格 ...

  8. C++在HotSpot VM中一种巧妙的内存管理方式

    在HotSpot VM中定义了一个Relocation类及相关的子类,可以通过这些类操作不同的重定位数据,如在CodeCache中读写这些数据.这些类需要的内存很小,但是不同的类需要的内存大小又不一样 ...

  9. 基于Java Swing和BouncyCastle的证书生成工具

    "Almost no one will remember what he had just not interested." - Nobody "几乎没有人会记得他所丝毫 ...

  10. CF451B

    题目简化和分析: 这题就是判断将一段翻转后是否能变为升序的数组. 我的方法是保存原数组每一个数出现的位置(相同任意一个),让后另外用一个数组存储排好序后的原数组,逐一进行比较. 若同,则跳到下一个元素 ...