HTTP狀態碼401和403深度解析

一直只是知道401和403都是拒絕訪問的意思, 但沒有仔細研究它們之間準確的區別, 如今詳細記錄一下.bash

表面上是這樣

401 Unauthorized
403 Forbidden
複製代碼

從w3.org的解釋來看:服務器

imagepng

imagepng

做爲非英語國家的咱們而言, 可能不太能發覺這兩個描述中的問題, 只是能看明白401是沒有帶認證信息或者帶了錯誤的認證信息, 這時客戶端能夠修改認證信息進行重試; 而403是客戶端帶了正確的認證信息, 但服務器認爲這個認證信息對應的用戶是沒有對應資源的訪問權限的, 所以, 在向管理員獲取相關權限以前, 是沒有重試的必要的.google

但實際上這個描述中忽視了兩個單詞: Authorized和Authenticated.spa

imagepng

imagepng

這樣看就很明顯了, 前者指的是"用戶被容許/受權作某事", 然後者只是表示"用戶是認證用戶".code

舉個簡單的例子, 在通常的後臺系統中, 用戶通常是經過LDAP或相似系統導入的, 也便是全部能夠登陸後臺系統的用戶都是"Authenticated"的, 他們有本身的Credentials. 但後臺系統也都會有很詳細的權限管理機制, 你雖然是認證用戶, 但恐怕大多數資源你仍是沒法訪問, 這時你就是"Unauthorized"的了.cdn

因此這樣看, 401的正確解釋應該是"Unauthenticated", 並且在HTTP Authentication: Basic and Digest Access Authentication中須要帶的請求頭也應該是Authentication而不是Authorization.blog

這個是歷史遺留問題了, 估計之後也不會有什麼改變, 但咱們仍是須要知道這個問題, 省得在使用時混淆了401和403.資源

參考: 403 Forbidden vs 401 Unauthorized HTTP responses get

相關文章
相關標籤/搜索