Http协议简单介绍
一、Http協(xié)議解析
HTTP(HyperText Transfer Protocol)即超文本傳輸協(xié)議,是一種詳細(xì)規(guī)定了瀏覽器和萬(wàn)維網(wǎng)服務(wù)器之間互相通信的規(guī)則,它是萬(wàn)維網(wǎng)交換信息的基礎(chǔ),它允許將HTML(超文本標(biāo)記語(yǔ)言)文檔從Web服務(wù)器傳送到Web瀏覽器。
HTTP協(xié)議目前最新版的版本是1.1,HTTP是一種無(wú)狀態(tài)的協(xié)議,無(wú)狀態(tài)是指Web瀏覽器與Web服務(wù)器之間不需要建立持久的連接,這意味著當(dāng)一個(gè)客戶端向服務(wù)器端發(fā)出請(qǐng)求,然后Web服務(wù)器返回響應(yīng)(Response),連接就被關(guān)閉了,在服務(wù)器端不保留連接的有關(guān)信息。也就是說(shuō),HTTP請(qǐng)求只能由客戶端發(fā)起,而服務(wù)器不能主動(dòng)向客戶端發(fā)送數(shù)據(jù)。
HTTP遵循請(qǐng)求(Request)/應(yīng)答(Response)模型,Web瀏覽器向Web服務(wù)器發(fā)送請(qǐng)求時(shí),Web服務(wù)器處理請(qǐng)求并返回適當(dāng)?shù)膽?yīng)答,如圖所示。
HTTP使用一種基于消息的模型:客戶端發(fā)送一條請(qǐng)求消息,而后由服務(wù)器返回一條響應(yīng)消息。
?
二、Http請(qǐng)求
POST /test.php HTTP/1.1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//請(qǐng)求行
HOST:www.test.com? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //請(qǐng)求頭
User-Agent:Mozilla/5.0 (windows NT 6.1;rv:15.0)Gecko/20100101 Firefox/15.0 ? ? ? ? ? ?
//空白行,代表請(qǐng)求頭結(jié)束
Username=admin&password=admin? ? ? ? ? ? ? ? ? ? ? ?//請(qǐng)求正文
?
HTTP請(qǐng)求包括三部分,分別是請(qǐng)求行(請(qǐng)求方法)、請(qǐng)求頭(消息報(bào)頭)和?請(qǐng)求正文。
HTTP請(qǐng)求第一行為請(qǐng)求行,由三部分組成,第一部分說(shuō)明了該請(qǐng)求時(shí)POST請(qǐng)求,第二部分是一個(gè)斜杠(/login.php),用來(lái)說(shuō)明請(qǐng)求是該域名根目錄下的login.php,第三部分說(shuō)明使用的是HTTP1.1版本。
HTTP請(qǐng)求第二行至空白行為請(qǐng)求頭(也被稱為消息頭)。其中,HOST代表請(qǐng)求主機(jī)地址,User-Agent代表瀏覽器的標(biāo)識(shí),請(qǐng)求頭由客戶端自行設(shè)定。
HTTP請(qǐng)求第三行為請(qǐng)求正文,請(qǐng)求正文是可選的,它最常出現(xiàn)在POST請(qǐng)求方式中。
請(qǐng)求頭:
只出現(xiàn)在HTTP請(qǐng)求中,請(qǐng)求報(bào)頭允許客戶端向服務(wù)端傳遞請(qǐng)求的附加信息和客戶端自身信息。
- Host 請(qǐng)求報(bào)頭域主要用于指定被請(qǐng)求資源的Internet主機(jī)和端口。
- User-Agent 請(qǐng)求報(bào)頭域允許客戶端將它的操作系統(tǒng)、瀏覽器和其他屬性告訴服務(wù)器。
- Referer 包含一個(gè)URL,代表當(dāng)前訪問(wèn)URL的上一個(gè)URL,也就是說(shuō),用戶是從什么地方來(lái)到本頁(yè)面。當(dāng)前請(qǐng)求的原始URL地址。
- Cookie 是非常重要的請(qǐng)求頭,常用來(lái)表示請(qǐng)求者的身份等。
- Accept 這個(gè)消息頭用于告訴服務(wù)器客戶端愿意接受那些內(nèi)容,比如圖像類,辦公文檔格式等等。
三、Http請(qǐng)求方法
GET:GET方法用于獲取請(qǐng)求頁(yè)面的指定信息。如果請(qǐng)求資源為動(dòng)態(tài)腳本(非HTML),那么返回文本是Web容器解析后的HTML源代碼。GET請(qǐng)求沒(méi)有消息主體,因此在消息頭后的空白行是沒(méi)有其他數(shù)據(jù)。
POST:POST方法也與GET方法相似,但最大的區(qū)別在于,GET方法沒(méi)有請(qǐng)求內(nèi)容,而POST是有請(qǐng)求內(nèi)容的。
HEAD:這個(gè)請(qǐng)求的功能與GET請(qǐng)求相似,不同之處在于服務(wù)器不會(huì)再其響應(yīng)中返回消息主體,因此,這種方法可用于檢查某一資源在向其提交GET請(qǐng)求前是否存在。
PUT:PUT方法用于請(qǐng)求服務(wù)器把請(qǐng)求中的實(shí)體存儲(chǔ)在請(qǐng)求資源下,如果請(qǐng)求資源已經(jīng)在服務(wù)器中存在,那么將會(huì)用此請(qǐng)求中的數(shù)據(jù)替換原先的數(shù)據(jù)。向服務(wù)器上傳指定的資源。
?
四、http響應(yīng)
HTTP/1.1 200 OK ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//響應(yīng)行
Date: Sun, 15 Nov 2015 11:02:04 GMT ? ? ? ? ? ? ? ? ? ? ? ? ? ?//響應(yīng)頭
Server: bfe/1.0.8.9
Content-Length: 2605
Content-Type: application/javascript
Cache-Control: max-age=315360000
Expires: Fri, 13 Jun 2025 09:54:00 GMT
Content-Encoding: gzip
Set-Cookie: H_PS_PSSID=2022_1438_1944_1788; path=/; domain=test.com
Connection: keep-alive
?? ??? ??? ??? ??? ? ? ? ?//空白行,代表響應(yīng)頭結(jié)束
<html>
<head><title> Index.html </title></head> ? //響應(yīng)正文消息主題
?
HTTP響應(yīng)的第一行為響應(yīng)行,其中有HTTP版本(HTTP/1.1)、狀態(tài)碼(200)以及消息“OK”。
第二行至末尾的空白行為響應(yīng)頭,由服務(wù)器向客戶端發(fā)送。
消息頭之后是響應(yīng)正文,是服務(wù)器向客戶端發(fā)送的HTML數(shù)據(jù)。
響應(yīng)頭
響應(yīng)頭是服務(wù)器根據(jù)請(qǐng)求向客戶端發(fā)送的HTTP頭。
?
- Server 服務(wù)器使用的Web服務(wù)器名稱。
- Location 服務(wù)器通過(guò)這個(gè)頭告訴瀏覽器去訪問(wèn)哪個(gè)頁(yè)面,瀏覽器接收到這個(gè)請(qǐng)求之后,通常會(huì)立刻訪問(wèn)Location頭所指向的頁(yè)面。用于在重定向響應(yīng)中說(shuō)明重定向的目標(biāo)地址。
- Content-Type 這個(gè)消息頭用于規(guī)定主體的內(nèi)容類型。例如,HTML文檔的內(nèi)容類型text/html。
- Content-Encoding 這個(gè)消息頭為消息主體中的內(nèi)容指定編碼形式,一些應(yīng)用程序使用它來(lái)壓縮響應(yīng)以加快傳輸速度。
- Content-Length 消息頭規(guī)定消息主體的字節(jié)長(zhǎng)度。實(shí)體頭用于指明實(shí)體正文的長(zhǎng)度,以字節(jié)方式存儲(chǔ)的十進(jìn)制數(shù)字來(lái)表示。
- Connection 允許發(fā)送指定連接的選項(xiàng)。
?
五、http狀態(tài)碼
?五種狀態(tài)碼:
- ?? ?1xx:信息提示,表示請(qǐng)求已被成功接收,繼續(xù)處理。
- ?? ?2xx:請(qǐng)求被成功提交。
- ?? ?3xx:客戶端被重定向到其他資源。
- ?? ?4xx:客戶端錯(cuò)誤狀態(tài)碼,格式錯(cuò)誤或者不存在資源。
- ?? ?5xx:描述服務(wù)器內(nèi)部錯(cuò)誤。
常見(jiàn)的狀態(tài)碼描述如下:
- 200:客戶端請(qǐng)求成功,是最常見(jiàn)的狀態(tài)。
- 302:重定向。
- 404:請(qǐng)求資源不存在,是最常見(jiàn)的狀態(tài)。
- 400:客戶端請(qǐng)求有語(yǔ)法錯(cuò)誤,不能被服務(wù)器所理解。
- 401:請(qǐng)求未經(jīng)授權(quán)。
- 403:服務(wù)器收到請(qǐng)求,但是拒絕提供服務(wù)。
- 500:服務(wù)器內(nèi)部錯(cuò)誤,是最常見(jiàn)的狀態(tài)。
- 503:服務(wù)器當(dāng)前不能處理客戶端的請(qǐng)求。
?
總結(jié)
以上是生活随笔為你收集整理的Http协议简单介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Java流的简介
- 下一篇: LeetCode第 3 场双周赛(201