?
目錄
?????????1.什么是http協議?
2.http協議的版本?
3.http文本框架
4.http請求報文
5.http報文格式
6.http響應報文
7.HTTP的狀態碼
8.HTTP首部介紹
9.什么是URL和URI?
10.CGI是什么?
1.什么是http協議?
http:Hyper Text Transfer Protocol 超文本傳輸協議,是互聯網應用最為廣泛的一種網絡協議, 主要用于 Web 服務。通過計算機處理文本信息,格式為 HTML(Hyper Text Mark Language) 超文本標記語言來實現。
2.http協議的版本?
http 0.9:僅于用戶傳輸 html 文檔
http 1.0 :
1.引入了 MIME(Multipurpose Internet Mail Extesions)機制:多用途互聯網郵件擴展,引 入這個技術之后,http 可以發送多媒體(比如視頻、音頻等)信息。此機制讓 http 不在單單只支持 html 格式,還可以支持其他格式來進行發送了。
2.引入了 keep-alive 機制,支持持久連接的功能(但這個 keep-alive 原理是在首部添加了 某個字段而形成的,并非原生就支持此功能)
3.引入支持緩存功能 http 1.1 支持更多的請求方法,更加精細的緩存控制,原生直接支持持久連接功能(presistent)。
http 2.0 :
提供了 HTTP 語義優化的傳輸,spdy : google 引入了的一個技術,能夠加速 http 數據交互, 尤其是使用 ssl 加速機制,但是 spdy 現在用的還不多。
目前常用的版本就是 http 1.0 版本和 http 1.1 版本。
3.http文本框架
<html><head><title></title></head><body><h1>hello</h1></body>
</html>
4.http請求報文
1.request Message(請求報文) 客戶端 -→ 服務器端
由客戶端向服務器端發出請求,不同的網站用于請求不同的資源(html 文檔)
2.response Message(響應報文) 服務器端 -→ 客戶端
是服務器予以響應客戶端的請求
5.http報文格式
請求行+請求頭+空白行+請求實體
?
1.請求行
請求行主要有三部分組成:請求方式+URL字段+HTTP協議版本
?
組成:
<method>:這次請求的方式
<request-URL>:請求資源的路徑
<version>:請求的協議版本
http請求方式: ?
HTTP請求方法 | 描述 |
---|---|
GET | 用于客戶端請求指定資源信息,并返回指定資源的實體 |
HEAD | 跟GET相似,但是不需要返回客戶端請求的資源,只返回響應首部,(告訴客戶端我有或者沒有) |
POST | 基于HTML表單向服務器提交數據,通常是需要存儲數據的時候,像mysql存儲 |
PUT | 與GET相反,是向服務器發送資源,服務器存儲此數據,像百度網盤,阿里云盤 |
DELETE | 請求服務器刪除URL指定的資源 |
MOVE | 請求服務器將指定的頁面移至到另一個網絡位置 |
OPTIONS | 探測服務器端對請求的URL所支持使用的請求方法 |
TRACE | 第一次請求中間所經歷的代理服務器,防火墻或網關等 |
2.請求頭
請求頭由關鍵字+關鍵字的值組成,直接使用 : 隔開,格式:Name:value,請求頭的作用是通過客戶端將請求的相關內容告知服務器,首部不止有一個。
?
3.空白行
請求頭之后會有一個空白行,通過方式回車和換行字符,用于通知服務器端以下的內容不會再出現請求首部的信息
4.請求實體
真正請求的內容
?
6.http響應報文
格式:起始行 + 響應首部 + 空白行 + 響應實體
?
1.起始行
也被稱為狀態行,用于服務器響應客戶端請求的狀態信息,由版本號<version>+狀態碼<status>+原因短語<reason-phrase>組成
<Version>:響應客戶端請求的是什么版本,服務器就響應什么版本 <status>:狀態碼,200,404等 <reason-phrase>:響應的狀態碼的信息是深, 原因短句 <headers>:一大堆的響應首部 <entity-body>:響應體
2.響應首部
類似于請求報文,起始行后面一般有若干個頭部字段。每一個頭部字段都包含一個名字和一個值。格式:name:value
Content-Type: test/html; charset=utf-8 Content-Length: 78
3.空白行
最后一個響應首部信息之后就是一個空行,通知客戶端無首部信息了
4.響應體
響應實體中裝載了要返回給客戶端的數據,這些數據可以是文本,也可以是二進制
7.HTTP的狀態碼
狀態碼 | 說明 |
---|---|
1XX | 信息性狀態碼,用于指定客戶端相應的某些操作 |
2XX | 成功狀態碼,我請求一個資源,這個資源在,這就表示請求成功 |
3XX | 重定向的狀態碼,有時會返回一個新的地址 |
4XX | 客戶端類錯誤,你請求的資源不存在,或者你請求的時候,我們這個資源拒絕你訪問,你沒有權限 |
5XX | 服務器類錯誤信息。向服務器發起請求,服務器發現需要運行一個腳本,從而調用解析庫,如果在調用過程中出錯就會出現這種情況,或者你的腳本有錯誤,也可能導致這種問題 |
常用狀態碼
狀態碼 | 說明 |
---|---|
200 | 服務器成功返回網頁,這是成功的HTTP請求返回的標準狀態碼 |
201 | created上傳文件成功后顯示 |
301 | Move permanently,永久重定向,會返回一個新地址,并告訴我們你所請求的地址將永久挪到哪個新地址去了 |
302 | fonud,臨時重定向,臨時放到某個地方,會在響應報文中使用”location:新位置“ |
304 | not modified 資源沒有做任何修改 |
403 | forbidden 請求拒絕 |
404 | not found 請求資源不存在 |
405 | method not allowed 你使用的方法不被允許,不支持 |
500 | internal server error:服務器內部錯誤 |
502 | Bod gateway,代理服務器從上游服務器收到一條偽響應,上一層服務器返回了一個無法理解的報文,所以代理服務器就會表示錯誤 |
503 | serive unavailable,服務暫時不可用 |
8.HTTP首部介紹
首部的分類:通用首部,請求首部,響應首部,實體首部(專門用來表示實體中資源內部的類型,長度,編碼格式等),擴展首部(非標準首部,可有程序員自行創建)
1.通用首部
? Connection:定義 C/S 之間關于請求、響應的有關選項 在 http1.0 的時候,如果他想使用持久連接,那么他所設置的選項即為 Connection:keep-alive 、
? Cache-Control:緩存控制,實現更精細的緩存控制方式。在 http 1.1 上比較 常見
2.請求首部
? Client-IP :客戶端 IP 地址
? Host :請求的主機,這在實現基于主機名的虛擬主機時很有用
? Referer :指明了請求當前資源原始資源的 URL,使用 referer 是可以防盜鏈
? User-Agent:用戶代理,一般而言是瀏覽器
? Accept 首部:指客戶端可以接受哪些編碼的類型
? Accept:服務端能夠發送的媒體的類型
? Accetp-Charset:接收的字符集
? Accept-Encoding:編碼格式
? Accept-Lanage:所能接受的語言編碼格式
? 條件式請求首部:(在 http1.1 中才會用到)
當發送請求時,先問問對方是否滿足條件,如果滿足條件就請求,不滿足就不請 求
? 跟安全相關的請求:
? Authorization
? Cookie
3.響應首部
? Age:資源響應給你之后可以使用的時長
? Server:向客戶端說明自己用到的程序名稱和版本
? 協商類的首部:
? Vary:首部列表,服務器會根據此列表挑選最適合的版本發給客戶端
? 跟安全相關:
? WWW-Authentication
? Set-Cookie
4.實體首部
? Location:指明資源的新位置,實現 302 響應碼時通常會用到
? Allow:允許對此資源使用的請求方法
? 內容相關的首部
? Content-Encoding
? Content-Language
? Content-Length
? Content-Location:內容所在的位置
? Content-Type
? 緩存相關:
? ETag:擴展標簽/標記
? Expires:過期時間
? Last-Modified:最后修改時間
9.什么是URL和URI?
? URI(Uniform Resource Identifier) 同一資源標示符
用于標識某一互聯網資源名稱的字符串,通過這種標識來允許你用戶對資源可通 過特定的協議進行交互操作。在 Web 上可用的每種資源,包括 HTML 文檔、圖 像、視頻片段、程序等, 由一個通用資源標識符進行定位。所以我們可以使用 URI 來標識每個資源的名稱
? URL(Uniform Resource Locator)(統一資源定位符)
用于描述一個特定服務器上某資源的特定位置。
例如:http://www.baidu.com:80/download/bash-4.3.1-1.rpm
URL 的格式分為三個部分
i. scheme(方案)(也叫協議):http://
ii. Internet 地址:一般這個地址指的是服務器:www.baidu.com:8080
iii. 特定服務器上的資源:download/bash-4.3.1-1.rpm
10.CGI是什么?
Common Gateway Interface 通用網關接口
?
web 服務器發現需要執行腳本了,就通過 CGI 協議跟后端的應用程序打交道, 把用戶的請求動態交給服務器,這個服務器的結果通過 CGI 協議返回給 http 服 務器。