HTTP响应码403 Forbidden和401 Unauthorized对比

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP响应码403 Forbidden和401 Unauthorized对比相关的知识,希望对你有一定的参考价值。

参考技术A

401 Unauthorized : 该HTTP状态码表示认证错误,它是为了认证设计的,而不是为了授权设计的。收到401响应,表示请求没有被认证—压根没有认证或者认证不正确—但是请重新认证和重试。(一般在响应头部包含一个 WWW-Authenticate 来描述如何认证)。通常由web服务器返回,而不是web应用。从性质上来说是临时的东西。(服务器要求客户端重试)

403 Forbidden :该HTTP状态码是关于授权方面的。从性质上来说是永久的东西,和应用的业务逻辑相关联。它比401更具体,更实际。收到403响应表示服务器完成认证过程,但是客户端请求没有权限去访问要求的资源。

总的来说, 401 Unauthorized 响应应该用来表示缺失或错误的认证; 403 Forbidden 响应应该在这之后用,当用户被认证后,但用户没有被授权在特定资源上执行操作。

HTTP状态码决策图:

403 Forbidden vs 401 Unauthorized HTTP responses

HTTP Status Codes Decision Diagram – Infographic

.htaccess RewriteEngine 在 xampp 中导致 Unexpected 403 Forbidden http 响应代码

【中文标题】.htaccess RewriteEngine 在 xampp 中导致 Unexpected 403 Forbidden http 响应代码【英文标题】:.htaccess RewriteEngine causing Unexpected 403 Forbidden http response code in xampp 【发布时间】:2021-10-10 00:50:52 【问题描述】:

我正在使用 xampp 测试一些 php 代码。

在主项目目录中,我有以下 .htaccess 文件:

RewriteEngine on

#Index
RewriteCond %REQUEST_FILENAME ^/$  
RewriteRule request_handler.php [L]

#php files
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME !-f [OR]
RewriteCond %REQUEST_FILENAME ^.*(\.php)$
RewriteRule . request_handler.php [L]

#Blocked files. PHP blocked files should be specified in request_handler.php
<Files "setup.json">
    Order Allow,Deny
    Deny from all
</Files>
<Files "testimonials.json">
    Order Allow,Deny
    Deny from all
</Files>

#CACHE CONTROLL FOR STATIC RESOURSES
<FilesMatch "\.(jpg|jpeg|png|gif|swf)$">
    Header set Cache-Control "max-age=2592000, public"
</FilesMatch>

无论如何,我在所有请求中都遇到了意外的 403 禁止。但是,如果我删除 .htaccess 文件的第一行,我将不再出现这种意外行为。

有谁知道是什么导致了这个错误?

更新 我创建了一个新的 .htaccess 文件,它只包含一行:RewriteEngine On,但我仍然收到错误消息。 (如果我删除该行,我将停止收到错误)。该行的唯一存在会导致错误。

【问题讨论】:

【参考方案1】:

事实证明,我所要做的就是在 RewriteEngine On 指令之前添加行 Options FollowSymLinks

这是 Apache 不得不说的:

要在此上下文中启用重写引擎,您需要设置“RewriteEngine On”并且必须启用“Options FollowSymLinks”。 [...] 出于安全原因,需要此限制。

Apache documentation

【讨论】:

以上是关于HTTP响应码403 Forbidden和401 Unauthorized对比的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC(或 Spring Boot)。针对安全相关异常(例如 401 Unauthorized 或 403 Forbidden)的自定义 JSON 响应)

HTTP的错误响应码

HTTP 401 Unauthorized 或 403 Forbidden 对于“已禁用”用户?

http常见的状态码,400,401,403状态码 , http响应 ,php设置http响应

一般的响应状态码

如何在全球范围内以最佳方式处理来自服务器的 401/403 响应