HTTP協議
基本概念
- HTTP協議(超文本傳輸協議 HyperText Transfer Protocol):是用於從WWW服務器傳輸超文本到本地瀏覽器的傳送協議。它不僅保證計算機正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪一部分,以及哪部分內容首先顯示等。
- HTTP是一個應用層協議,由請求和響應構成,是一個標准的客戶端服務模型。HTTP是一個無狀態的協議,同一個客戶端的這次請求和上次請求是沒有對應關系的。
- 默認HTTP的端口為80;HTTPS的端口號為443。
- HTTP協議永遠是客戶端發起請求,服務器回送響應。
- FTP:文本傳輸協議。
HTTP事務工作過程
- 一個HTTP操作稱為一個事務,工作過程分為如下四步:
- 首先客戶端與服務器需要建立連接。只要單擊某個超級鏈接,HTTP的工作開始。
- 建立連接后,客戶端發送一個請求給服務器。請求方式的格式為:統一資源標識符(URI)、協議版本號、MIME信息(包括請求修飾符、客戶端信息和可能的內容)
- 服務器接到請求后,給予相應的響應信息。
- 客戶端接收到服務器所返回的信息,通過瀏覽器顯示在用戶的顯示屏上,然后客戶端與服務器斷開連接。
HTTP的優點
- 簡單快捷。HTTP協議簡單、通信速度很快
- 靈活。HTTP協議允許傳輸任意類型的數據
- 短連接。HTTP協議限制每次連接只處理一個請求,服務器對客戶端的請求作出響應后,馬上斷開連接。這種傳輸方式可以節省傳輸時間。
TCP連接——三次握手
- 建立一個TCP連接需要經過“三次握手”。TCP三次握手具體過程如下:
- 第一次握手:客戶端發送syn包(syn=j)到服務器,並進入SYN_SEND狀態。等待服務器確認。
- 第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態。
- 第三次握手:客戶端接收到服務器的SYN_ACK包,向服務器發送確認包ACK(ack=k+1),包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。
- **握手過程中,傳送的包里不包含數據,三次握手完畢后,客戶端與服務器正式開始傳送數據。理想狀態下,TCP連接一旦建立,在通信雙方中的任何一方主動關閉連接之前,TCP連接都將被一直保持下去。斷開連接時服務器和客戶端均可以主動發起斷開TCP連接的請求,斷開過程需要經過“四次握手”。**
- **SYN(synchronous)是TCP建立連接時使用的握手信號;ACK(acknowledge)即確認字符,在數據通信中,接收站發給發送站的一種傳輸類控制字符,表示發來的數據已確認接收無誤。**
- 如果兩次握手會怎么樣呢?
理解題意:就是客戶端為什么還要發送一次確認呢?
答:為了防止已經失效的連接請求報文又突然傳送到了服務器,而產生錯誤。假設一種異常,客戶端發出的請求由於網絡阻塞沒有及時到達服務器,后又重傳請求,之后服務器相應了,切建立了連接,之后連接又釋放了。此時假設客戶端發出的第一個請求到達服務器,服務器誤以為是客戶端再次請求連接,服務器建立連接,如果采用兩次握手,此時連接建立,而客戶端又不發送數據,浪費了服務器的資源。
四次握手
- 與建立連接的“三次握手”類似,斷開一個TCP連接則需要“四次握手”。
- 第一次握手:主動關閉方發送一個FIN,用來關閉主動方到被動關閉方的數據傳送,也就是主動關閉方告訴被動關閉方:我已經不會再給你發送數據了。
- 第二次握手:被動關閉方接收到FIN包后,發送一個ACK給對方,確認序號為收到序列+1。
- 第三次握手:被動關閉方發送一個FIN,用來關閉被動關閉方到主動關閉方的數據傳送,也就是告訴主動關閉方,我的數據也發送完了,不會再給你發數據了。
- 第四次握手:主動關閉方收到FIN后,發送一個ACK給被動關閉方,確認序列為收到序列號+1。至此,完成四次握手。
HTTP請求方式
- 常用的請求方式:GET/POST
- GET方式:是以實體的方式得到由請求URI所指定資源的信息。
- POST方式:用來向目的服務器發出請求,要求它接受被附在請求后的實體。
cookie、session異同
- 相同點:它們都是為了用來保存狀態信息,都是保存客戶端狀態的機制,都是為了解決HTTP無狀態的問題。
- 不同點:
- cookie將狀態保存在客戶端;session將狀態保存在服務器;
- cookies是服務器在本地機器上存儲的小段文本,並隨每一個請求發送至同一個服務器。網絡服務器用HTTP頭向客戶端發送cookies,在客戶終端,瀏覽器解析這些cookies並將它們保存為一個本地文本,它會自動地將同一服務器的任何請求縛上這些cookies。session並沒有字HTTP的協議中定義;
- session是針對每一個用戶的,變量的值保存在服務器上,用一個sessionID里區分是哪個用戶session變量,這個值是通過用戶的瀏覽器在訪問的時候返回給服務器的。當用戶禁用cookie時,這個值也可以設置為由get來返回給服務器。
- 對於安全性。在服務的的session機制更安全些。因為它不會任意讀取客戶存儲的信息。
HTTPS
- HTTPS:是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL。
TCP/IP、HTTP的區別
- TCP/IP協議(Transmission Control Protocol/Internet Protocol):是傳輸層協議。主要解決數據如何在網絡中傳輸。
- HTTP:是請求響應模式,是應用層協議。主要解決如何包裝數據。
- Web使用HTTP協議作為應用層協議,以封裝http文本信息,然后使用TCP/IP做傳輸層協議將它發送到網絡上。HTTP是利用TCP在兩台電腦(通常是web服務器和客戶端)之間傳輸信息的協議。
- HTTP協議是建立在TCP協議基礎之上的。當瀏覽器需要從服務器獲取網頁數據時,會發出一次HTTP請求。HTTP會通過TCP建立一個到服務器的連接通道,當本次請求需要的數據完畢后,HTTP會立即將TCP連接斷開。
- HTTP連接最顯著的特點是:客戶端發送的每次請求都需要服務器回送響應,在請求結束后,會主動釋放連接。從建立連接到關閉連接的過程為“一次連接”。
- TCP就是單純建立連接,不涉及任何我們需要請求的實際數據,是簡單的傳輸。HTTP是用來收發數據的。
- TCP/IP協議是一個協議集合。TCP/IP協議按照層次分為以下四層:應用層、傳輸層、網絡層、數據鏈路層。分層的目的是:一個層只負責一個層次的問題,只要維護好這個層次就可以了。
狀態碼
- 1**類狀態碼:Information狀態碼,表示信息正在處理。
- 2**類狀態碼:Success狀態碼,表示請求正常完成。
- 3**類狀態碼:Redirection狀態碼,表示需要客戶端進行附加操作(如跳轉、重定向)。
- 4**類狀態碼:Error狀態碼,通常是由於客戶端的錯誤導致的。
- 5**類狀態碼:SeverError狀態碼,通常是服務端的錯誤導致的。
**狀態碼分為客戶端錯誤狀態碼、服務端錯誤狀態碼、成功狀態碼、重定向狀態碼等。**
本博客內容為原創,版權所有違者必究,轉載請注明來源 http://www.cnblogs.com/sunshine-blog/