HTML5 如今已經不是 SGML 的子集,主要是關於圖像,位置,存儲,多任務等功能的增長。javascript
給不想要提示的 form 或下某個input 設置爲 autocomplete=off。
css
調用localstorge、cookies等本地存儲方式
html
*iframe會阻塞主頁面的Onload事件;
html5
*iframe和主頁面共享鏈接池,而瀏覽器對相同域的鏈接有限制,因此會影響頁面的並行加載。 使用iframe以前須要考慮這兩個缺點。若是須要使用iframe,最好是經過javascript 動態給iframe添加src屬性值,這樣能夠能夠繞開以上兩個問題。
java
iframes 提供了一個簡單的方式把一個網站的內容嵌入到另外一個網站中。但咱們須要慎重的使用iframe。iframe的建立比其它包括scripts和css的 DOM 元素的建立慢了 1-2 個數量級。node
主要問題是:onload 事件以及鏈接池(connection pool)。web
美國前 10 大網站都使用了 iframe。大部分狀況下,他們用它來加載廣告。ajax
http://www.williamlong.info/archives/3136.htmlcanvas
瀏覽器的併發請求數目限制是針對同一域名的。
意即,同一時間針對同一域名下的請求有必定數量限制。超過限制數目的請求會被阻塞瀏覽器
具體不一樣瀏覽器這個限制的數目
Websocket實際上是一個新協議,跟HTTP協議基本沒有關係,只是爲了兼容現有瀏覽器的握手規範而已,也就是說它是HTTP協議上的一種補充,有交集,可是並非所有。
HTTP的生命週期經過Request來界定,也就是一個Request 一個Response,那麼在HTTP1.0中,此次HTTP請求就結束了。在HTTP1.1中進行了改進,使得有一個keep-alive,也就是說,在一個HTTP鏈接中,能夠發送多個Request,接收多個Response。可是請記住 Request = Response , 在HTTP中永遠是這樣,也就是說一個request只能有一個response。並且這個response也是被動的,不能主動發起。
Websocket是基於HTTP協議的,或者說借用了HTTP的協議來完成一部分握手。在握手階段是同樣的。咱們來看個典型的Websocket握手
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade // update connection告訴服務器我要發起websocket協議,是websocket的核心
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== // sec-websocket-key是一個base64 encode的值,是瀏覽器隨機生成的,告訴服務器我要驗證是否是真的websocket助理
Sec-WebSocket-Protocol: chat, superchat // 用戶定義的字符串,用來區分同URL下,不一樣的服務所須要的協議
Sec-WebSocket-Version: 13 // 告訴服務器所使用的websocket draft協議版本
Origin: http://example.com
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat
至此,HTTP已經完成它全部工做了,接下來就是徹底按照Websocket協議進行了。
從上面能夠看出其實這兩種方式,都是在不斷地創建HTTP鏈接,而後等待服務端處理,能夠體現HTTP協議的另一個特色,被動性。何爲被動性呢,其實就是,服務端不能主動聯繫客戶端,只能有客戶端發起。簡單地說就是,服務器是一個很懶的冰箱(不會、不能主動發起鏈接),可是上司有命令,若是有客戶來,無論多麼累都要好好接待。
從上面很容易看出來,無論怎麼樣,上面這兩種都是很是消耗資源的。
ajax輪詢 須要服務器有很快的處理速度和資源。(速度)
long poll 須要有很高的併發,也就是說同時接待客戶的能力。(場地大小)
因此ajax輪詢 和long poll 都有可能發生這種狀況。
經過上面這個例子,咱們能夠看出,這兩種方式都不是最好的方式,須要不少資源。一種須要更快的速度,一種須要更多的'電話'。這兩種都會致使'電話'的需求愈來愈高。
HTTP仍是一個無狀態協議。通俗的說就是,服務器由於天天要接待太多客戶了,是個健忘鬼,你一掛電話,他就把你的東西全忘光了,把你的東西全丟掉了。你第二次還得再告訴服務器一遍。
1)在瀏覽器上使用websocket 以前要先判斷下瀏覽器是否支持websocket。
window.WebSocket = window.WebSocket || window.MozWebSocket; if (!window.WebSocket){ alert("WebSocket not supported by this browser"); return; }
2) 接着就能夠建立一個Socket實例
var mySocket = new WebSocket(URL, [protocols]);
URL有兩種格式「ws://」與加密的「 wss://」,protocols是可選的子協議
var websocket = new WebSocket("ws://127.0.0.1:8080/alarm/alarmServer");
3) WebSocket事件 onopen, onmessage, onclose, onerror
鏈接打開時,回調onopen方法,接收到後臺消息時會觸發到onmessage事件,後臺關閉時調用onclose,出現鏈接異常時可在onerror中捕獲websocket.onmessage = function(evt){ var data = evt.data; }
4) 方法 – send/close
發送消息 – WebSocket#send(data)
關閉鏈接 – WebSocket#close(optional code, optional reason)
websocket.send(JSON.stringify({action: "node.remove", id: "001"}));
狀態碼分爲5類:
100-199 用於指定客戶端相應的某些動做。
200-299 用於表示請求成功。
300-399 用於已經移動的文件而且常被包含在定位頭信息中指定新的地址信息。
400-499 用於指出客戶端的錯誤。
500-599 用於支持服務器錯誤。
--------------------------------------------------
200 (OK/正常)
200 (SC_OK)的意思是一切正常。通常用於相應GET和POST請求。這個狀態碼對servlet是缺省的;若是沒有調用setStatus方法的話,就會獲得200。
202 (Accepted/接受)
202 (SC_ACCEPTED)告訴客戶端請求正在被執行,但尚未處理完。
-------------------------------------------------
300 (Multiple Choices/多重選擇)
300 (SC_MULTIPLE_CHOICES)表示被請求的文檔能夠在多個地方找到,並將在返回的文檔中列出來。若是服務器有首選設置,首選項將會被列於定位響應頭信息中。
301 (Moved Permanently永久移除)
301 (SC_MOVED_PERMANENTLY)請求的URL已移走。Response中應該包含一個Location URL, 說明資源如今所處的位置
302 (Found/找到)
與狀態碼301相似。但這裏的移除是臨時的。 客戶端會使用Location中給出的URL,從新發送新的HTTP request
304 Not Modified(未修改)客戶的緩存資源是最新的, 要客戶端使用緩存
---------------------------------------------------
400(壞請求)
告訴客戶端,它發送了一個錯誤的請求。
401(未受權)
須要客戶端對本身認證
403(禁止)
請求被服務器拒絕了
404 Not Found 未找到資源
------------------------------------------------------
500(內部服務器錯誤)
501 Internal Server Error服務器遇到一個錯誤,使其沒法對請求提供服務
502(網關故障)
代理使用的服務器遇到了上游的無效響應
http://kb.cnblogs.com/page/168720/
「三次握手」:爲了準確無誤地把數據送達目標處,TCP
協議採用了三次握手策略。用TCP協議把數據包送出去後,TCP
不會對傳送 後的狀況置之不理,它必定會向對方確認是否成功送達。握手過程當中使用了TCP的標誌:SYN
和ACK
。
發送端首先發送一個帶SYN
標誌的數據包給對方。接收端收到後,回傳一個帶有SYN/ACK
標誌的數據包以示傳達確認信息。 最後,發送端再回傳一個帶ACK
標誌的數據包,表明「握手」結束。 若在握手過程當中某個階段莫名中斷,TCP
協議會再次以相同的順序發送相同的數據包。
「四次揮手」:
第一次揮手:主動關閉方發送一個FIN
,用來關閉主動方到被動關閉方的數據傳送,也就是主動關閉方告訴被動關閉方:我已經不 會再給你發數據了(固然,在fin包以前發送出去的數據,若是沒有收到對應的ack確認報文,主動關閉方依然會重發這些數據),可是,此時主動關閉方還可 以接受數據。
第二次揮手:被動關閉方收到FIN
包後,發送一個ACK
給對方,確認序號爲收到序號+1
(與SYN
相同,一個FIN
佔用一個序號)。
第三次揮手:被動關閉方發送一個FIN
,用來關閉被動關閉方到主動關閉方的數據傳送,也就是告訴主動關閉方,個人數據也發送完了,不會再給你發數據了。
第四次揮手:主動關閉方收到FIN
後,發送一個ACK
給被動關閉方,確認序號爲收到序號+1,至此,完成四次揮手。
TCP
(Transmission Control Protocol,傳輸控制協議)是基於鏈接的協議,也就是說,在正式收發數據前,必須和對方創建可靠的鏈接。一個TCP
鏈接必需要通過三次「對話」才能創建起來
UDP
(User Data Protocol,用戶數據報協議)是與TCP相對應的協議。它是面向非鏈接的協議,它不與對方創建鏈接,而是直接就把數據包發送過去! UDP適用於一次只傳送少許數據、對可靠性要求不高的應用環境。