2016-11-1410:23:53 发表评论 315℃热度
目录
最近太忙了,不好意思,没有更新博客,所以今天抽空把这些天积累的知识都写下来与大家分享。这篇文章是我在学习网络部分的一些学习笔记,在这里分享给大家。之前看到状态码都是搜索下就完事,常用的也都记得,毕竟搭建博客等过程深入学习过这些。下面进入正题,在讲解状态码之前先了解下其他相关的知识,涉及的内容可能比较多,大家耐心看看,学习的过程就是如此,一个知识点发散思维。
先记录下iOS中发送HTTP请求的方案:
苹果原生(自带) 1.NSURLConnection:用法简单,最古老最经典最直接的一种方案【坑比较多】 2.NSURLSession:功能比NSURLConnection更加强大,苹果目前比较推荐使用这种技术【2013推出,iOS7开始出的技术】 3.CFNetwork:NSURL*的底层,纯C语言 第三方框架 1.ASIHttpRequest:外号“HTTP终结者”,功能极其强大,可惜早已停止更新 2.AFNetworking:简单易用,提供了基本够用的常用功能,维护和使用者多 3.MKNetworkKit:简单易用,产自三哥的故乡印度,维护和使用者少
超文本传输协议,访问的是远程的网络资源,格式是http://
http协议是在网络开发中最常用的协议
访问的是本地计算机上的资源,格式是file://(不用加主机地址)
访问的是电子邮件地址,格式是mailto:
访问的是共享主机的文件资源,格式是ftp://
因为HTTP协议简单,所以HTTP服务器的程序规模小,因而通信速度很快。
HTTP允许传输各种各样的数据。
限制每次连接只处理一个请求,服务器对客户端的请求做出响应后,马上断开连接,这种方式可以节省传输时间。
了解了一些基本知识后,下面开始聊聊HTTP协议里面的状态码:
HTTP状态码的作用是:Web服务器用来告诉客户端,发生了什么事。
状态码位于HTTP Response 的第一行中,会返回一个”三位数字的状态码“和一个“状态消息”。 ”三位数字的状态码“便于程序进行处理, “状态消息”更便于人理解。
HTTP状态码被分为五大类, 目前我们使用的HTTP协议版本是1.1, 支持以下的状态码。随着协议的发展,HTTP规范中会定义更多的状态码。
已定义范围 | 分类 | |
---|---|---|
1XX | 100-101 | 信息提示 |
2XX | 200-206 | 成功 |
3XX | 300-305 | 重定向 |
4XX | 400-415 | 客户端错误 |
5XX | 500-505 | 服务器错误 |
一般常见的状态码已经够使用的,我之前弄博客的时候几乎每天都要见到,不是301就是501,幸运的就是200完美!
信息性状态码,表示接受的请求正在处理。
状态码 | 状态消息 | 含义 | |
---|---|---|---|
100 | Continue(继续) | 收到了请求的起始部分,客户端应该继续请求 | |
101 | Switching Protocols(切换协议) | 服务器正根据客户端的指示将协议切换成Update Header列出的协议 |
2xx 响应结果表示从客户端发来的请求在服务器端被正常处理了。
状态码 | 状态消息 | 含义 | |
---|---|---|---|
200 | OK | 服务器成功处理了请求(这个是我们见到最多的) | |
201 | Created(已创建) | 对于那些要服务器创建对象的请求来说,资源已创建完毕。 | |
202 | Accepted(已接受) | 请求已接受, 但服务器尚未处理 | |
203 | Non-Authoritative Information(非权威信息) | 服务器已将事务成功处理,只是实体Header包含的信息不是来自原始服务器,而是来自资源的副本。 | |
204 | No Content(没有内容) | Response中包含一些Header和一个状态行, 但不包括实体的主题内容(没有response body) | |
205 | Reset Content(重置内容) | 另一个主要用于浏览器的代码。意思是浏览器应该重置当前页面上所有的HTML表单。 | |
206 | Partial Content(部分内容) | 部分请求成功 |
3XX 响应结果表明浏览器需要执行某些特殊的处理以完成请求。重定向状态码用来告诉浏览器客户端,它们访问的资源已被移动, Web服务器发送一个重定向状态码和一个可选的Location Header, 告诉客户端新的资源地址在哪。之前改域名做SEO优化的时候经常会碰到301重定向。
状态码 | 状态消息 | 含义 | |
---|---|---|---|
300 | Multiple Choices(多项选择) | 客户端请求了实际指向多个资源的URL。这个代码是和一个选项列表一起返回的,然后用户就可以选择他希望的选项了 | |
301 | Moved Permanently(永久移除) | 请求的URL已移走。Response中应该包含一个Location URL, 说明资源现在所处的位置 | |
302 | Found(已找到) | 与状态码301类似。但这里的移除是临时的。 客户端会使用Location中给出的URL,重新发送新的HTTP request | |
303 | See Other(参见其他) | 类似302 | |
304 | Not Modified(未修改) | 客户的缓存资源是最新的, 要客户端使用缓存 | |
305 | Use Proxy(使用代理) | 必须通过代理访问资源, 代理的地址在Response 的Location中 | |
306 | 未使用 | 这个状态码当前没使用 | |
307 | Temporary Redirect(临时重定向 | 类似302 |
有时客户端会发送一些服务器无法处理的东西,比如格式错误的Request, 或者最常见的是, 请求一个不存在的URL。
状态码 | 状态消息 | 含义 | |
---|---|---|---|
400 | Bad Request(坏请求) | 告诉客户端,它发送了一个错误的请求。 | |
401 | Unauthorized(未授权) | 需要客户端对自己认证 | |
402 | Payment Required(要求付款) | 这个状态还没被使用, 保留给将来用 | |
403 | Forbidden(禁止) | 请求被服务器拒绝了 | |
404 | Not Found(未找到) | 未找到资源 | |
405 | Method Not Allowed(不允许使用的方法) | 不支持该Request的方法。 | |
406 | Not Acceptable(无法接受) | ||
407 | Proxy Authentication Required(要求进行代理认证) | 与状态码401类似, 用于需要进行认证的代理服务器 | |
408 | Request Timeout(请求超时) | 如果客户端完成请求时花费的时间太长, 服务器可以回送这个状态码并关闭连接 | |
409 | Conflict(冲突) | 发出的请求在资源上造成了一些冲突 | |
410 | Gone(消失了) | 服务器曾经有这个资源,现在没有了, 与状态码404类似 | |
411 | Length Required(要求长度指示) | 服务器要求在Request中包含Content-Length。 | |
412 | Precondition Failed(先决条件失败) | ||
413 | Request Entity Too Large(请求实体太大) | 客户端发送的实体主体部分比服务器能够或者希望处理的要大 | |
414 | Request URI Too Long(请求URI太长) | 客户端发送的请求所携带的URL超过了服务器能够或者希望处理的长度 | |
415 | Unsupported Media Type(不支持的媒体类型) | 服务器无法理解或不支持客户端所发送的实体的内容类型 | |
416 | Requested Range Not Satisfiable(所请求的范围未得到满足) | ||
417 | Expectation Failed(无法满足期望) |
有时候客户端发送了一条有效Request, Web服务器自身却出错了。 可能是Web服务器运行出错了, 或者网站都挂了。 5XX就是用来描述服务器错误的。
状态码 | 状态消息 | 含义 | |
---|---|---|---|
500 | Internal Server Error(内部服务器错误) | 服务器遇到一个错误,使其无法为请求提供服务 | |
501 | Not Implemented(未实现) | 客户端发起的请求超出服务器的能力范围(比如,使用了服务器不支持的请求方法)时,使用此状态码。 | |
502 | Bad Gateway(网关故障) | 代理使用的服务器遇到了上游的无效响应 | |
503 | Service Unavailable(未提供此服务) | 服务器目前无法为请求提供服务,但过一段时间就可以恢复服务 | |
504 | Gateway Timeout(网关超时) | 与状态吗408类似, 但是响应来自网关或代理,此网关或代理在等待另一台服务器的响应时出现了超时 | |
505 | HTTP Version Not Supported(不支持的HTTP版本) | 服务器收到的请求使用了它不支持的HTTP协议版本。 有些服务器不支持HTTP早期的HTTP协议版本,也不支持太高的协议版本 |
下面是表格里的状态码的一些详细说明,供强迫症患者食用
该状态码表示服务器接收到的请求已经处理完毕,但是服务器不需要返回响应体. 比如,客户端是浏览器的话,发出的请求返回204响应,那么浏览器显示的页面不会发生更新。
该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求。
客户端发起的请求,必须在请求头中包含Range字段。服务端响应报文中,必须包含由Content-Range
指定范围的实体内容(entity-bodies )
永久性重定向。该状态码表示请求的资源已经被分配了新的URI,并且以后使用资源现在所指的URI。并且根据请求的方法有不同的处理方式:
HEAD:必须在响应头部Location
字段中指明新的永久性的URI。
GET:除了有Location
字段以外,还需要在响应体中附上永久性URI的超链接文本。
POST:客户端在发送POST请求,受到301响应之后,不应该自动跳转URI,应当让用户确认跳转。
临时性重定向。该状态码表示请求的资源已被分配了新的URI,希望用户本次能使用新的URI访问。 和301 Moved Permanently 状态码相似,但302状态码代表的资源不是被永久移动,只是临时性质的。 如果,用户把一个URI收藏为书签,302响应是不会像301那样去更新书签。
该状态码表示由于请求对应的资源存在另一个URI,应使用GET方法定向获取请求的资源。303与302不同之处在于,302是不会改变请求的方法,如果请求方法是POST的话,重定向的请求也应该是POST。而对于303,使用POST请求的话,重定向的请求应该是GET请求。
该状态码表示客户端发送附带条件请求时,服务器端允许请求访问资源,但未满足条件的情况。304状态码返回时,不包含任何响应的主题部分。
临时重定向。该状态码与302和303的有着类似的含义,不同之处在于,307状态码并不会指定客户端要用什么样的请求方法请求重定向地址。(302指定使用原有请求方法,303指定使用GET方法)
表示该请求报文中存在语法错误,导致服务器无法理解该请求。客户端需要修改请求的内容后再次发送请求。
该状态码表示发送的请求需要有通过HTTP认证(Basic认证,Digest认证)的认证信息。返回含有401的响应,必须在头部包含WWW-Authenticate以指明服务器需要哪种方式的认证。
该状态码表明对请求资源的访问被服务器拒绝了。服务器没有必要给出拒绝的详细理由,但如果想做说明的话,可以在实体的主体部分原因进行描述,这样就能让用户看到了。 未获得文件系统的访问权限,访问权限出现某些问题,从未授权的发送源IP地址试图访问等情况都可能发生403响应。
该状态码表明服务器上无法找到指定的资源。通常被用于服务器不想透露拒绝请求的原因,或者没有其他的响应可提供。
405是指Web服务器不支持Request中的方法。
服务器要求在Request中包含Content-Length。当浏览器使用Post方法,发送数据给Web服务器时, 必须要有Content-Length。这样Web服务器才知道你要发送多少数据,否则Web服务器会返回411状态码
作用:客户端发送的实体主体部分比服务器能够或者希望处理的要大。 一般情况下我们看不到这个状态码。 因为浏览器不会发送太大的数据给网站,但是机器人可能会。
就是说Request URI太长, 一般浏览器本身对URI的长度就会有限制,所以不会发送URI很长的Request. 我们平常是根本看不到414错误的。 但是机器人可以发送很长URI。
该状态码表明服务器端在执行请求时发生了错误。也有可能是Web应用存在的BUG或某些临时的故障。弄博客的时候经常见,哈哈哈。
客户端发起的请求超出服务器的能力范围(比如,使用了服务器不支持的请求方法)时,使用此状态码)。 一般的Web服务器只支持GET和POST方法。
代理使用的服务器遇到了上游的无效响应。当我们访问www.youtube.com,就可以看到熟悉的502了。
该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。如果事先得知解除以上需要的时间,最好写入Retry-After
首部字段再返回给客户端。
表示Web服务器不支持此HTTP协议的版本。
参考文章: HTTP协议之状态码详解