http是一種基於訊息的模型:
客戶端傳送一條請求資訊,服務端返回一條響應資訊。
該協議不需要連線,雖然http使用的是有狀態的tcp協議作為它的傳輸機制,但每次請求和響應交換都是自動完成,並且可能使用的不是同一次tcp連線
所有的http訊息,包括請求和響應,都包含乙個或者幾個單行顯示的訊息頭(header),然後是乙個強制空白行,最後是訊息主體(可空)
下圖是乙個典型的http請求。
第一行由三個專案組成:此次請求包採用方法:常見get;post,所請求的 url,使用的http版本。
referer訊息頭:用於標出發請求的原始url
user-agent訊息頭:提供與瀏覽器或其他生成請求的客戶端軟體有關的資訊。
host訊息頭:用於指定出現在被訪問的完整url中的主機名稱
http響應
每個http響應的第一行由3個專案組成:使用的http版本,請求狀態碼,與狀態碼對應進一步說明響應狀態。
server訊息頭中包含了乙個flag:指明web伺服器軟體,有時還包括了其他資訊
set-cookie訊息頭想=向瀏覽器傳送另乙個cookie,它將在隨後向伺服器傳送的請求中由cookie訊息頭返回
pragma訊息頭:讓瀏覽器不要將響應儲存在快取中
expires訊息頭:表明響應內容已經過期,所以不需要儲存在快取中。這兩個欄位是為了確保瀏覽器隨時可以獲得最新的內容
content-type:幾乎所有的http響應在訊息頭後的空白行下面都包含了訊息主題,content-type訊息頭表示這個訊息主體中包含了html的文件。
content-length訊息頭:規定訊息主題的位元組長度
http方法
get的作用在於獲取資源,引數拼接在url上,url被記錄在許多地方:,瀏覽器的歷史記錄,web伺服器的訪問日誌中。
post方法主要用於執行操作,主要用於傳參,引數不出現在url中,在訊息主體中。維護url日誌和referer訊息頭也將這些引數排除在外。所以返回的話,不會帶入引數,也就會出現報錯
url(uniform resource locator。統一資源定位符),是標識web資源的唯一識別符號,通過它即可獲取其標識的資源:
protocol://hostname[:port]/[path/]file[?param=value]
rest表述性狀態轉移(rest)是分布式系統的一種體系架構,在這類體系架構中,請求和響應包含系統資源當前狀態的表述。
http訊息頭
常用訊息頭
connection:告訴通訊的另一端,在完成http傳輸後是關閉tcp連線,還是保持連線開放以接收其他訊息。
content-encoding:用於訊息主體中的內容只當編碼格式(如gzip),一些應用成虛使用它來涯所響應以加快傳輸速度
transfer-encoding:這個訊息頭指定為方便其通過http傳輸而對訊息主體使用的任何編碼。
請求訊息頭
accept:這個訊息頭告訴伺服器,客戶端願意接受哪些內容,影象型別、辦公文件格式等
accept-encoding:這個訊息頭用於告訴伺服器,客戶端願意接受哪些內容編碼
cookie:這個訊息頭用於向伺服器提交它以前發布的cookie
host:指定出現在所請求的完整url中的主機名稱
if-modified-since:用於說明瀏覽器最後一次收到的請求資源的時間。如果自那之後資源沒有發生變化,伺服器就會發出乙個帶狀態碼304的響應,指示客戶端使用的資源的快取副本
origin:這個訊息頭用於跨域ajax請求中,用於指示提出請求的域
響應請求頭:
access-control-alliw-origin:用於指示可否通過跨域ajax請求獲取資源
cache-control:用於向瀏覽器傳送快取指令
etag:指定乙個實體標籤。客戶端刻在將來的請求中提交這個識別符號
expires:這個訊息頭用於向瀏覽器說明訊息主題內容的有效時間。在這個時間之前,瀏覽器可以使用這個資源的快取副本
location:用於在重定向響應(那些狀態碼以3開頭的響應)中說明重定向的目標
pragma:用於向瀏覽器傳送快取指令
server:提供所使用的web伺服器的相關資訊
www-authenticate:用在帶401狀態碼的響應中,提供與伺服器所支援的身份驗證型別有關的資訊
x-frame-option:指示瀏覽器框架是否及如何載入當前響應
cookie
cookie是大多數web應用程式所依賴的http協議的關鍵組成部分,攻擊者常常通過它來利用web應用程式中的漏洞。伺服器使用cookie機制向客戶端傳送資料,客戶端儲存cookie並將其返回給伺服器。
httponly:設定這個屬性,將無法通過客戶端js直接訪問cookie
狀態碼1xx---------提供資訊
2xx---------請求被成功提交
3xx---------客戶端被重定向到其他資源
4xx---------請求包含某種錯誤
5xx---------伺服器執行請求時遇到錯誤
http**伺服器是乙個協調客戶端瀏覽器與目標web伺服器之間訪問的伺服器。當配置瀏覽器使用**伺服器時,它會將所有請求提交到**伺服器,**伺服器再將請求轉送給相關web伺服器,並將響應返回給瀏覽器。大多數**還使用其他的服務。快取,驗證,訪問控制。
使用**伺服器時:
當瀏覽器向**伺服器發布http請求時,會將完整的url插入請求中,**伺服器將提取主機名和埠,並使用這些資訊將請求指向正確的目標web伺服器。
當使用https時,瀏覽器無法與**伺服器進行ssl握手,因為這樣做會破壞安全隧道,使通訊易於遭受攔截攻擊。因此,**瀏覽器必須將**作為乙個純粹的tcp中繼,由它傳遞瀏覽器與目標web瀏覽器之間的所有網路資料,並與瀏覽器進行正常的ssl握手。瀏覽器使用connect方法向**伺服器提交乙個http請求,並指定url中的目標主機名稱與埠號,從而建立這種中繼。如果**允許該請求,它會返回乙個200狀態碼的http響應,一直開放tcp連線,從此以後作為目標web伺服器的純粹的tcp級中繼
攻擊web應用程式時,最有用的工具時乙個處在瀏覽器的目標的web站點之間的專用**伺服器。使用它可以攔截並修改,所有使用https的請求和響應
http身份驗證
basic:一種非常簡單的身份驗證機制,在請求頭中隨每條訊息以base64編碼字串的形式傳送使用者證書
ntlm:一種質詢-響應式機制,它使用某個windows ntlm協議版本。
digest:一種質詢-響應式機制,隨同使用者證書一起使用乙個隨機值md5校驗和。
internet的web應用基本很少使用它們
base身份驗證是安全的,很多銀行也在使用,只要配合https使用,防止被竊聽,就比市面上絕大多數web應用程式的身份驗證差不多了
Http協議詳解 Http請求詳解
http是hypertext transfer protocol 超文字傳輸協議 的簡寫,它是tcp ip協議的乙個應用層協議,用於定義web瀏覽器與web伺服器之間交換資料的過程。客戶端連上web伺服器後,若想獲得web伺服器中的某個web資源,需遵守一定的通訊格式,http協議用於定義客戶端與w...
Http協議詳解
http協議是乙個基於tcp ip 的協議,使用的是一種請求 響應模型 目前的版本為1。1,但有一些 仍然使用1。0的版本,在待會的實驗中,我們可以看到,網易的主頁163.com仍舊使用的1.0的標準。1 何為請求 響應機制 在這一種機制中,總是客戶端請求伺服器,伺服器接受響應後根據請求端的請求資訊...
HTTP協議詳解
head to inde x.html not supported.invalid method in request head htp 1.1 apache 1.3.12 server at www.fudan.edu.cn port 80 關於實體頭部的內容還可以有 last modified ...