rlk*_*024 8 apache http http-status-codes http-status-code-403 http-status-code-404
这主要是关于解释HTTP规范的最佳方式的哲学问题.没有目录索引的目录(例如index.html)是应该返回404还是403?(403是Apache中的默认值.)
例如,假设存在以下URL并且可以访问:
http://example.com/files/file_1/
http://example.com/files/file_2/
Run Code Online (Sandbox Code Playgroud)
但是没有什么在:
http://example.com/files/
Run Code Online (Sandbox Code Playgroud)
(假设我们使用301s强制所有URL使用斜杠.)
我认为应该考虑几件事:
http://example.com/files/ 不是资源,它内部映射到目录的事实应该与状态代码无关.总而言之,您认为最好的方法是什么?我们应该只说"资源是一种资源,如果它不存在,它就是404?" 或者我们应该说,"如果它有斜杠,它看起来像客户端的目录,因此如果没有索引它就是403?"
如果你在403阵营,你认为即使内部实现不使用目录,你也应该尽力返回403s?例如,假设您有一个带有此URL的动态Web应用程序:http://example.com/users/joe,它映射到生成Joe的配置文件页面的某些代码.假设您没有写出列出所有用户的内容,应该http://example.com/users/返回403吗?(在这种情况下,许多(如果不是所有)Web框架都返回404.)
回答这个问题的第一步是参考RFC 2616:HTTP/1.1.特别是关于403 Forbidden和404 Not Found的章节.
- 10.4.4 403禁止
服务器理解请求,但拒绝履行请求.授权无效,请求不应重复.如果请求方法不是HEAD并且服务器希望公开为什么请求没有得到满足,那么它应该描述实体中拒绝的原因.如果服务器不希望将此信息提供给客户端,则可以使用状态代码404(未找到).
- 10.4.5 404未找到
服务器未找到与Request-URI匹配的任何内容.没有说明该病症是暂时的还是永久性的.如果服务器通过一些内部可配置的机制知道旧资源永久不可用且没有转发地址,则应该使用410(Gone)状态代码.当服务器不希望确切地说明请求被拒绝的原因,或者没有其他响应适用时,通常会使用此状态代码.
我对此的解释是404是更通用的错误代码,只是说"那里什么都没有".403说"那里什么也没有,不要再试了!".
Apache可能在没有显式索引文件的目录上返回403的一个原因是自动索引(即列出其中的所有文件)被禁用(也称为"禁止").在这种情况下,说"列出此目录中的所有文件是被禁止的"比说"没有目录"更有意义.
| 归档时间: |
|
| 查看次数: |
5113 次 |
| 最近记录: |