【螞蟻】HTTP 常見常用狀態碼並附實例展示

2021-02-23 前端加加
Sindhudurg堡,印度馬哈拉施特拉邦
(© MovingMaratha/Alamy)

本文收錄於 GitHub 日問: DailyQuestion[1],內含大廠內推機會、面經大全及若干面試題,每天學習五分鐘,一年進入大廠中。可在右下角打開原文查看

大廠面經大全: https://q.shanyue.tech/interview.html大廠內推大全: https://q.shanyue.tech/infer/肯定會碰到: 101/200/301/302/304/400/404/502可能會碰到: 101/200/201/204/206/301/304/307/400/401/403/404/405/413/418/422/429/500/501/502/503/504 101 Switch Protocol

升級協議,如從 http 到 ws,此時需要反向代理支持,如 Nginx,在 Nginx 配置 websockt 如下:

location / {
  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection  $connection_upgrade;
}


示例:

101 200 Ok

表示資源請求成功,也是最常見到的狀態碼

示例:

$ curl https://shanyue.tech --head
HTTP/2 200


201 Created

資源創建成功,多用於 POST 請求

204 No Content

響應不會返回 Body,一般由以下兩種情況

示例一: 掘金為 Options 請求的狀態碼設置為 204

掘金為 Options 請求的狀態碼設置為 204

示例二: 知乎為 Delete 請求的狀態碼設置為 204,以下請求為取消關注

掘金為 Delete 請求的狀態碼設置為 204

示例三: 當你在知乎看段子時,不妨打開控制臺,會發現一個是 204 的狀態碼


curl 'https://www.zhihu.com/sc-profiler' \
  -H 'content-type: application/json' \
  --data-binary '[["i","production.heifetz.main.desktop.v1.Collector.screen.1536_960.count",1,1]]' \
  --compressed -vvv
< HTTP/2 204
< server: CLOUD ELB 1.0.0
< date: Thu, 22 Oct 2020 07:46:30 GMT
< content-type: text/html
< vary: Accept-Encoding
< x-backend-response: 0.002
< cache-control: no-cache, no-store, must-revalidate, private, max-age=0


206 Partial Content

當請求多媒體數據數據較大時,會進行分片傳輸。當你在 B 站觀看視頻,打開開發者工具,會發現許多 206 狀態碼以及響應頭 Content-Range

示例:

B站上的視頻資源請求狀態碼為206 301 Moved Permanently

永久重定向。http 轉向 https 時,有時會使用 301,此時瀏覽器會自動緩存,下次直接自動跳轉,不再請求伺服器。當更新域名需要 SEO 優化時,同樣使用 301 或者 308。如 B 站:

$ curl www.bilibili.com -vvv
< HTTP/1.1 301 Moved Permanently
< Server: Tengine
< Date: Thu, 22 Oct 2020 08:04:59 GMT
< Content-Type: text/html
< Content-Length: 239
< Connection: keep-alive
< Location: https://www.bilibili.com/


302 Found

暫時重定向。http 轉向 https 時,有時也會使用 302,如知乎的跳轉

$ curl www.zhihu.com -vvv
< HTTP/1.1 302 Found
< Location: https://www.zhihu.com/
< Content-Length: 0
< X-NWS-LOG-UUID: 16068764905156850032
< Connection: keep-alive
< Server: Lego Server
< Date: Thu, 22 Oct 2020 08:20:29 GMT
< X-Cache-Lookup: Return Directly


304 Not Modified

資源已被緩存,與之相關的響應頭部有:

last-modified/if-modified-since

一般用作 index.html 等不帶 hash 的資源,由於示例太多,這裡就不舉例了

307 Temporary Redirect

暫時重定向。也可作為 http 到 https 的重定向。還有一種用途用作 HSTS,當谷歌瀏覽器發現某 http 資源已被加入到 HSTS 列表,瀏覽器內部會通過 307 作重定向

示例:

山月個人博客網站的 HSTSStackoverflow 中的307

http 狀態碼中 301,302 和 307 有什麼區別 (opens new window)[2]

301,Moved Permanently。永久重定向,該操作比較危險,需要謹慎操作:如果設置了 301,但是一段時間後又想取消,但是瀏覽器中已經有了緩存,還是會重定向。302,Found。臨時重定向,但是會在重定向的時候改變 method: 把 POST 改成 GET,於是有了 307307,Temporary Redirect。臨時重定向,在重定向時不會改變 method 308 Permanent Redirect

永久重定向。與 301 不同的是,當它重定向到新的地址時,並不會改變 method。

400 Bad Request

對於伺服器無法理解的參數,將會使用 400 作為返回碼

示例一: 當 Content-Type: JSON 時,伺服器解析 JSON 卻失敗

HTTP/1.1 400 Bad Request
Content-Length: 35

{"message":"Problems parsing JSON"}


401 Unauthorized

當沒有權限的用戶請求需要帶有權限的資源時,會返回 401,此時攜帶正確的權限憑證再試一次可以解決問題

有時認證失敗也會返回 401

示例一: 知乎登錄時密碼不正確

知乎登錄失敗時

示例二: Github 中錯誤的憑證信息請求帶權限資源

$ curl -i https://api.github.com -u foo:bar
> HTTP/1.1 401 Unauthorized

> {
>   "message": "Bad credentials",
>   "documentation_url": "https://developer.github.com/v3"
> }


403 Forbidden

我就是不想讓你訪問,不管你的權限憑證是否正確!

In summary, a 401 Unauthorized response should be used for missing or bad authentication, and a 403 Forbidden response should be used afterwards, when the user is authenticated but isn’t authorized to perform the requested operation on the given resource.

403 與 401 狀態碼有什麼區別 (opens new window)[3] 404 Not Found

未找到資源

405 Method Not Allowed

我需要 POST 這條資源,你去 GET 個錘子

413 Payload Too Large

不要給我扔這麼大的 Body,我處理不過來

418 I'm A Teapot

我是一個茶壺

我要拋咖啡,你卻扔給我一個茶壺?

也可以用來處理不合法的參數校驗,我想要個字符串,你給了我一個整數?

422 Unprocessable Entity

常用來處理不合法的參數校驗。

Github 上給某個項目點讚時,故意設置一個不正確的參數命名,會返回狀態碼 422

422 429 Too Many Request

請求過多被限流。

超過某一個 API 的 Rate Limit 規則,會被限流,返回 429 狀態碼

示例: 在 Sentry 中異常上報過於頻繁被限流

500 Internal Server Error

伺服器內部錯誤,很有可能是應用層未捕獲錯誤而導致整個服務掛掉

502 Bad Gateway

Nginx 上常見,從上遊應用層未返迴響應,上遊應用層掛了

由於大量流量造成服務忙,稍等一下說不定就能用了

網關超時,上遊應用層遲遲未響應

參考資料[1]

DailyQuestion: https://q.shanyue.tech

[2]

http 狀態碼中 301,302和307有什麼區別 (opens new window): https://github.com/shfshanyue/Daily-Question/issues/37

[3]

403與401狀態碼有什麼區別 (opens new window): https://stackoverflow.com/questions/3297048/403-forbidden-vs-401-unauthorized-http-responses

- END -

相關焦點

  • HTTP協議之狀態碼詳解
    HTTP狀態碼,我都是現查現用。 我以前記得幾個常用的狀態碼,比如200,302,304,404, 503。 一般來說我也只需要了解這些常用的狀態碼就可以了。 如果是做AJAX,REST,網絡爬蟲,機器人等程序。還是需要了解其他狀態碼。 本文我花了一個多月的時間把所有的狀態碼都總結了下,內容太多,看的時候麻煩耐心點了。
  • HTTP狀態碼,你知道幾個??
    今天給大家分享之前小編面試過的一道面試題的答案,之前小編去面試,然後筆試是有一道寫出你所知道的http的狀態碼,但是真的只知道404.200.500
  • 10個Python爬蟲入門實例
    #設置編碼格式print("狀態碼:"+ str( response.status_code ) ) #列印狀態碼print(response.text)#輸出爬取的信息2.常用方法之get方法實例,下面還有傳參實例# 第二個get方法實例import requests #先導入爬蟲的庫,不然調用不了爬蟲的函數response = requests.get("http://httpbin.org/get") #get方法print( response.status_code )
  • 10個python爬蟲入門實例教程
    #設置編碼格式print("狀態碼:"+ str( response.status_code ) ) #列印狀態碼print(response.text)#輸出爬取的信息2.常用方法之get方法實例,下面還有傳參實例# 第二個get方法實例import requests #先導入爬蟲的庫,不然調用不了爬蟲的函數
  • SAP ABAP應用伺服器的HTTP響應狀態碼(Status Code)
    本文記錄了2016年時,SAP成都研究院CRM開發團隊在開發SAP CRM Fiori應用時的一些技術討論,關於HTTP請求的響應狀態碼的差異。HTTP 200和HTTP 304理論上的差異解析,網上一搜一大把:https://stackoverflow.com/questions/1665082/what-is-the-difference-between-http-status-code-200-cache-vs-status-code
  • 網站SEO優化中對於HTTP狀態碼的使用需要注意哪些
    我們在做網站SEO優化的時候,經常會看到有些文章中提到301、404、200等狀態碼,於是很多SEOer們就比較疑惑這些究竟是什麼呢?其實這些都可以稱為HTTP狀態碼。那什麼是HTTP狀態碼呢?其是指當瀏覽器訪問網頁並向伺服器發出請求後,在瀏覽器顯示網頁以前,網頁所在的伺服器會返回一個包含HTTP狀態碼信息頭來用以響應瀏覽器的相關請求。這些狀態碼很重要,它們可以幫助搜尋引擎更好識別對應網頁的狀態,也有益於你檢測網頁可能出現的問題。不過,對於這些狀態碼返回的數值要多加注意,如果處理不當,很有可能對SEO優化的工作產生負面影響。
  • 這些 HTTP 網頁狀態碼代表啥含義?
    今天我們就來談一談那些狀態碼。但似乎一般人都不會仔細研究這些HTTP狀態碼和這些狀態碼對開發人員的影響。也許,一個開發人員就算不知道這些狀態碼也能開發出一個網站,但如果企業要開發一個大型網站,在某些時候需要微調或系統整合需要到更底層的網絡工作時,就有可能遇到瓶頸,特別是在出錯時更加明顯。對於狀態碼的分類有三個層級,就好像404那樣用3三個數字表示,分為大類,中類和小類。
  • 計算機基礎之HTTP協議
    http是網絡上最常見的協議之一,我們上網必用的協議,它是什麼,是如何工作的,今天我們就簡單梳理一下http協議的知識。HTTP協議是什麼?HTTP協議是超文本傳輸協議的縮寫,英文是Hyper Text Transfer Protocol。是從全球資訊網伺服器傳輸超文本到本地瀏覽器的傳送協議。
  • 科普:404/401/408...這些HTTP網頁狀態碼代表啥含義? - IT之家
    今天我們就來談一談那些狀態碼。404和HTTP狀態碼上面所說的404其實是一種標準的HTTP返回代碼,官方名稱是HTTP狀態碼(HTTPStatusCode),用於表示網頁伺服器HTTP的響應狀態。但似乎一般人都不會仔細研究這些HTTP狀態碼和這些狀態碼對開發人員的影響。
  • 理解HTTP協議
    而且還增加了現在常用的POST和HEAD命令。請求消息和響應消息也不是單一的了,規定了一些元數據欄位。例如字符集、編碼、狀態響應碼等。3、HTTP 1.1版本 1997年 實際上是在1.0版本之後半年時間又發布了一個版本,這個版本在1.0版本的基礎上更加完善了。
  • 螞蟻市場是什麼意思,螞蟻市場分享碼怎麼用,一一細說
    螞蟻市場是一款大屏端應用市場,它根據軟體類型分為了影音、遊戲、工具等板塊。除了常規的TV版軟體,還包含了眾多能符合用戶需求的小眾軟體(個人開發者創作),大部分都是免費的,提供各種高清畫質資源,而且無任何廣告。比如,通過分享碼下載到的電視家3.0。
  • 吐血整理:HTTP常用基礎知識,有這一篇就夠了
    今天從另一個角度為大家梳理一下http相關的一些知識點。本文主要有7個方面,分別是1、http演進歷史,會大致介紹一下每個版本的更新內容、遇到的問題與當時的改進方案 2、http緩存策略3、跨域策略 4、http的並發問題5、get/post區別與常見埠號6、一些開放性的問題 7、最後把本文成文過程中參考的各位巨人的肩膀給羅列出來。
  • baby秀螞蟻腰 baby新年的狀態依舊又美又颯
    baby秀螞蟻腰 baby新年的狀態依舊又美又颯時間:2020-02-12 10:15   來源:今日頭條   責任編輯:莫小煙 川北在線核心提示:原標題:baby秀螞蟻腰 baby新年的狀態依舊又美又颯 2月11日,baby的新年大片曝光,穿著紅火的皮裙,展現了令人羨慕的螞蟻腰和大長腿,baby新年的狀態依舊又美又颯
  • 30 張圖解 HTTP 常見的面試題
    五大類 HTTP 狀態碼1xx1xx 類狀態碼屬於提示信息,是協議處理中的一種中間狀態,實際用到的比較少。2xx2xx 類狀態碼表示伺服器成功處理了客戶端的請求,也是我們最願意看到的狀態。「200 OK」是最常見的成功狀態碼,表示一切正常。如果是非 HEAD 請求,伺服器返回的響應頭都會有 body 數據。「204 No Content」也是常見的成功狀態碼,與 200 OK 基本相同,但響應頭沒有 body 數據。
  • 曬碼姐講堂——創建Form表單實例
    任何一個伺服器腳本語言最常見的應用場景就是處理html表單,我們通過創建一個書店圖書的錄入實例開始學習PHP.<html ><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>書店圖書管理系統
  • Jmeter之HTTP請求與響應
    HTTP請求詳解一個http請求指從客戶端到服務端的請求信息,我們可以通過瀏覽器的F12鍵,可以看到以下信息:1.請求地址:uri響應指的是從伺服器到客戶端的響應信息,它包括了以下信息:1.響應狀態碼:標記響應狀態,用來體現一個請求是否成功,例如200-成功,404:資源找不到,500-伺服器異常,302-重定向等等2.響應頭:告訴客戶端關於伺服器
  • 含HR常用函數示例模板,太實用了!
    從函數公式到應用實例清楚呈現,各個函數按應用範圍分門別類,讓大家直接找到對應函數,學完你就知道函數的強大功能!工作得心應手,效率事半功倍!文末附資料免費下載方式HR常用函數操作⏬部分內容展示如下:套表:HR最常用的公式
  • Word 常用查找替換實例及方法
    如果沒有特別提示,替換均為「全部替換」以下各實例同上。建議其中的選項用制表符不用空格),然後將文檔中的相應半角部分替換成制表符2、點工具欄的多級符號按鈕即可;可以看看其中的替換後的文檔和使用的多級符號列表之間的「相似關係」查找內容:替換為:(章)^32\1^t([0-9])^32\1^t相關解釋及說明:^32表示半角空格的Ascii碼;
  • CAD教程:CAD狀態欄對象捕捉使用實例
    2.單擊AutoCAD2013狀態欄上的 (對象捕捉)按鈕。對象捕捉按鈕變藍時 啟用對象捕捉,灰色為關閉對象捕捉。如果單擊狀態欄上的回(對象捕捉)按鈕關閉自動對象捕捉功能,就可以避免上述情況的發生。因此在繪圖時,一般會根據繪圖需要不斷地單擊狀態欄上的(對象捕捉)按鈕,以便啟用或關閉自動對象捕捉功能。
  • 申請健康碼常見問題
    我館梳理了赴華旅客申請健康碼過程中提出的常見問題,請您仔細閱讀。    一、我需要提前多長時間申請健康碼?   由於申請人數眾多,請遵守附後圖表中的申請時限,避免深夜及值機時申請。如臨近航班起飛前才填報上傳資料,易導致審核時間不足,造成登機延誤。    二、我可否在周末、節假日提出申請或乘坐航班?