在 osi 七層模型中,http協議位於最頂層的應用層中。通過瀏覽器訪問網頁就直接使用了 http 協議。使用 http 協議時,客戶端首先與服務端的 80 埠建立乙個 tcp 連線,然後在這個連線的基礎上進行請求和應答,以及資料的交換。
http 有兩個常用版本,分別是 1.0 和 1.1。主要區別在於 http 1.0 中每次請求和應答都會使用乙個新的 tcp 連線,而從 http 1.1 開始,執行在乙個 tcp 連線上傳送多個命令和應答。因此大幅度減少了 tcp 連線的建立和斷開,提高了效率。
get是從伺服器上獲取資料,post是向伺服器傳送資料。
get是把引數資料佇列加到提交表單的action屬性所指的url中,值和表單內各個字段一一對應,在url中可以看到。post是通過http 的post機制,將表單內各個字段與其內容放置在html header內一起傳送到action屬性所指的url位址。使用者看不到這個過程。
對於get方式,伺服器端用request.querystring獲取變數的值,對於post方式,伺服器端用request.form獲取提交的資料。
get傳送的資料量較小,因為受url限制,不能大於2kb,但是效率高。
post傳送的資料量較大,一般被預設為不受限制,所以上傳檔案時只能用post。但理論上,iis4中最大量為80kb,iis5中為100kb。
get安全性非常低,因為url是可見的,可能會洩露私密資訊,如密碼等,post安全性較高。但是執行效率卻比post方法好。
get方式只能支援ascii字元,向伺服器傳的中文字元可能會亂碼。
post支援標準字符集,可以正確傳遞中文字元。
get請求可以被快取,可以被收藏為書籤,但 post 不行。
get請求會保留在瀏覽器的歷史記錄中,post 不會。
so:
1、get方式的安全性較post方式要差些,包含機密資訊的話,建議用post資料提交方式;
2、在做資料查詢時,建議用get方式;而在做資料新增、修改或刪除時,建議用post方式
ps:post 請求僅比 get 請求略安全一點,它的資料不在 url 中,但依然以明文的形式存放於 http 的請求頭中。
請求報文包含三部分:
響應報文包含三部分:
200:請求被正常處理
204:請求被受理但沒有資源可以返回
206:客戶端只是請求資源的一部分,伺服器只對請求的部分資源執行get方法,相應報文中通過content-range指定範圍的資源。
301:永久性重定向
302:臨時重定向
303:與302狀態碼有相似功能,只是它希望客戶端在請求乙個uri的時候,能通過get方法重定向到另乙個uri上
304:傳送附帶條件的請求時,條件不滿足時返回,與重定向無關
307:臨時重定向,與302類似,只是強制要求使用post方法
400:請求報文語法有誤,伺服器無法識別
401:請求需要認證
403:請求的對應資源禁止被訪問
404:伺服器無法找到對應資源
500:伺服器內部錯誤
503:伺服器正忙
通用首部字段(請求報文與響應報文都會使用的首部字段)
date:建立報文時間
connection:連線的管理
cache-control:快取的控制
transfer-encoding:報文主體的傳輸編碼方式
請求首部字段(請求報文會使用的首部字段)
host:請求資源所在伺服器
accept:可處理的**型別
accept-charset:可接收的字符集
accept-encoding:可接受的內容編碼
accept-language:可接受的自然語言
響應首部字段(響應報文會使用的首部字段)
accept-ranges:可接受的位元組範圍
location:令客戶端重新定向到的uri
server:http伺服器的安裝資訊
實體首部字段(請求報文與響應報文的的實體部分使用的首部字段)
allow:資源可支援的http方法
content-type:實體主類的型別
content-encoding:實體主體適用的編碼方式
content-language:實體主體的自然語言
content-length:實體主體的的位元組數
content-range:實體主體的位置範圍,一般用於發出部分請求時使用
建立起客戶機和伺服器連線。
建立連線後,客戶機傳送乙個請求給伺服器。
伺服器收到請求給予響應資訊。
4.客戶端瀏覽器將返回的內容解析並呈現,斷開連線。
http通訊機制是在一次完整的http通訊過程中,web瀏覽器與web伺服器之間將完成下列7個步驟:
建立tcp連線->傳送請求行->傳送請求頭->(到達伺服器)傳送狀態行->傳送響應頭->傳送響應資料->斷tcp連線
在http工作開始之前,web瀏覽器首先要通過網路與web伺服器建立連線,該連線是通過tcp來完成的,該協議與ip協議共同構建 internet,即著名的tcp/ip協議族,因此internet又被稱作是tcp/ip網路。http是比tcp更高層次的應用層協議,根據規則, 只有低層協議建立之後才能,才能進行更層協議的連線,因此,首先要建立tcp連線,一般tcp連線的埠號是80。
一旦建立了tcp連線,web瀏覽器就會向web伺服器傳送請求命令。例如:get /sample/hello.jsp http/1.1。
瀏覽器傳送其請求命令之後,還要以頭資訊的形式向web伺服器傳送一些別的資訊,之後瀏覽器傳送了一空白行來通知伺服器,它已經結束了該頭資訊的傳送。
客戶機向伺服器發出請求後,伺服器會客戶機回送應答, http/1.1 200 ok ,應答的第一部分是協議的版本號和應答狀態碼。
正如客戶端會隨同請求傳送關於自身的資訊一樣,伺服器也會隨同應答向使用者傳送關於它自己的資料及被請求的文件。
web伺服器向瀏覽器傳送頭資訊後,它會傳送乙個空白行來表示頭資訊的傳送到此為結束,接著,它就以content-type應答頭資訊所描述的格式傳送使用者所請求的實際資料。
一般情況下,一旦web伺服器向瀏覽器傳送了請求資料,它就要關閉tcp連線,然後如果瀏覽器或者伺服器在其頭資訊加入了這行**:
connection:keep-alive
tcp連線在傳送後將仍然保持開啟狀態,於是,瀏覽器可以繼續通過相同的連線傳送請求。保持連線節省了為每個請求建立新連線所需的時間,還節約了網路頻寬。
http 是一種無狀態的連線,客戶端每次讀取 web頁面時,伺服器都會認為這是一次新的會話。但有時候我們又需要持久保持某些資訊,比如登入時的使用者名稱、密碼,使用者上一次連線時的資訊等。這些資訊就由 cookie 和 session 儲存。
cookie實際上是一小段文字資訊。客戶端請求伺服器,如果伺服器需要記錄該使用者狀態,就使用response向客戶端瀏覽器頒發乙個cookie,客戶端瀏覽器會把cookie儲存起來,當瀏覽器再次請求訪問該**時,瀏覽器把請求的**連同該cookie一同提交給伺服器,伺服器檢查該cookie,以此來辨認使用者狀態。
簡單來說,cookie的工作原理可總結如下:
1,client連線server
2,client生成cookie(有效期),再次訪問時攜帶cookie
3, server根據cookie的資訊識別使用者身份
session是伺服器端使用的一種記錄客戶端狀態的機制,使用上比cookie簡單一些。同乙個客戶端每次和服務端互動時,不需要每次都傳回所有的 cookie 值,而是只要傳回乙個 id,這個 id 是客戶端第一次訪問伺服器的時候生成的,而且每個客戶端是唯一的。這樣每個客戶端就有了乙個唯一的 id,客戶端只要傳回這個 id 就行了,這個 id 通常是 name為 jsesionid 的乙個 cookie。session依據這個id來識別是否為同一使用者(只認id不認人)。
cookie資料存放在客戶的瀏覽器上,session資料放在伺服器上。
cookie不是很安全,別人可以分析存放在本地的cookie並進行cookie欺騙
考慮到安全應當使用session。
session會在一定時間內儲存在伺服器上。當訪問增多,會比較占用你伺服器的效能
考慮到減輕伺服器效能方面,應當使用cookie。
單個cookie儲存的資料不能超過4k,很多瀏覽器都限制乙個站點最多儲存20個cookie。
HTTP相關面試題
一 一次完整的http請求的7個步驟鏈結 瀏覽器與伺服器建立tcp 瀏覽器像伺服器傳送請求行 瀏覽器像伺服器傳送請求頭 伺服器應答返回狀態行 伺服器返回響應頭 伺服器傳送資料 伺服器斷開tcp鏈結 五 同步與非同步的區別 1.同步是阻塞模式,非同步是費阻塞模式 2.同步是指傳送乙個請求,需要等待返回...
Http 相關面試題
1 問題 在瀏覽器位址列鍵入url,按下回撤之後經歷的流程 答案 1 dns解析 2 tcp連線 3 發起http請求 4 伺服器處理請求並返回http報文 5 瀏覽器解析渲染頁面 6 連線結束 問題 http 狀態碼 五種可能取值 1xx 指示資訊 表示請求已接收,繼續處理 2xx 成功 表示請求...
http協議相關面試題整理
1 什麼是http協議無狀態協議?怎麼解決http協議無狀態協議?1 無狀態協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的資訊 2 無狀態協議解決方法 通過1 cookie 2 通過session會話儲存 2 http報文由什麼組成?請求報文包括 1 請求行 包含請求方法,url...