5 分钟快速梳理你的 HTTP 体系
HTTP 定义
HTTP(超文本传输协议) 是 客户端 与 服务端 之间信息交流的 桥梁。
在信息交流之前必须要做的就是 客户端通过连接 TCP/IP 协议 80 端口 ,以便 服务端侦听 HTTP 请求。
HTTP 是 一种通用的 , 无状态的应用层协议,基于标准客户机/服务器模型。
HTTP 特点
采用 “请求/响应”的交互模式, 客户端发送请求,服务端接受请求,处理请求,并将处理结果返回给客户端。服务端不会主动发送请求。
协议设计灵活,拓展性好,HTTP 可以通过扩展新的请求方法实现新的功能。
无状态: 协议对于事务处理没有存储功能,意思就是如果上次响应的结果在该请求中需要用,那么是用不了的。
缺点:每次连接的数量增大。
优点:1.服务器处理速度快,效率高
避免了集群特点间状态同步的开销。
持久连接: 连接可以重复使用,提高了网络连接使用效率。 持久连接 在 HTTP1.1 中已经是默认选项。
支持内容协商
HTTP 请求/响应交互模型
HTTP 常用请求方法
GET 方法
GET 方法 是 客户端 向服务端 获取资源时使用的,资源类型有图片,音频,HTML.....
服务器在处理 GET 请求时,它会根据客户端发送过来的 url 上具体参数进行返回结果处理。
当用 GET 请求获取数据量较大时,可能会出现传输过程中断情况,HTTP 协议提供了断点续传机制,通过 GET 方法获取资源时可以指定获取的起始点。
POST 方法
.POST 方法主要是 客户端向服务端发送数据资源。
HEAD 方法
HEAD 方法 和 GET 方法 POST 方法类似
区别在于:
GET 方法返回的请求 URL 标识资源内容本身
HEAD 方法仅仅返回相关响应头信息,不返回资源内容
HEAD 方法 主要用于 测试资源是否存在,是否被删除或修改
PUT 方法
PUT 方法用请求有效载荷替换目标资源的所有当前表示。
DELETE 方法
DELETE 方法删除指定的资源。
HTTP URI
定义 URL 是 URI 的一个子集。它是 Uniform Resource Locator 的缩写,译为“统一资源定位 符”。
URL 的一般格式为(带方括号[]的为可选项):protocol :// hostname[:port] / path / [;parameters][?query]#fragment
URL 的格式由三部分组成:
①第一部分是协议(或称为服务方式)。
②第二部分是存有该资源的主机 IP 地址(有时也包括端口号)。
③第三部分是主机资源的具体地址,如目录和文件名等。
第一部分和第二部分用“://”符号隔开,
第二部分和第三部分用“/”符号隔开。
第一部分和第二部分是不可缺少的,第三部分有时可以省略。
URL 和 URI 区别
URI:统一资源标志符(Uniform Resource Identifier)URL:统一资源定位符(uniform resource location)说白了,URI 与 URL 都是定位资源位置的,就是表示这个资源的位置信息,就像经纬度一样可以表示你在世界的哪个角落。URI 是一种宽泛的含义更广的定义,而 URL 则是 URI 的一个子集,就是说 URL 是 URI 的一部分。换句话说,每个 URL 都是 URI,但是不是每个 URI 都是 URL 的。
HTTP 发送请求
HTTP 响应请求
HTTP 状态码
100Continue 继续。客户端应继续其请求
101Switching Protocols 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到 HTTP 的新版本协议
200OK 请求成功。一般用于 GET 与 POST 请求
201Created 已创建。成功请求并创建了新的资源
202Accepted 已接受。已经接受请求,但未处理完成
203Non-Authoritative Information 非授权信息。请求成功。但返回的 meta 信息不在原始的服务器,而是一个副本
204No Content 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
205Reset Content 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
206Partial Content 部分内容。服务器成功处理了部分 GET 请求
300Multiple Choices 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
301Moved Permanently 永久移动。请求的资源已被永久的移动到新 URI,返回信息会包括新的 URI,浏览器会自动定向到新 URI。今后任何新的请求都应使用新的 URI 代替
302Found 临时移动。与 301 类似。但资源只是临时被移动。客户端应继续使用原有 URI
303See Other 查看其它地址。与 301 类似。使用 GET 和 POST 请求查看
304Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
305Use Proxy 使用代理。所请求的资源必须通过代理访问
306Unused 已经被废弃的 HTTP 状态码
307Temporary Redirect 临时重定向。与 302 类似。使用 GET 请求重定向
400Bad Request 客户端请求的语法错误,服务器无法理解
401Unauthorized 请求要求用户的身份认证
402Payment Required 保留,将来使用
403Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求
404Not Found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
405Method Not Allowed 客户端请求中的方法被禁止
406Not Acceptable 服务器无法根据客户端请求的内容特性完成请求
407Proxy Authentication Required 请求要求代理的身份认证,与 401 类似,但请求者应当使用代理进行授权
408Request Time-out 服务器等待客户端发送的请求时间过长,超时
409Conflict 服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突
410Gone 客户端请求的资源已经不存在。410 不同于 404,如果资源以前有现在被永久删除了可使用 410 代码,网站设计人员可通过 301 代码指定资源的新位置
411Length Required 服务器无法处理客户端发送的不带 Content-Length 的请求信息
412Precondition Failed 客户端请求信息的先决条件错误
413Request Entity Too Large 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个 Retry-After 的响应信息
414Request-URI Too Large 请求的 URI 过长(URI 通常为网址),服务器无法处理
415Unsupported Media Type 服务器无法处理请求附带的媒体格式
416Requested range not satisfiable 客户端请求的范围无效
417Expectation Failed 服务器无法满足 Expect 的请求头信息
422Conflict 表明由于所提供的的作为请求部分的数据非法,创建或修改操作不能被完成
429TooManyRequests 表明超出了客户端访问频率的限制或者服务端接收到多于它能处理的请求。建议客户端读取相应的 Retry-After 首部,然后等待该首部指出的时间后重试。
500Internal Server Error 服务器内部错误,无法完成请求
501Not Implemented 服务器不支持请求的功能,无法完成请求
502Bad Gateway 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的 Retry-After 头信息中
504Gateway Time-out 充当网关或代理的服务器,未及时从远端服务器获取请求
505HTTP Version not supported 服务器不支持请求的 HTTP 协议的版本
HTTP 状态码分类
1** ------------------------------------> 信息,服务器收到请求,需要请求者继续执行
2** ------------------------------------> 成功,操作被成功接收并处理
3** ------------------------------------> 重定向,需要进一步的操作以完成请求
4** ------------------------------------> 客户端错误,请求包含语法错误或无法完成请求
5** ------------------------------------> 服务器错误,服务器在处理请求的过程中发生了错误
结语
❤️关注+点赞+收藏+评论+转发❤️,原创不易,鼓励笔者创作更好的文章
版权声明: 本文为 InfoQ 作者【程序员海军】的原创文章。
原文链接:【http://xie.infoq.cn/article/cf565dabf8cfa5bfde9c064d0】。文章转载请联系作者。
评论