你的心可以属于耶稣,但你的屁股永远属于陆战队! 收藏本站
登陆 / 注册 搜索

阅读: 7.3K   回复: 2

[# 网络安全] WEB安全 第五课 HTTP协议 之三 服务器响应状态码

小执念 古黑浩劫论坛大牛 2016-5-29 14:04 |显示全部楼层

可遇不可求的事:故乡的云,上古的玉,随手的诗,十九岁的你。

管理员
        RFC2616的第10部分列出了将近50种状态码,服务器在返回响应时可以选择其中一种。其中15种属于常用的响应代码,其他的都是用来标识一些特别离奇或完全不太可能出现的状态,如“402 Payment Required”(需要支付)或“415 Unsupported Media Type”(不支持的媒体类型)。RFC里列出来的大部分状态码和我们现在碰到的Web应用其实对应不起来;它们存在的唯一理由是某些人觉得日后也许能派上用场。

WEB安全 第五课 HTTP协议 之三 服务器响应状态码 404.jpg

        有些代码是值得记住的,因为确实很常用或者具有特殊的含义,这些常用代码描述如下。
        
        200〜299:成功
        
        这个范围内的状态码用于显示成功完成的请求:
        
        200 OK——对成功的GET或POST请求的正常响应。浏览器会接着给用户显示返回的数据,或以其他上下文相关的方式处理这些数据。
        
        204 No Content(无内容)——该响应码有时候表明请求已执行成功但不需要做任何响应。204响应码会中断浏览器的页面跳转,浏览器会保持原URL不变,页面内容也维持原状。
        
        206 Partial Content(部分内容)——这个响应码和200响应码类似,但服务器会根据请求头里Range的设置只返回部分的请求内容。浏览器应该已经接收了请求文档的其中一部分内容(否则它也不会发出一个Range的请求),通常来说,浏览器会根据响应里Content-Range信息,在做进一步处理前会先把文档整合到一起。
        
        300〜399:重定向和其他状态信息
        
        这个范围的响应码代表没有出错,但浏览器需要做额外处理的响应:
        
        301 Moved Permanently(永久移动)、302 Found(找到)、303 See Other(参见其他)——这些响应码意味着浏览器需要重定向到新的地址,新地址会在Location响应头里指定。尽管在RFC规范里这几个响应码是有区别的,但所有我们常用的浏览器碰到这些响应码时,都会把POST方法替换成GET方法,去除请求里的POST数据体部分,并自动重新再发送一次请求。
        
        注意:重定向的信息里可能包含信息体数据,但正常情况下浏览器并不会显示这部分的内容,除非浏览器无法完成重定向的动作(例如,缺少Location值或Location头域的格式有问题)。事实上,有些浏览器即使在无法跳转的情况下,也不会显示返回的信息体部分内容。
        
        304 Not Modified(没有变化)        这个非重定向请求告诉客户端,现在这次请求的文档和之前请求过的版本相比并没有变化。这个响应信息会根据If-Modified-Since头域的设定,对最后修改时间进行条件判断,然后确定是否需要更新浏览器端的文件缓存副本。

        响应的信息体部分也不会显示给用户(如果请求里并没有包含任何涉及缓存更新条件的头域,而服务器却返回了304响应码,各浏览器端的反应会不尽相同,有的甚至会产生某些荒谬的效果;譬如,Opera就会弹出一个无法执行成功的下载提示)。
        
        307 Temporary Redirect(临时重定向)        与302类似,但和其他重定向不同的是,在307状态码时浏览器不会把POST重置为GET方法。这个响应码在Web应用里不太常用,而某些浏览器对它的处理也不是很统一。
        
        400〜499:客户端错误
        
        这个范围的代码用于显示客户端行为导致的错误:

        400 Bad Request(不合规范的请求)——服务器因为某些特定原因,不能或不愿处理该请求。响应的信息体里通常会大略地解释一下出错的原因,其他的就和浏览器处理普通的200响应没啥分别了。当然还有更细分的报错信息,如“411LengthRequired(需要提供内容长度)”,“405 Method NotAllowed(不允许的方法)”或“414 Request URITooLong(请求的URI太长)”。但让人摸不着头脑的是,为什么没有Content-Length请求头会对应一个专门的411返回码,但没有Host请求头,却只有一个笼统的400返回码。
        
        401 Unauthorized(未授权)——这个代码的意思是,要访问特定的资源,用户需要提供基于HTTP协议级别的授权认证信息。接着浏览器一般都会提示用户输人登录信息,只有在授权失败的情况下,才会返回响应消息体。
        
        403 Forbidden(禁止访问)——与不正确的HTTP授权无关,所请求的URL存在但不能被访问到。原因可能是文件系统权限不足,规则配置不允许处理本次请求,或某种授权不足(例如:无效的Cookie或不被接受的源IP地址)。通常响应消息体都会显示给用户。
        
        404 Not Found(文件找不到)——请求的URL资源不存在。通常响应消息体都会显示给用户。
        
        500〜599:服务器端错误
        
        这类错误代码用于显示服务器端的错误:
        
        500 Internal ServerError(内部服务器错误)、503 Service Unavailable(服务不可用)等——服务器发生问题,无法正确完成请求。这可能只是个暂时的状态、配置错误,或仅仅是请求了某个找不到的地址。通常响应消息体都会显示给用户。
        
        HTTP响应码的一致性

        乍一看,其实很难区分大部分2xx、4xx和5xx响应码到底有什么差别,这导致人们对这些数值的选择也就不会特别费心。所以很多网站应用也因为这个问题而招致骂名无数,因为即使应用出错了,访问的页面里还是返回“200 OK”(这也是其中一个原因,使得Web应用自动测试超出了其原本应有的难度。)
        
        在很罕见的情况下,必须根据特定的需求,创建新的合理的HTTP响应码。在这类新创建的响应码中有些已经被纳为标准响应码了,如WebDAV RFC里用到的几个状态码。而微软公司的Microsoft Exchange服务器的“449 Retry With”(重试)状态码,则属于未获标准认可的代码。

WEB安全第五课第四节:HTTP协议 之四 持续会话

上一篇
下一篇


降临1994 「出类拔萃」 2018-5-1 06:12 来自手机 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

看完楼主的帖子,我的心情竟是久久不能平静。正如老子所云:大音希声,大象无形。我现在终于明白我缺乏的是什么了,正是楼主那种对真理的执着追求和楼主那种对理想的艰苦实践所产生的厚重感。面对楼主的帖子,我震惊得几乎不能动弹了,楼主那种裂纸欲出的大手笔,竟使我忍不住一次次地翻开楼主的帖子,每看一次,赞赏之情就激长数分,我总在想,是否有神灵活在它灵秀的外表下,以至能使人三月不知肉味,使人有余音绕梁、三日不绝的感受。楼主,你写得实在是太好了。我惟一能做的,就只有把这个帖子顶上去这件事了。
一起一伏 「龙战于野」 2018-5-3 21:10 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

小朋友,你还年轻。你走吧。我不想打击你,整个论坛都是我小号,不信我换个ID跟你说...#y416:
您需要登录后才可以回帖 登录 | 免费注册  

本版积分规则

关于本站|大事记|小黑屋|古黑论 网站统计

GMT+8, 2021-6-20 02:37 , Processed in 0.025059 second(s), 20 queries , Redis On.

© 2015-2021 GuHei.Net

Powered by Discuz! X3.4

快速回复 返回列表