HTTP協議並非對等的,須要客戶端和服務端,經過請求和響應模型實現。web
對HTTP來講,每一個請求響應都是獨立的,不關心請求之間的聯繫。
HTTP是經過Cookie技術來保存用戶狀態的。apache
服務器經過Set-Cookie首部字段信息設置一個Cookie值,(服務器本身也會保存這個值)通知客戶端要保存這個Cookie值,客戶端在下次請求時自動在請求頭中加入Cookie值後發送。服務器對比這個Cookie就知道這個那個用戶發來的請求了。瀏覽器
http 1.0 1.1 都支持的:緩存
http1.1新增的:安全
僅http1.0支持,也就是被http/1.1淘汰了:服務器
又叫持久鏈接,好處是減小了TCP鏈接和斷開的次數。
在http/1.1中默認是長鏈接了websocket
管線化,就是同時發送多個請求。至關於一個鏈接中的串行請求響應,變成並行的。併發
其中請求報文首部又分爲app
響應報文首部又包含:webapp
壓縮傳輸
gzip
compress
deflate
identity(不進行編碼)
Chunked Transfer Coding
multipart/form-data
multipart/byterabge
boundary=xxx
能夠套嵌使用
斷點重連
Range: bytes=5001-10000
Accept
Accept-Charset
Accept-Encoding
Accept-Language
Content-Language
服務器驅動協商
客戶端驅動協商
透明協商
RFC2616定義的狀態碼40種,WebDAV 擴展了一些狀態碼
WebDAV(Web-based Distributed Authoring and Versioning, 基於萬維網的分佈式創做和版本控制),至關於http/1.1的加強版,主要用於操做文件,好比網盤場景。
一個服務器應用(如一個Tomcat)如何部署多個不一樣域名的web站點嗎,而且端口都是默認端口?
首先DNS確定要爲主機IP綁定兩個域名,
當請求進入Tomcat中後如何區分這兩個域名呢?經過請求頭Host字段的域名來區分,Tomcat的server.xml的<Host>標籤須要配置
<Host name="www.111.com" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Context path="" docBase="onefolder" debug="0" reloadable="true" /> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> <Host name="www.222.com" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Context path="" docBase="twofolder" debug="0" reloadable="true" /> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host>
代理:接收請求後轉發給其餘服務器(不改變請求的URI?)
網關:與代理的功能很類似,也是轉發請求。主要區別是網關能夠改變請求的URI,使用非http協議請求後續的服務器。
隧道:在請求端與遠距離的服務器創建安全的傳輸通道。
能夠經過哪些特徵證實本身呢?
HTTP使用的認證方式
Windows的統一認證:Kerberos認證、NTLM認證
原理:
缺點:
用戶密碼是明文傳輸,極不安全。
原理:不直接傳輸用戶名密碼,而是作散列以後進行傳輸。
須要客戶端安裝證書
原理:
SSL客戶端認證採用雙因素認證:加上了表單認證
自實現的表單認證方式
經過Cookie保存Session_Id, 注意要將此Cookie加上httponly 屬性,防止跨站腳本攻擊XSS。
Session_Id是與用戶密碼關聯的。
用戶密碼的保存注意要salt+hash後保存,salt最好隨機生成,這樣能夠保證相同密碼的密文密碼也是不一樣的,更難以破解。
經過延遲應答來模擬服務器推送的功能。
缺點是顯而易見的,須要保持鏈接不斷,會消耗更多的資源。
Google在2010年發佈了SPDY,旨在解決HTTP的性能瓶頸,縮短頁面加載時間。那麼,HTTP有哪些瓶頸呢?
修改HTTP協議自己!
SPDY沒有徹底改寫HTTP,而是在HTTP和SSL之間加入了一層SPDY層,能夠稱爲會話層。
主要的功能:
須要瀏覽器和Web服務器作出相應的調整。
SPDY只是將單個域名的通訊進行了多路複用,當一個網站上使用多個域名下的資源時,改善效果會打折扣。
WebSocket 是Web瀏覽器與Web服務器之間全雙工通訊標準。
WebSocket也是創建在HTTP基礎上的協議,所以鏈接的發起方任然是客戶端,一旦創建鏈接,就能夠雙向發送數據了!
特色:
過程:
握手-請求:須要添加幾個請求頭。
握手-響應:
經過HTTP創建WebSocket鏈接以後,再也不使用HTTP的數據幀,而是使用WebSocket獨立的數據幀!!格式:ws://xxx.com/xxx
WebSocket API
js能夠調用此API。
var socket = new WebSocket('ws://example.com:8080/updates'); socket.onopen = function(){ setInterval(function(){ if(socket.bufferedAmount == 0){ socket.send(getUpdateData()); } }); }
WebDAV是基於萬維網的分佈式創做和版本控制,用於文件操做,好比網盤。
原理:擴展了HTTP/1.1
增長了一些概念:集合、資源、屬性、鎖
添加了一些方法Method,與GET/POST同級
擴展了一些狀態碼: