瞭解HTTP瀏覽器
HTTP(HyperText Transfer Protocol)是一套計算機經過網絡進行通訊的規則。計算機專家設計出HTTP,使HTTP客戶(如Web瀏覽器)可以從HTTP服務器(Web服務器)請求信息和服務。緩存
HTTP 是一個網絡協議,是專門用來幫你傳輸 Web 內容安全
HTTPS HTTP 協議」和「SSL/TLS 協議」的組合。服務器
HTTP使用內容類型,是指Web服務器向Web瀏覽器返回的文件都有與之相關的類型。全部這些類型都被模型化,即Web服務器告訴Web瀏覽器該文件所具備的種類,是文檔、GIF格式圖像、聲音文件仍是應用程序。它們告訴瀏覽器應該如何處理Web服務器發送過來的各類內容類型。網絡
TCP 協議是 HTTP 協議的基石——HTTP 協議須要依靠 TCP 協議來傳輸數據。jsp
TCP 被稱爲「面向鏈接」的傳輸層協議。傳輸層主要有兩個協議,分別是 TCP 和 UDP。TCP 比 UDP 更可靠。編碼
有不少常見的應用層協議是以 TCP 爲基礎的,好比「FTP、SMTP、POP、IMAP」等。加密
HTTP 協議如何使用 TCP 鏈接:HTTP 對 TCP 鏈接的使用,分爲兩種方式:俗稱「短鏈接」和「長鏈接」(「長鏈接」又稱「持久鏈接」,洋文叫作「Keep-Alive」或「Persistent Connection」)spa
HTTP請求信息和響應信息的格式
請求:
(1)請求行
(2)請求頭信息
(3)請求主題信息(能夠沒有)
(4)頭信息結束後和主題信息之間要空一行
請求行又分3部分
請求方法 、請求路徑、所用的協議
請求 方法:GET、POST、PUT、DELETE、TRACE、OPTIONS
狀態碼,狀態文字
狀態碼是用來反服務器響應狀況
最多見的如200 OK,404 NOT FOUND
狀態文字是用來描述狀態碼的,便於人觀察。
HTTP響應中的狀態嗎
狀態碼 定義 說明
1xx 信息 接收到請求,繼續處理
2xx 成功 操做成功的收到,理解和接收
3xx 重定向 爲了完成請求,必須採起進一部措施
4xx 客戶端錯誤 請求的語法有錯誤或不能徹底被知足
5xx 服務端錯誤 服務器沒法完成明顯有效的請求
常見返回值
200 ---服務器成功返回網頁
301/2 --- 永久/臨時重定向
304 Not ---- 未修改 --取緩存
失敗的狀態碼
404 ---請求的網頁不存在
503 -- 服務器暫時不可用
500 ---服務器內部錯誤
「對稱加密技術」,意思就是說:「加密」和「解密」使用【相同的】密鑰。
「非對稱加密技術」,意思就是說:「加密」和「解密」使用【不一樣的】密鑰。
)「非對稱加密」能幹的事情比「對稱加密」要多。
HTTP通訊過程
HTTP通訊機制是在一次完整的HTTP通訊過程當中,Web瀏覽器與Web服務器之間將完成下列7個步驟:
一、創建TCP鏈接
在HTTP工做開始以前,Web瀏覽器首先要經過網絡與Web服務器創建鏈接,該鏈接是經過TCP來完成的,該協議與IP協議共同構建Internet,即著名的TCP/IP協議族,所以Internet又被稱做是TCP/IP網絡。HTTP是比TCP更高層次的應用層協議,根據規則,只有低層協議創建以後才能進行更深層協議的鏈接,所以,首先要創建TCP鏈接,通常TCP鏈接的端口號是80。
二、Web瀏覽器向Web服務器發送請求命令
一旦創建了TCP鏈接,Web瀏覽器就會向Web服務器發送請求命令
例如:GET/sample/hello.jsp HTTP/1.1。
三、 Web瀏覽器發送請求頭信息
瀏覽器發送其請求命令以後,還要以頭信息的形式向Web服務器發送一些別的信息,以後瀏覽器發送了一空白行來通知服務器,它已經結束了該頭信息的發送。
四、Web服務器應答
客戶機向服務器發出請求後,服務器會客戶機回送應答,
HTTP/1.1 200 OK
應答的第一部分是協議的版本號和應答狀態碼。
五、Web服務器發送應答頭信息
正如客戶端會隨同請求發送關於自身的信息同樣,服務器也會隨同應答向用戶發送關於它本身的數據及被請求的文檔。
六、Web服務器向瀏覽器發送數據
Web服務器向瀏覽器發送頭信息後,它會發送一個空白行來表示頭信息的發送到此爲結束,接着,它就以Content-Type應答頭信息所描述的格式發送用戶所請求的實際數據。
七、Web服務器關閉TCP鏈接
通常狀況下,一旦Web服務器向瀏覽器發送了請求數據,它就要關閉TCP鏈接,而後若是瀏覽器或者服務器在其頭信息加入了這行代碼
Connection:keep-alive
TCP鏈接在發送後將仍然保持打開狀態,因而,瀏覽器能夠繼續經過相同的鏈接發送請求。保持鏈接節省了爲每一個請求創建新鏈接所需的時間,還節約了網絡帶寬。
HTTP請求格式
當瀏覽器向Web服務器發出請求時,它向服務器傳遞了一個數據塊,也就是請求信息,HTTP請求信息由3部分組成:
請求方法URI協議/版本
請求頭(Request Header)
空行
請求正文
下面是一個HTTP請求的例子:
1GET/sample.jspHTTP/1.1
2Accept:image/gif.image/jpeg,*/* 3Accept-Language:zh-cn 4Connection:Keep-Alive 5Host:localhost 6User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0) 7Accept-Encoding:gzip,deflate 8username=jinqiao&password=1234
請求方法URI協議/版本
請求的第一行是「方法URL議/版本」:GET/sample.jsp HTTP/1.1
以上代碼中「GET」表明請求方法,「/sample.jsp」表示URI,「HTTP/1.1表明協議和協議的版本。
URL完整地指定了要訪問的網絡資源,一般只要給出相對於服務器的根目錄的相對目錄便可,所以老是以「/」開頭,最後,協議版本聲明瞭通訊過程當中使用HTTP的版本。
請求頭(Request Header)
請求頭包含許多有關的客戶端環境和請求正文的有用信息。例如,請求頭能夠聲明瀏覽器所用的語言,請求正文的長度等。
1Accept:image/gif.image/jpeg.*/* 2Accept-Language:zh-cn 3Connection:Keep-Alive 4Host:localhost 5User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0) 6Accept-Encoding:gzip,deflate.
請求正文
請求頭和請求正文之間是一個空行,這個行很是重要,它表示請求頭已經結束,接下來的是請求正文。請求正文中能夠包含客戶提交的查詢字符串信息:
username=jinqiao&password=1234
在以上的例子的HTTP請求中,請求的正文只有一行內容。固然,在實際應用中,HTTP請求正文能夠包含更多的內容。
HTTP請求方法
方法 |
描述 |
GET |
客戶端請求指定資源信息,服務器返回指定資源 |
HEAO |
只請求響應報文中的HTTP首部 |
POST |
將客戶端的數據提交到服務器 |
PUT |
用從客戶端向服務器傳送的數據取代指定文檔內容 |
DELETE |
請求服務器刪除Request-URI所表示的資源 |
MOVE |
請求服務器將指定的頁面移至另外一個網絡地址 |
這裏只討論GET方法與POST方法。
GET方法
GET方法是默認的HTTP請求方法,咱們平常用GET方法來提交表單數據,然而用GET方法提交的表單數據只通過了簡單的編碼,同時它將做爲URL的一部分向Web服務器發送,所以,若是使用GET方法來提交表單數據就存在着安全隱患上。
例如:Http://127.0.0.1/login.jsp?Name=zhangshi&Age=30&Submit=%cc%E+%BD%BB
從上面的URL請求中,很容易就能夠辯認出表單提交的內容。(?以後的內容)另外因爲GET方法提交的數據是做爲URL請求的一部分因此提交的數據量不能太大。
POST方法
POST方法是GET方法的一個替代方法,它主要是向Web服務器提交表單數據,尤爲是大批量的數據。POST方法克服了GET方法的一些缺點。經過POST方法提交表單數據時,數據不是做爲URL請求的一部分而是做爲標準數據傳送給Web服務器,這就克服了GET方法中的信息沒法保密和數據量過小的缺點。所以,出於安全的考慮以及對用戶隱私的尊重,一般表單提交時採用POST方法。
從編程的角度來說,若是用戶經過GET方法提交數據,則數據存放在QUERY_STRING環境變量中,而POST方法提交的數據則能夠從標準輸入流中獲取。