HTTP所有方法详解
前言
我们生活中,可能每天都在使用浏览器访问一个又一个的网站,获取各种新鲜有用的信息,但是我们可能并不关心这底层的原理,即使是学爬虫的,可能也只知道GET和POST方法,而并不清楚它们的区别,对于丰富的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方法不再迷茫。
下一篇文章我们就来讲讲网络架构中的SOAP和RESTful,大家可以期待下。