HTTP學習
self發表於2019-06-16
HTTP學習
- HTTP入門教程.
- HTTP協議時Hyper Text Transfer Protocol(超文字傳輸協議)的縮寫,用於Web伺服器傳輸超文字到本地瀏覽器的傳送協議。是應用層協議,底層時基於TCP/IP的。
- 瀏覽器作為HTTP客戶端通過URL向HTTP服務端傳送請求。Web伺服器根據接收到的請求,向客戶端傳送響應資訊,HTTP預設埠號是80埠,也可以改為其他埠。
- HTTP三項注意項:
- HTTP是無連線的: 每次連線只處理一個請求,伺服器處理完客戶端的請求,收到客戶端的應答後,立即斷開連線(短連線)。
- HTTP是媒體獨立的: 只要客戶端和伺服器之間定義好怎麼編解碼資料,任何資料都可以在HTTP之間傳遞。
- HTTP是無狀態的: 協議對事務處理能力沒有記憶能力。
HTTP訊息結構
- 客戶端傳送一個HTTP請求到伺服器的請求訊息包括以下格式: 請求行(request line), 請求頭部(header), 空行和請求資料。
.
- HTTP響應有四個部分: 狀態行, 訊息報頭,空行和響應正文。
.
.
- HTTP 協議中共定義了八種方法或者叫“動作”來表明對 Request-URI 指定的資源的不同操作方式,具體介紹如下:
- OPTIONS:返回伺服器針對特定資源所支援的HTTP請求方法。也可以利用向Web伺服器傳送'*'的請求來測試伺服器的功能性。
- HEAD:向伺服器索要與GET請求相一致的響應,只不過響應體將不會被返回。這一方法可以在不必傳輸整個響應內容的情況下,就可以獲取包含在響應訊息頭中的元資訊。
- GET:向特定的資源發出請求。
- POST:向指定資源提交資料進行處理請求(例如提交表單或者上傳檔案)。資料被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。
- PUT:向指定資源位置上傳其最新內容。
- DELETE:請求伺服器刪除 Request-URI 所標識的資源。
- TRACE:回顯伺服器收到的請求,主要用於測試或診斷。
- CONNECT:HTTP/1.1 協議中預留給能夠將連線改為管道方式的代理伺服器。
- 雖然 HTTP 的請求方式有 8 種,但是我們在實際應用中常用的也就是 get 和 post,其他請求方式也都可以通過這兩種方式間接的來實現。
HTTP請求方法
- HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法。
- HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
HTTP響應頭資訊
- HTTP請求頭提供了關於請求,響應或者其他的傳送實體的資訊。
- 響應頭資訊:
- Allow: 伺服器支援哪些請求方法(如GET、POST等)。
- Content-Encoding: 文件的編碼(Encode)方法。只有在解碼之後才可以得到Content-Type頭指定的內容型別。
- Content-Length: 表示內容長度。只有當瀏覽器使用持久HTTP連線時才需要這個資料。
- Content-Type: 表示後面的文件屬於什麼MIME型別。Servlet預設為text/plain,但通常需要顯式地指定為text/html。
- Date: 當前的GMT時間。你可以用setDateHeader來設定這個頭以避免轉換時間格式的麻煩。
- Expires: 應該在什麼時候認為文件已經過期,從而不再快取它?
- Last-Modified: 文件的最後改動時間。客戶可以通過If-Modified-Since請求頭提供一個日期,該請求將被視為一個條件GET,只有改動時間遲於指定時間的文件才會返回,否則返回一個304(Not Modified)狀態。Last-Modified也可用setDateHeader方法來設定。
- Location: 表示客戶應當到哪裡去提取文件。Location通常不是直接設定的,而是通過HttpServletResponse的sendRedirect方法,該方法同時設定狀態程式碼為302。
- Refresh: 表示瀏覽器應該在多少時間之後重新整理文件,以秒計。除了重新整理當前文件之外,你還可以通過setHeader("Refresh", "5; URL=http://host/path")讓瀏覽器讀取指定的頁面。
- 注意Refresh頭不屬於HTTP 1.1正式規範的一部分,而是一個擴充套件,但Netscape和IE都支援它。
- Server: 伺服器名字。Servlet一般不設定這個值,而是由Web伺服器自己設定。
- Set-Cookie: 設定和頁面關聯的Cookie。Servlet不應使用response.setHeader("Set-Cookie", ...),而是應使用HttpServletResponse提供的專用方法addCookie。參見下文有關Cookie設定的討論。
- WWW-Authenticate: 客戶應該在Authorization頭中提供什麼型別的授權資訊?在包含401(Unauthorized)狀態行的應答中這個頭是必需的。
HTTP狀態碼
- 當瀏覽者訪問一個網頁時,瀏覽者的瀏覽器會向網頁所在伺服器發出請求。當瀏覽器接收並顯示網頁前,此網頁所在的伺服器會返回一個包含HTTP狀態碼的資訊頭(server header)用以響應瀏覽器的請求。
- 常見的狀態碼:
- 200 - 請求成功。
- 301 - 資源(網頁等)被永久轉移到其他URL。
- 404 - 請求的資源(網頁等)不存在。
- 500 - 內部伺服器錯誤。
- HTTP狀態碼由三個十進位制數字組成,第一個十進位制數字定義了狀態碼的型別,後兩個數字沒有分類的作用。HTTP狀態碼共分為5種型別:
- 1**: 資訊,伺服器收到請求,需要請求者繼續執行操作。
- 100 - Continue, 繼續。客戶端應繼續其請求。
- 101 - Switching Protocols, 切換協議。伺服器根據客戶端的請求切換協議。只能切換到更高階的協議,例如,切換到HTTP的新版本協議.
- 2**: 成功,操作被成功接收並處理。
- 200 - OK, 請求成功。一般用於GET與POST請求.
- 201 - Created, 已建立。成功請求並建立了新的資源.
- 202 - Accepted, 已接受。已經接受請求,但未處理完成.
- 203 - Non-Authoritative Information, 非授權資訊。請求成功。但返回的meta資訊不在原始的伺服器,而是一個副本.
- 204 - No Content, 無內容。伺服器成功處理,但未返回內容。在未更新網頁的情況下,可確保瀏覽器繼續顯示當前文件.
- 205 - Reset Content, 重置內容。伺服器處理成功,使用者終端(例如:瀏覽器)應重置文件檢視。可通過此返回碼清除瀏覽器的表單域.
- 206 - Partial Content, 部分內容。伺服器成功處理了部分GET請求.
- 3**: 重定向,需要進一步的操作以完成請求。
- 300 - Multiple Choices, 多種選擇。請求的資源可包括多個位置,相應可返回一個資源特徵與地址的列表用於使用者終端(例如:瀏覽器)選擇.
- 301 - Moved Permanently, 永久移動。請求的資源已被永久的移動到新URI,返回資訊會包括新的URI,瀏覽器會自動定向到新URI。今後任何新的請求都應使用新的URI代替.
- 302 - Found, 臨時移動。與301類似。但資源只是臨時被移動。客戶端應繼續使用原有URI.
- 303 - See Other, 檢視其它地址。與301類似。使用GET和POST請求檢視.
- 304 - Not Modified, 未修改。所請求的資源未修改,伺服器返回此狀態碼時,不會返回任何資源。客戶端通常會快取訪問過的資源,通過提供一個頭資訊指出客戶端希望只返回在指定日期之後修改的資源.
- 305 - Use Proxy, 使用代理。所請求的資源必須通過代理訪問.
- 306 - Unused, 已經被廢棄的HTTP狀態碼.
- 307 - Temporary Redirect, 臨時重定向。與302類似。使用GET請求重定向.
- 4**: 客戶端錯誤,請求包含語法錯誤或無法完成的請求。
- 400 - Bad Request, 客戶端請求的語法錯誤,伺服器無法理解.
- 401 - Unauthorized, 請求要求使用者的身份認證.
- 402 - Payment Required, 保留,將來使用.
- 403 - Forbidden, 伺服器理解請求客戶端的請求,但是拒絕執行此請求.
- 404 - Not Found, 伺服器無法根據客戶端的請求找到資源(網頁)。通過此程式碼,網站設計人員可設定"您所請求的資源無法找到"的個性頁面.
- 405 - Method Not Allowed, 客戶端請求中的方法被禁止.
- 406 - Not Acceptable, 伺服器無法根據客戶端請求的內容特性完成請求.
- 407 - Proxy Authentication Required, 請求要求代理的身份認證,與401類似,但請求者應當使用代理進行授權.
- 408 - Request Time-out, 伺服器等待客戶端傳送的請求時間過長,超時.
- 409 - Conflict, 伺服器完成客戶端的PUT請求是可能返回此程式碼,伺服器處理請求時發生了衝突.
- 410 - Gone, 客戶端請求的資源已經不存在。410不同於404,如果資源以前有現在被永久刪除了可使用410程式碼,網站設計人員可通過301程式碼指定資源的新位置.
- 411 - Length Required, 伺服器無法處理客戶端傳送的不帶Content-Length的請求資訊.
- 412 - Precondition Failed, 客戶端請求資訊的先決條件錯誤.
- 413 - Request Entity Too Large, 由於請求的實體過大,伺服器無法處理,因此拒絕請求。為防止客戶端的連續請求,伺服器可能會關閉連線。如果只是伺服器暫時無法處理,則會包含一個Retry-After的響應資訊.
- 414 - Request-URI Too Large, 請求的URI過長(URI通常為網址),伺服器無法處理.
- 415 - Unsupported Media Type, 伺服器無法處理請求附帶的媒體格式.
- 416 - Requested range not satisfiable, 客戶端請求的範圍無效.
- 417 - Expectation Failed, 伺服器無法滿足Expect的請求頭資訊.
- 5**: 伺服器錯誤,伺服器在處理請求的過程中發生了錯誤。
- 501 - Not Implemented, 伺服器不支援請求的功能,無法完成請求.
- 502 - Bad Gateway, 作為閘道器或者代理工作的伺服器嘗試執行請求時,從遠端伺服器接收到了一個無效的響應.
- 503 - Service Unavailable, 由於超載或系統維護,伺服器暫時的無法處理客戶端的請求。延時的長度可包含在伺服器的Retry-After頭資訊中.
- 504 - Gateway Time-out, 充當閘道器或代理的伺服器,未及時從遠端伺服器獲取請求.
- 505 - HTTP Version not supported, 伺服器不支援請求的HTTP協議的版本,無法完成處理.
其他
- Content-Type,內容型別,一般是指網頁中存在的Content-Type,用於定義網路檔案的型別和網頁的編碼,決定瀏覽器將以什麼形式、什麼編碼讀取這個檔案,這就是經常看到一些Asp網頁點選的結果卻是下載到的一個檔案或一張圖片的原因。