学习提升之HTTP状态码详解

最近太忙了,不好意思,木有更新博客,所以今天抽空把这些天积累的知识都写下来与大家分享。这篇文章是我在学习网络部分的一些学习笔记,在这里分享给大家。之前看到状态码都是搜索下就完事,常用的也都记得,毕竟搭建博客等过程深入学习过这些。下面进入正题,在讲解状态码之前先了解下其他相关的知识,涉及的内容可能比较多,大家耐心看看,学习的过程就是如此,一个知识点发散思维。

先记录下iOS中发送HTTP请求的方案:

苹果原生(自带)

1.NSURLConnection:用法简单,最古老最经典最直接的一种方案【坑比较多】

2.NSURLSession:功能比NSURLConnection更加强大,苹果目前比较推荐使用这种技术【2013推出,iOS7开始出的技术】

3.CFNetwork:NSURL*的底层,纯C语言
第三方框架

1.ASIHttpRequest:外号“HTTP终结者”,功能极其强大,可惜早已停止更新

2.AFNetworking:简单易用,提供了基本够用的常用功能,维护和使用者多

3.MKNetworkKit:简单易用,产自三哥的故乡印度,维护和使用者少

了解

1.URL

1.1 什么是URL?
  1. URL的全称是Uniform Resource Locator(统一资源定位符)
  2. 通过1个URL,能找到互联网上唯一的1个资源
  3. URL就是资源的地址、位置,互联网上的每个资源都有一个唯一的URL
  4. URL的基本格式 = 协议://主机地址/路径

2.URL中常见的协议

2.1 HTTP

超文本传输协议,访问的是远程的网络资源,格式是http://

http协议是在网络开发中最常用的协议

2.2 file

访问的是本地计算机上的资源,格式是file://(不用加主机地址)

2.3 mailto

访问的是电子邮件地址,格式是mailto:

2.4 FTP

访问的是共享主机的文件资源,格式是ftp://

 

3.TCP/IP协议簇

  • 为了能够理解HTTP,我们需要先了解TCP/IP协议簇。通常意义上,我们使用的网络是在TCP/IP协议簇的基础上运作的,而HTTP属于它内部的一个子集。
  • 计算机与网络设备需要通信,双方就必须要基于相同的方法,比如具体应该如何探测通信目标,由哪一方面发起通信,使用什么语言进行沟通等等,所有的这一切都需要规则。而我们则把这些规则称之为协议(potocol)。
  • 在协议中规定了很多的各式各样的内容,如选址方法,双方建立通信的顺序等等。这些协议如(ICMP DNS TCP FTP HTTP SNMP PPPoE IP FDDI)等等,通常我们把TCP/IP认为是在IP协议的通信过程中,使用到的协议簇的统称。
  • TCP 协议簇里面最重要的一点就是分层设计:按照层次分别分为应用层、传输层、网络层和数据链路层。其中,与HTTP关系密切的协议有TCP、IP、DNS等。

4.TCP/IP参考模型

学习提升之HTTP状态码详解

TCP/IP参考模型

5.HTTP协议简介

5.1 不管是移动客户端还是PC端,访问远程的网络资源经常使用HTTP协议
5.2 HTTP协议的作用
  • HTTP的全称是Hypertext Transfer Protocol,超文本传输协议
  • 规定客户端和服务器之间的数据传输格式
  • 让客户端和服务器能有效地进行数据沟通

6.HTTP协议的特点(为什么选择HTTP)

6.1 简单快速

因为HTTP协议简单,所以HTTP服务器的程序规模小,因而通信速度很快。

6.2 灵活

HTTP允许传输各种各样的数据。

6.3 HTTP 0.9和1.0使用非持续连接

限制每次连接只处理一个请求,服务器对客户端的请求做出响应后,马上断开连接,这种方式可以节省传输时间。

正题

了解了一些基本知识后,下面开始聊聊HTTP协议里面的状态码:

1 何谓HTTP状态码

HTTP状态码的作用是:Web服务器用来告诉客户端,发生了什么事。

状态码位于HTTP Response 的第一行中,会返回一个”三位数字的状态码“和一个“状态消息”。 ”三位数字的状态码“便于程序进行处理, “状态消息”更便于人理解。

2 状态码分类

HTTP状态码被分为五大类, 目前我们使用的HTTP协议版本是1.1, 支持以下的状态码。随着协议的发展,HTTP规范中会定义更多的状态码。

已定义范围分类
1XX100-101信息提示
2XX200-206成功
3XX300-305重定向
4XX400-415客户端错误
5XX500-505服务器错误

 

3 常见的状态码

一般常见的状态码已经够使用的,我之前弄博客的时候几乎每天都要见到,不是301就是501,幸运的就是200完美!

学习提升之HTTP状态码详解

3.1 1XX 信息性状态码

信息性状态码,表示接受的请求正在处理。

状态码 状态消息 含义
100Continue(继续)收到了请求的起始部分,客户端应该继续请求
101Switching Protocols(切换协议)服务器正根据客户端的指示将协议切换成Update Header列出的协议
3.2 2XX 成功状态码

2xx 响应结果表示从客户端发来的请求在服务器端被正常处理了。

状态码状态消息含义
200OK服务器成功处理了请求(这个是我们见到最多的)
201Created(已创建)对于那些要服务器创建对象的请求来说,资源已创建完毕。
202Accepted(已接受)请求已接受, 但服务器尚未处理
203Non-Authoritative Information(非权威信息)服务器已将事务成功处理,只是实体Header包含的信息不是来自原始服务器,而是来自资源的副本。
204No Content(没有内容)Response中包含一些Header和一个状态行, 但不包括实体的主题内容(没有response body)
205Reset Content(重置内容) 另一个主要用于浏览器的代码。意思是浏览器应该重置当前页面上所有的HTML表单。
206Partial Content(部分内容) 部分请求成功
3.3 3XX 重定向状态码

3XX 响应结果表明浏览器需要执行某些特殊的处理以完成请求。重定向状态码用来告诉浏览器客户端,它们访问的资源已被移动, Web服务器发送一个重定向状态码和一个可选的Location Header, 告诉客户端新的资源地址在哪。之前改域名做SEO优化的时候经常会碰到301重定向。

状态码状态消息含义
300Multiple Choices(多项选择) 客户端请求了实际指向多个资源的URL。这个代码是和一个选项列表一起返回的,然后用户就可以选择他希望的选项了
301Moved Permanently(永久移除)请求的URL已移走。Response中应该包含一个Location URL, 说明资源现在所处的位置
302Found(已找到)与状态码301类似。但这里的移除是临时的。 客户端会使用Location中给出的URL,重新发送新的HTTP request
303 See Other(参见其他)类似302
304Not Modified(未修改)客户的缓存资源是最新的, 要客户端使用缓存
305 Use Proxy(使用代理)必须通过代理访问资源, 代理的地址在Response 的Location中
306 未使用 这个状态码当前没使用
307Temporary Redirect(临时重定向类似302

 

3.4 4XX客户端错误状态码

有时客户端会发送一些服务器无法处理的东西,比如格式错误的Request, 或者最常见的是, 请求一个不存在的URL。

状态码状态消息含义
400Bad Request(坏请求)告诉客户端,它发送了一个错误的请求。
401Unauthorized(未授权)需要客户端对自己认证
402Payment Required(要求付款)这个状态还没被使用, 保留给将来用
403Forbidden(禁止)请求被服务器拒绝了
404Not Found(未找到)未找到资源
405Method Not Allowed(不允许使用的方法)不支持该Request的方法。
406Not Acceptable(无法接受)
407Proxy Authentication Required(要求进行代理认证)与状态码401类似, 用于需要进行认证的代理服务器
408Request Timeout(请求超时) 如果客户端完成请求时花费的时间太长, 服务器可以回送这个状态码并关闭连接
409Conflict(冲突)发出的请求在资源上造成了一些冲突
410Gone(消失了)服务器曾经有这个资源,现在没有了, 与状态码404类似
411Length Required(要求长度指示)服务器要求在Request中包含Content-Length。
412Precondition Failed(先决条件失败)
413Request Entity Too Large(请求实体太大)客户端发送的实体主体部分比服务器能够或者希望处理的要大
414Request URI Too Long(请求URI太长)客户端发送的请求所携带的URL超过了服务器能够或者希望处理的长度
415Unsupported Media Type(不支持的媒体类型)服务器无法理解或不支持客户端所发送的实体的内容类型
416Requested Range Not Satisfiable(所请求的范围未得到满足)
417Expectation Failed(无法满足期望)
3.5 5XX服务器错误状态码

有时候客户端发送了一条有效Request, Web服务器自身却出错了。 可能是Web服务器运行出错了, 或者网站都挂了。  5XX就是用来描述服务器错误的。

状态码状态消息含义
500Internal Server Error(内部服务器错误)服务器遇到一个错误,使其无法为请求提供服务
501Not Implemented(未实现)客户端发起的请求超出服务器的能力范围(比如,使用了服务器不支持的请求方法)时,使用此状态码。
502Bad Gateway(网关故障)代理使用的服务器遇到了上游的无效响应
503Service Unavailable(未提供此服务)服务器目前无法为请求提供服务,但过一段时间就可以恢复服务
504Gateway Timeout(网关超时)与状态吗408类似, 但是响应来自网关或代理,此网关或代理在等待另一台服务器的响应时出现了超时
505HTTP Version Not Supported(不支持的HTTP版本)服务器收到的请求使用了它不支持的HTTP协议版本。 有些服务器不支持HTTP早期的HTTP协议版本,也不支持太高的协议版本

为不影响页面排版,下一页是表格里的状态码的一些详细说明,供强迫症患者食用

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: