HTTP是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫。它的發展是萬維網協會(World Wide Web Consortium)和Internet工做小組IETF(Internet Engineering Task Force)合做的結果,(他們)最終發佈了一系列的RFC,RFC 1945定義了HTTP/1.0版本。其中最著名的就是RFC 2616。RFC 2616定義了今天廣泛使用的一個版本--HTTP 1.1。爲記念Tim Berners-Lee提出HTTP後對互聯網發展的貢獻,萬維網協會保留有他最原始提交的版本。javascript
HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是用於從WWW服務器傳輸超文本到本地瀏覽器的傳送協議。它可使瀏覽器更加高效,使網絡傳輸減小。它不只保證計算機正確快速地傳輸超文本文檔,還肯定傳輸文檔中的哪一部分,以及哪部份內容首先顯示(如文本先於圖形)等。html
HTTP是一個應用層協議,由請求和響應構成,是一個標準的客戶端服務器模型。HTTP是一個無狀態的協議。java
摺疊特色web
HTTP協議的主要特色可歸納以下:瀏覽器
一、支持客戶/服務器模式。支持基本認證和安全認證(見後文《安全協議》)。安全
二、 簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法經常使用的有GET、HEAD、POST。每種方法規定了客戶與服務器聯繫的類型不一樣。因爲HTTP協議簡單,使得HTTP服務器的程序規模小,於是通訊速度很快。服務器
三、靈活:HTTP容許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。網絡
四、HTTP 0.9和1.0使用非持續鏈接:限制每次鏈接只處理一個請求,服務器處理完客戶的請求,並收到客戶的應答後,即斷開鏈接。採用這種方式能夠節省傳輸時間。ide
HTTP 1.1使用持續鏈接:沒必要爲每一個web對象建立一個新的鏈接,一個鏈接能夠傳送多個對象。函數
五、無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺乏狀態意味着若是後續處理須要前面的信息,則它必須重傳,這樣可能致使每次鏈接傳送的數據量增大。
TCP/IP協議
TCP/IP模型也被稱做DoD模型(Department of Defense Model)。TCP/IP字面上表明了兩個協議:TCP(傳輸控制協議)和IP(網際協議)。1983年1月1日,在因特網的前身(ARPA網)中,TCP/IP協議取代了舊的網絡控制協議(NCP,Network Control Protocol),從而成爲今天的互聯網的基石。
層次概述
TCP/IP協議不是TCP和IP這兩個協議的合稱,而是指因特網整個TCP/IP協議族。
從協議分層模型方面來說,TCP/IP由四個層次組成:網絡接口層、網絡層、傳輸層、應用層。
TCP/IP協議並不徹底符合OSI的七層參考模型,OSI(Open System Interconnect)是傳統的開放式系統互連參考模型,是一種通訊協議的7層抽象的參考模型,其中每一層執行某一特定任務。該模型的目的是使各類硬件在相同的層次上相互通訊。這7層是:物理層、數據鏈路層(網絡接口層)、網絡層(網絡層)、傳輸層、會話層、表示層和應用層(應用層)。而TCP/IP通信協議採用了4層的層級結構,每一層都呼叫它的下一層所提供的網絡來完成本身的需求。因爲ARPANET的設計者注重的是網絡互聯,容許通訊子網(網絡接口層)採用已有的或是未來有的各類協議,因此這個層次中沒有提供專門的協議。實際上,TCP/IP協議能夠經過網絡接口層鏈接到任何網絡上,例如X.25交換網或IEEE802局域網。
TCP/IP結構對應OSI結構
TCP/IP
OSI
應用層
應用層
表示層
會話層
主機到主機層(TCP)(又稱傳輸層)
傳輸層
網絡層(IP)(又稱互聯層)
網絡層
網絡接口層(又稱鏈路層)
數據鏈路層
物理層
摺疊網絡接口層
物理層是定義物理介質的各類特性:
一、機械特性;
二、電子特性;
三、功能特性;
四、規程特性。
數據鏈路層是負責接收IP數據包並經過網絡發送,或者從網絡上接收物理幀,抽出IP數據包,交給IP層。
常見的接口層協議有:
Ethernet 802.三、Token Ring 802.五、X.2五、Frame relay、HDLC、PPP ATM等。
摺疊網絡層
負責相鄰計算機之間的通訊。其功能包括三方面。
1、處理來自傳輸層的分組發送請求,收到請求後,將分組裝入IP數據報,填充報頭,選擇去往信宿機的路徑,而後將數據報發往適當的網絡接口。
2、處理輸入數據報:首先檢查其合法性,而後進行尋徑--假如該數據報已到達信宿機,則去掉報頭,將剩下部分交給適當的傳輸協議;假如該數據報還沒有到達信宿,則轉發該數據報。
3、處理路徑、流控、擁塞等問題。
網絡層包括:IP(Internet Protocol)協議、ICMP(Internet Control Message Protocol)
控制報文協議、ARP(Address Resolution Protocol)地址轉換協議、RARP(Reverse ARP)反向地址轉換協議。
IP是網絡層的核心,經過路由選擇將下一條IP封裝後交給接口層。IP數據報是無鏈接服務。
ICMP是網絡層的補充,能夠回送報文。用來檢測網絡是否通暢。
Ping命令就是發送ICMP的echo包,經過回送的echo relay進行網絡測試。
ARP是正向地址解析協議,經過已知的IP,尋找對應主機的MAC地址。
RARP是反向地址解析協議,經過MAC地址肯定IP地址。好比無盤工做站還有DHCP服務。
摺疊傳輸層
提供應用程序間的通訊。其功能包括:1、格式化信息流;2、提供可靠傳輸。爲實現後者,傳輸層協議規定接收端必須發回確認,而且假如分組丟失,必須從新發送,即耳熟能詳的"三次握手"過程,從而提供可靠的數據傳輸。
傳輸層協議主要是:傳輸控制協議TCP(Transmission Control Protocol)和用戶數據報協議UDP(User Datagram protocol)。
摺疊應用層
向用戶提供一組經常使用的應用程序,好比電子郵件、文件傳輸訪問、遠程登陸等。遠程登陸TELNET使用TELNET協議提供在網絡其它主機上註冊的接口。TELNET會話提供了基於字符的虛擬終端。文件傳輸訪問FTP使用FTP協議來提供網絡內機器間的文件拷貝功能。
應用層協議主要包括以下幾個:FTP、TELNET、DNS、SMTP、RIP、NFS、HTTP。
FTP(File Transfer Protocol)是文件傳輸協議,通常上傳下載用FTP服務,數據端口是20H,控制端口是21H。
Telnet服務是用戶遠程登陸服務,使用23H端口,使用明碼傳送,保密性差、簡單方便。
DNS(Domain Name Service)是域名解析服務,提供域名到IP地址之間的轉換。
SMTP(Simple Mail Transfer Protocol)是簡單郵件傳輸協議,用來控制信件的發送、中轉。
RIP (Router Information Protocol)是路由信息協議,用於網絡設備之間交換路由信息。
NFS (Network File System)是網絡文件系統,用於網絡中不一樣主機間的文件共享。
HTTP(Hypertext Transfer Protocol)是超文本傳輸協議,用於實現互聯網中的WWW服務。
總結
OSI中的層
功能
TCP/IP協議族
應用層
文件傳輸,電子郵件,文件服務,虛擬終端
TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等
表示層
數據格式化,代碼轉換,數據加密
沒有協議
會話層
解除或創建與別的接點的聯繫
沒有協議
傳輸層
提供端對端的接口
TCP,UDP
網絡層
爲數據包選擇路由
IP,ICMP,OSPF,EIGRP,IGMP,RIP
數據鏈路層
傳輸有地址的幀以及錯誤檢測功能
SLIP,CSLIP,PPP,MTU,ARP,RARP
物理層
以二進制數據形式在物理媒體上傳輸數據
ISO2110,IEEE802,IEEE802.2
網絡層中的協議主要有IP,ICMP,IGMP等,因爲它包含了IP協議模塊,因此它是全部基於TCP/IP協議網絡的核心。在網絡層中,IP模塊完成大部分功能。ICMP和IGMP以及其餘支持IP的協議幫助IP完成特定的任務,如傳輸差錯控制信息以及主機/路由器之間的控制電文等。網絡層掌管着網絡中主機間的信息傳輸。
傳輸層上的主要協議是TCP和UDP。正如網絡層控制着主機之間的數據傳遞,傳輸層控制着那些將要進入網絡層的數據。兩個協議就是它管理這些數據的兩種方式:TCP是一個基於鏈接的協議;UDP則是面向無鏈接服務的管理方式的協議。
TCP/IP模型的主要缺點有:
第一,它在服務、接口與協議的區別上就不是很清楚。一個好的軟件工程應該將功能與實現方法區分開來,TCP/IP偏偏沒有很好地作到這點,就使得TCP/IP參考模型對於使用新的技術的指導意義是不夠的。TCP/IP參考模型不適合於其餘非TCP/IP協議簇。
第二,主機-網絡層自己並非實際的一層,它定義了網絡層與數據鏈路層的接口。物理層與數據鏈路層的劃分是必要和合理的,一個好的參考模型應該將它們區分開,而TCP/IP參考模型卻沒有作到這點。
摺疊編輯本段數據格式
數據幀:幀頭+IP數據包+幀尾 (幀頭包括源和目標主機MAC地址及類型,幀尾是校驗字)
IP數據包:IP頭部+TCP數據信息(IP頭包括源和目標主機IP地址、類型、生存期等)
TCP數據信息:TCP頭部+實際數據 (TCP頭包括源和目標主機端口號、順序號、確認號、校驗字等)
3次握手
開放分類:網絡網絡通信計算機
3次握手,別稱TCP握手協議,是計算機傳輸協議。
編輯摘要
TCP三次握手及原理
TCP/IP是不少的不一樣的協議組成,其實是一個協議組,TCP用戶數據報表協議(也稱做TCP傳輸控制協議,Transport Control Protocol。可靠的主機到主機層協議。這裏要先強調一下,傳輸控制協議是OSI網絡的第四層的叫法,TCP傳輸控制協議是TCP/IP傳輸的6個基本協議的一種。兩個TCP意思非相同。 )。TCP是一種可靠的 面向鏈接的傳送服務。它在傳送數據時是分段進行的,主機交換數據必須創建一個會話。它用比特流通訊,即數據被做爲無結構的字節流。 經過每一個TCP傳輸的字段指定順序號,以得到可靠性。是在OSI參考模型中的第四層,TCP是使用IP的網間互聯功能而提供可靠的數據傳輸,IP不停的把報文放到 網絡上,而TCP是負責確信報文到達。在協同IP的操做中TCP負責:握手過程、報文管理、流量控制、錯誤檢測和處理(控制),能夠根據必定的編號順序對非正常順序的報文給予重新排列順序。關於TCP的RFC文檔有RFC79三、RFC79一、RFC1700。
在TCP會話初期,有所謂的「三握手」:對每次發送的數據量是怎樣跟蹤進行協商使數據段的發送和接收同步,根據所接收到的數據量而肯定的數據確認數及數據發送、接收完畢後什麼時候撤消聯繫,並創建虛鏈接。爲了提供可靠的傳送,TCP在發送新的數據以前,以特定的順序將數據包的序號,並須要這些包傳送給目標機以後的確認消息。TCP老是用來發送大批量的數據。當應用程序在收到數據後要作出確認時也要用到TCP。因爲TCP須要時刻跟蹤,這須要額外開銷,使得TCP的格式有些顯得複雜。
RFC 1994詳細定義了CHAP。
CHAP 用於使用3次握手週期性的驗證對端身份。在鏈路創建初始化時這樣作,也能夠在鏈路創建後任什麼時候間重複驗證。
在鏈路創建完成後,驗證者向對端發送一個「challenge」信息。
對端使用一個「one-way-hash」函數計算出的值響應這個信息。
驗證者使用本身計算的hash值校驗響應值。若是兩個值匹配,則驗證是認可得,不然鏈接應該終止。
在隨機時間,驗證端發送一個「challenge」給對端,重複1到3步。
TCP採用三次握手協議創建鏈接的過程
TCP鏈接的創建採用三次握手協議。三次握手的具體過程是:第一方向另外一方發送鏈接請求段,另外一方迴應對鏈接請求的確認段,第一方再發送對對方確認段的確認。過程如圖。
圖中SYN爲請求創建鏈接的標誌,三次握手的過程以下:
在T1時刻,A向B發送請求創建鏈接段序列號爲X。
在T2時刻,B發送應答A的X序列號的請求創建鏈接的段,該應答段的序列號爲Y。
在T3時刻,A發送對B的應答段的應答,應答號爲Y+1,代表應答號爲Y+1的段已接收。
至此,鏈接創建成功。
window.onclick:
一、最簡單的調用方式
直接寫到html的body標籤裏面,如:
<html>
<body onload="func()">
</body>
</html>
二、在JS語句調用
<script type="text/javascript">
function func(){……}
window.onload=func;
</script>
三、同時 調用多個函數
直接寫到html的body標籤裏面,如:
<html>
<body onload="func1();func2();func3();">
</body>
</html>
四、js調用多個函數,如下這種調用方式能夠用於不太複雜的JS程序中,若是程序函數不少,邏輯比較複雜,能夠考慮用第五種方式。
複製代碼
複製代碼
<script type="text/javascript">
function func1(){……}
function func2(){……}
function func3(){……}
window.onload=function(){
func1();
func2();
func3();
}
</script>
複製代碼
複製代碼
五、JS自定義函數式屢次調用
複製代碼複製代碼<script type="text/javascript"> function func1(){……} function func2(){……} function func3(){……} function addLoadEvent(func){ var oldonload=window.onload; if(typeof window.onload!="function"){ window.onload=func; } else{ window.onload=function(){ oldonload(); func(); } } } addLoadEvent(func1); addLoadEvent(func2); addLoadEvent(func3); </script>