HTTP (超文本傳輸協議) 是用來在 Web 上傳輸文件的基礎 協議 ,最典型的是在瀏覽器和服務器之間傳遞以致於上網人員能夠瀏覽他們。瀏覽器
做爲URI的一部分,「http://」被稱爲模式,一般位於地址的開頭,例如「https://developer.mozilla.org」,就是指示瀏覽器利用HTTP協議請求文檔。https在這個例子中指的是HTTP協議的安全版本,被稱爲SSL,或者TLS。緩存
HTTP 是基於文本 (全部的通訊都是以純文本的形式進行) 以及無狀態的 (當前通訊不會發現之前的通訊狀態)。這個特色對在www上訪問網頁的人是很理想的。並且,HTTP也可讓網站更加的靈活多變,利用在AJAX上等。安全
在一個瀏覽器和處理請求的服務器之間,因爲Web的層次設計,那些在網絡層和傳輸層的細節都被隱藏起來了。HTTP位於最上層的應用層。雖然底層對於分析網絡問題很是重要,可是大多都跟對HTTP的描述不相干。服務器
一、緩存(能夠是公開的也能夠是私有的,像瀏覽器的緩存) 二、過濾(像反病毒掃描,家長控制...) 三、負載均衡(讓多個服務器服務不一樣的請求) 四、認證(對不一樣資源進行權限管理) 五、日誌記錄(容許存儲歷史信息)
HTTP是無狀態的,使用Cookies能夠建立有狀態的會話。網絡
把Cookies添加到頭部中,建立一個會話讓每次請求都能共享相同的上下文信息,達成相同的狀態,將兩個請求相關聯,如購物車實現兩個商品添加!
HTTP 和鏈接負載均衡
兩個最經常使用的傳輸層協議:TCP是可靠的,而UDP不是。所以,HTTP依賴於面向鏈接的TCP進行消息傳遞,但鏈接並非必須的。爲了更好的適合HTTP,設計一種更好傳輸協議的進程一直在進行。Google就研發了一種以UDP爲基礎,能提供更可靠更高效的傳輸協議
如下是能夠被HTTP控制的常見特性:dom
開放同源限制:工具
爲了防止網絡窺聽和其它隱私泄漏,瀏覽器強制對Web網站作了分割限制。只有來自於相同來源的網頁纔可以獲取網站的所有信息。這樣的限制有時反而成了負擔,HTTP能夠經過修改頭部來開放這樣的限制,所以Web文檔能夠是由不一樣域下的信息拼接成的(某些狀況下,這樣作還有安全因素考慮)
認證:性能
一些頁面可以被保護起來,僅讓特定的用戶進行訪問。基本的認證功能能夠直接經過HTTP提供,使用Authenticate類似的頭部便可,或用HTTP Cookies來設置指定的會話。
代理和隧道:網站
一般狀況下,服務器和/或客戶端是處於內網的,對外網隱藏真實 IP 地址。所以 HTTP 請求就要經過代理越過這個網絡屏障。但並不是全部的代理都是 HTTP 代理。例如,SOCKS協議的代理就運做在更底層,一些像 FTP 這樣的協議也可以被它們處理。
當客戶端想要和服務端進行信息交互時(服務端是指最終服務器,或者是一箇中間代理),過程表現爲下面幾步:
有兩種HTTP報文的類型,請求與響應,每種都有其特定的格式。
一、請求
請求由如下元素組成:
一個HTTP的method,常常是由一個動詞像GET, POST 或者一個名詞像OPTIONS,HEAD來定義客戶端的動做行爲。一般客戶端的操做都是獲取資源(GET方法)或者發送HTML form表單值(POST方法),雖然在一些狀況下也會有其餘操做。
要獲取的資源的路徑,一般是上下文中就很明顯的元素資源的URL,它沒有protocol (http://),domain(developer.mozilla.org),或是TCP的port(HTTP通常在80端口)。
HTTP協議版本號。
爲服務端表達其餘信息的可選頭部headers。
對於一些像POST這樣的方法,報文的body就包含了發送的資源,這與響應報文的body相似。
二、響應
響應報文包含了下面的元素:
HTTP協議版本號。
一個狀態碼(status code),來告知對應請求執行成功或失敗,以及失敗的緣由。
一個狀態信息,這個信息是非權威的狀態碼描述信息,能夠由服務端自行設定。
HTTP headers,與請求頭部相似。
可選項,比起請求報文,響應報文中更常見地包含獲取的資源body。