HTTP學習
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網頁點擊的結果倒是下載到的一個文件或一張圖片的緣由。
歡迎關注本站公眾號,獲取更多信息