zoukankan      html  css  js  c++  java
  • 8 HTTP 的请求方法

    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 是“替换或更新数据”,多次更新一个资源,资源还是保持第一次更新的状态,所以是幂等的。
  • 相关阅读:
    验证foreach 能否操做更改原表
    asp.net post/get 公共方法
    C# json日期转换
    学数学
    2742: [HEOI2012]Akai的数学作业
    BZOJ2208
    树状数组求逆序对
    网络流复习计划
    SG函数学(hua)习(shui)记录
    SPLAY板子
  • 原文地址:https://www.cnblogs.com/hqq2019-10/p/14742978.html
Copyright © 2011-2022 走看看