前言

我们生活中,可能每天都在使用浏览器访问一个又一个的网站,获取各种新鲜有用的信息,但是我们可能并不关心这底层的原理,即使是学爬虫的,可能也只知道GETPOST方法,而并不清楚它们的区别,对于丰富的HTTP方法,知道的更不过是冰山一角。这篇文章,就为大家介绍所有的HTTP方法,让大家无论是开发网站还是爬虫,对于这些方法都不再陌生。

GET方法

概述

这是所有HTTP方法中最常见的一种,我们每天访问网站几乎都是使用的这种方法,它可以用来加载文本、网页、图片、音乐、视频等等,正是它,为我们带来了丰富的页面。

特点

  • GET请求的作用是从指定的资源获取数据
  • GET请求的参数直接在URL中显示,不安全
  • GET请求具有幂等性(何为幂等性我们会在后面解释)
  • GET 请求可被缓存
  • GET 请求可以保存为浏览器历史记录或书签
  • GET 请求有长度限制
  • GET请求的参数提交在URL中形如a=1&b=2这样的格式,其中a与b为键,1与2为值,&是连接符,用于连接多个数据
  • GET请求的参数值只允许ASCII字符(中文会被转码)

响应码

  • 200(OK) - 表示已在响应中发出

  • 204(无内容) - 资源有空表示

  • 301(Moved Permanently) - 资源的URI已被更新

  • 303(See Other) - 其他(如,负载均衡)

  • 304(not modified)- 资源未更改(缓存)

  • 400 (bad request)- 指代坏请求(如,参数错误)

  • 404 (not found)- 资源不存在

  • 406 (not acceptable)- 服务端不支持所需表示

  • 500 (internal server error)- 通用错误响应

  • 503 (Service Unavailable)- 服务端当前无法处理请求

POST方法

概述

这也是比较常用的一个方法,用于提交表单,比如我们平时的账户登录、填写问卷、发送评论等等操作都是通过POST请求提交表单实现的。POST方法为我们带来了多彩的前后端交互。

特点

  • POST请求的作用是向指定资源提交要被处理的数据
  • POST请求的参数不会在URL中显示安全
  • POST请求不具有幂等性
  • POST请求不可被缓存
  • POST请求不可保存为浏览器历史记录或存为书签
  • POST请求不限制数据长度
  • POST请求不限制数据类型,可以传输二进制数据

响应码

  • 200(OK)- 如果现有资源已被更改

  • 201(created)- 如果新资源被创建

  • 202(accepted)- 已接受处理请求但尚未完成(异步处理)
  • 301(Moved Permanently)- 资源的URI被更新
  • 303(See Other)- 其他(如,负载均衡)
  • 400(bad request)- 指代坏请求
  • 404 (not found)- 资源不存在
  • 406 (not acceptable)- 服务端不支持所需表示
  • 409 (conflict)- 通用冲突
  • 412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突)
  • 415 (unsupported media type)- 接受到的表示不受支持
  • 500 (internal server error)- 通用错误响应
  • 503 (Service Unavailable)- 服务当前无法处理请求

PUT方法

概述

这个方法可能不经常出现在大家的视野中,但是很多核心的功能缺不了它,文件上传、文件分享等等功能都需要PUT方法支持。

特点

  • PUT请求的作用是使用请求中的负载创建或者替换目标资源
  • PUT请求具有幂等性
  • PUT请求通过替换的方式更新资源
  • PUT请求创建资源的方式是用客户端管理的实例号创建一个资源
  • PUT请求在资源未被修改的时候,则更新资源
  • PUT请求使用乐观锁(乐观锁是什么,会在最后解释)来对资源加锁

响应码

  • 200 (OK)- 如果已存在资源被更改

  • 201 (created)- 如果新资源被创建

  • 301(Moved Permanently)- 资源的URI已更改

  • 303 (See Other)- 其他(如,负载均衡)

  • 400 (bad request)- 指代坏请求

  • 404 (not found)- 资源不存在

  • 406 (not acceptable)- 服务端不支持所需表示

  • 409 (conflict)- 通用冲突

  • 412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突)

  • 415 (unsupported media type)- 接受到的表示不受支持

  • 500 (internal server error)- 通用错误响应

  • 503 (Service Unavailable)- 服务当前无法处理请求

DELETE方法

概述

从这个方法开始,下面的方法一个比一个冷门了,DELETE方法是用来删除服务器端的资源的,与POST或者PUT方法正好相反。

特点

  • DELETE请求的作用是删除指定资源的数据
  • DELETE请求具有幂等性
  • DELETE请求的其他与POST请求差不多,不可缓存,不可被记录

响应码

  • 200 (OK)- 资源已被删除

  • 301 (Moved Permanently)- 资源的URI已更改

  • 303 (See Other)- 其他,如负载均衡

  • 400 (bad request)- 指代坏请求

  • 404 (not found)- 资源不存在

  • 409 (conflict)- 通用冲突

  • 500 (internal server error)- 通用错误响应

  • 503 (Service Unavailable)- 服务端当前无法处理请求

PATCH方法

PATCH方法 是对 PUT 方法的补充,用来对已知资源进行局部更新 。所以它的特点大致与PUT方法差不多,只是用来对资源进行局部更新,而非整体更新。它需要一个表,用于声明与原有资源的区别。

从这个方法开始,下面的方法都只是简单的介绍一下,不会举出具体的特点和响应码了,因为太过于冷门,网上也很难找到相应的文档。我们将会把重点放在后面的一些不同的内容上。

HEAD方法

HEAD方法非常冷门,现在不怎么用了,也没有什么特点,大致与GET方法一样,只不过返回的响应中没有具体的内容,只获取报头,用于检测服务器端能否正常响应。

TRACE方法

TRACE方法更是冷门,它用于回显服务器收到的请求,主要用来诊断或测试。和上面的HEAD方法与下面的OPTIONS方法一样,不操作资源,仅仅对于服务器进行测试。

OPTIONS方法

OPTIONS方法允许客户端查看服务器的性能,同样用于测试。

CONNECT方法

这个方法在HTTP/1.1中加入的,是预留给能够将连接改为管道方式的代理服务器的。你问我有啥用?我也不知道。

其它方法

  • MOVE方法——请求服务器将指定的页面移至另一个网络地址。
  • COPY方法—— 请求服务器将指定的页面拷贝至另一个网络地址。
  • LINK方法—— 请求服务器建立链接关系。
  • UNLINK方法—— 断开链接关系。
  • WRAPPED—— 允许客户端发送经过封装的请求。
  • Extension-mothed——在不改动协议的前提下,可增加另外的方法。

词语解释

幂等性

幂等性,指的是同样的请求(同一种方法,同样的请求头与请求体,同样的请求资源)被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的,换句话说,具有幂等性的方法,不应该有副作用,也就是应该无状态

乐观锁

为了保证资源是一致的,避免双方同时读写资源,导致资源被覆盖的情况,我们在读写的时候,需要对数据加锁。锁分为悲观锁和乐观锁。

悲观锁,就是在读写之前,先获取资源的锁,同一个资源,同时只能有一个锁,当有程序占用这个锁的时候,其他程序就无法读写这个资源,读写完成之后,这个程序释放资源的锁。之所以叫做悲观锁,是因为它悲观的认为所有程序都会篡改资源,所以把资源紧紧锁住,不允许其它程序读写。

乐观锁,就是可以有多个程序同时读写一个资源,一个程序写完资源之后,需要将一个版本号更新,下一个程序写的时候,发现版本号与自己读取的时候不一致,就重新读取资源最新的版本,重新操作,操作完成后更新版本号。

PUT方法就是检测资源有没有改变来进行更新的,所以属于乐观锁。

写在最后

这篇文章为大家介绍了所有的HTTP方法,还进行了详细的解释,希望能够帮助到大家,让大家在开发爬虫和网站的时候对于不同的HTTP方法不再迷茫。

下一篇文章我们就来讲讲网络架构中的SOAPRESTful,大家可以期待下。