一、http協(xié)議
1.http 相關(guān)概念
-
互聯(lián)網(wǎng):是網(wǎng)絡(luò)的網(wǎng)絡(luò),是所有類型網(wǎng)絡(luò)的母集
-
因特網(wǎng):世界上最大的互聯(lián)網(wǎng)網(wǎng)絡(luò)。即因特網(wǎng)概念從屬于互聯(lián)網(wǎng)概念。習(xí)慣上,大家把連接在因特網(wǎng)上的計(jì)算機(jī)都成為主機(jī)。
-
萬(wàn)維網(wǎng):WWW(world wide web)萬(wàn)維網(wǎng)并非某種特殊的計(jì)算機(jī)網(wǎng)絡(luò),是一個(gè)大規(guī)模的、聯(lián)機(jī)式的信息貯藏庫(kù),使用鏈接的方法能非常方便地從因特網(wǎng)上的一個(gè)站點(diǎn)訪問(wèn)另一個(gè)站點(diǎn)(超鏈技術(shù)),具有提供分布式服務(wù)的特點(diǎn)。萬(wàn)維網(wǎng)是一個(gè)分布式的超媒體系統(tǒng),是超文本系統(tǒng)的擴(kuò)充,基于B/S架構(gòu)實(shí)現(xiàn)
-
-
URL:萬(wàn)維網(wǎng)使用統(tǒng)一資源定位符(Uniform Resource Locator)來(lái)標(biāo)志萬(wàn)維網(wǎng)上的各種文檔,并使每個(gè)文檔在整個(gè)因特網(wǎng)的范圍內(nèi)具有唯一的標(biāo)識(shí)符URL。(URL 描述了你需要資源的具體位置在什么地方)
-
HTTP:為解決"用什么樣的網(wǎng)絡(luò)協(xié)議來(lái)實(shí)現(xiàn)整個(gè)因特網(wǎng)上的萬(wàn)維網(wǎng)文檔”這一難題,就要使萬(wàn)維網(wǎng)客戶程序(以瀏覽器為主,但不限于瀏覽器)與萬(wàn)維網(wǎng)服務(wù)器程序之間的交互遵守嚴(yán)格的協(xié)議,即超文本傳送協(xié)議(HyperText Transfer Protocol)。HTTP是處于應(yīng)用層的協(xié)議,使用TCP傳輸層協(xié)議進(jìn)行可靠的傳送。因此,需要特別提醒的是,萬(wàn)維網(wǎng)是基于因特網(wǎng)的一種廣泛因特網(wǎng)應(yīng)用系統(tǒng),且萬(wàn)維網(wǎng)采用的是HTTP(80/TCP)和 HTTPS(443/TCP)的傳輸協(xié)議,但因特網(wǎng)還有其他的網(wǎng)絡(luò)應(yīng)用系統(tǒng)(如:FTP、SMTP等等)。
-
HTML:為了解決"怎樣使不同作者創(chuàng)作的不同風(fēng)格的萬(wàn)維網(wǎng)文檔,都能在因特網(wǎng)上的各種主機(jī)上顯示出來(lái),同時(shí)使用戶清楚地知道在什么地方存在著鏈接”這一問(wèn)題,萬(wàn)維網(wǎng)使用超文本標(biāo)記語(yǔ)言(HyperText Markup Language),使得萬(wàn)維網(wǎng)頁(yè)面的設(shè)計(jì)者可以很方便地用鏈接從頁(yè)面的某處鏈接到因特網(wǎng)的任何一個(gè)萬(wàn)維網(wǎng)頁(yè)面,并且能夠在自己的主機(jī)品目上將這些頁(yè)面顯示出來(lái)。HTML與txt一樣,僅僅是是一種文檔,不同之處在于,這種文檔專供于瀏覽器上為瀏覽器用戶提供統(tǒng)一的界面呈現(xiàn)的統(tǒng)一規(guī)約。且具備結(jié)構(gòu)化的特征,這是txt所不具備的強(qiáng)制規(guī)定。
2 .訪問(wèn)瀏覽器的過(guò)程
3.?http 協(xié)議通信過(guò)程
HTTP(HyperText Transfer Protocol,超文本傳輸協(xié)議)是一種用于分布式、協(xié)作式和超媒體信息系統(tǒng)的應(yīng)用層協(xié)議。
HTTP是萬(wàn)維網(wǎng)的數(shù)據(jù)通信的基礎(chǔ),設(shè)計(jì)HTTP最初的目的是為了提供一種遠(yuǎn)距離共享知識(shí)的方式,借助多文檔進(jìn)行關(guān)聯(lián)實(shí)現(xiàn)超文本,連成相互參閱的WWW(world wide web,萬(wàn)維網(wǎng))
HTTP的發(fā)展是由蒂姆·伯納斯-李(Tim Berners-Lee)于1989年在歐洲核子研究組織(CERN)所發(fā)起。HTTP的標(biāo)準(zhǔn)制定由萬(wàn)維網(wǎng)協(xié)會(huì)(World Wide Web Consortium,W3C)和互聯(lián)網(wǎng)工程任務(wù)組(Internet Engineering Task Force,IETF)進(jìn)行協(xié)調(diào),最終發(fā)布了一系列的RFC,其中最著名的是1999年6月公布的 RFC 2616,定義了HTTP協(xié)議中現(xiàn)今廣泛使用的一個(gè)版本——HTTP 1.1版
2014年12月,互聯(lián)網(wǎng)工程任務(wù)組(IETF)的Hypertext Transfer Protocol Bis(httpbis)工作小組將HTTP/2標(biāo)準(zhǔn)提議遞交至IESG進(jìn)行討論,于2015年2月17日被批準(zhǔn)。 HTTP/2標(biāo)準(zhǔn)于2015年5月以RFC 7540正式發(fā)表,取代HTTP 1.1成為HTTP的實(shí)現(xiàn)標(biāo)準(zhǔn)。
擴(kuò)展網(wǎng)絡(luò)通信,兩臺(tái)主機(jī)之間通信
?
[root@zzh ~]#yum install nc -y
[root@zzh ~]#nc -l 8000
nihao
xia xue le
下雪了
#主機(jī)1 在監(jiān)聽(tīng) 8000 端口
[root@centos7-2 ~]#nc 192.168.246.7 8000
nihao
xia xue le
下雪了
#主機(jī)2 去訪問(wèn) 主機(jī)1(服務(wù)端)的8000 端口 就可以聊天了
?
例如:在瀏覽器地址欄鍵入U(xiǎn)RL,按下回車之后會(huì)經(jīng)歷以下流程:
例如:在瀏覽器地址欄鍵入U(xiǎn)RL,按下回車之后會(huì)經(jīng)歷以下流程:
1. 瀏覽器向 DNS 服務(wù)器請(qǐng)求解析該 URL 中的域名所對(duì)應(yīng)的 IP 地址;
2. 解析出 IP 地址后,根據(jù)該 IP 地址和默認(rèn)端口 80,和服務(wù)器建立TCP連接;
3. 瀏覽器發(fā)出讀取文件(URL 中域名后面部分對(duì)應(yīng)的文件)的HTTP 請(qǐng)求,該請(qǐng)求報(bào)文作為 TCP 三次握手的第三個(gè)報(bào)文的數(shù)據(jù)發(fā)送給服務(wù)器;
4. 服務(wù)器對(duì)瀏覽器請(qǐng)求作出響應(yīng),并把對(duì)應(yīng)的 html 文本發(fā)送給瀏覽器;
5. 釋放 TCP連接;
6. 瀏覽器將該 html 文本并顯示內(nèi)容;
4 . HTTP 相關(guān)技術(shù)
http: Hyper Text Transfer Protocol 應(yīng)用層協(xié)議,默認(rèn)端口: 80/tcp
①WEB前端開(kāi)發(fā)語(yǔ)言:
-
html
Hyper Text Markup Language 超文本標(biāo)記語(yǔ)言,編程語(yǔ)言,主要負(fù)責(zé)實(shí)現(xiàn)頁(yè)面的結(jié)構(gòu)
-
css
Cascading Style Sheet 層疊樣式表, 定義了如何顯示(裝扮) HTML 元素,比如:字體大小和顏色屬性等。樣式通常保存在外部的 .css 文件中,用于存放一些HTML文件的公共屬性,從而通過(guò)僅編輯一個(gè)簡(jiǎn)單的 CSS 文檔,可以同時(shí)改變站點(diǎn)中所有頁(yè)面的布局和外觀
-
javascript
javascript,實(shí)現(xiàn)網(wǎng)頁(yè)的動(dòng)畫(huà)效果,但實(shí)屬于靜態(tài)資源
②?URI(i) 和 URL uri
URI: Uniform Resource Identifier 統(tǒng)一資源標(biāo)識(shí),分為URL 和 URN
-
URN:Uniform Resource Naming,統(tǒng)一資源命名
示例: P2P下載使用的磁力鏈接是URN的一種實(shí)現(xiàn)
magnet:?xt=urn:btih:660557A6890EF888666(只是描述了資源的名字,并沒(méi)有明確該資源在哪里)
-
URL:Uniform Resorce Locator,統(tǒng)一資源定位符,用于描述某服務(wù)器某特定資源位置
兩者區(qū)別:
-
URN如同一個(gè)人的名稱,而URL代表一個(gè)人的住址。
-
URN定義某事物的身份,而URL提供查找該事物的方法。URN僅用于命名,而不指定地URL組成。
URL組成:
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
scheme:方案,訪問(wèn)服務(wù)器以獲取資源時(shí)要使用哪種協(xié)議
user:用戶 (虛擬用戶),某些方案訪問(wèn)資源時(shí)需要的用戶名
password:密碼,用戶對(duì)應(yīng)的密碼,中間用:分隔
Host:主機(jī),資源宿主服務(wù)器的主機(jī)名或IP地址
port:端口,資源宿主服務(wù)器正在監(jiān)聽(tīng)的端口號(hào),很多方案有默認(rèn)端口號(hào)
path:路徑,服務(wù)器資源的本地名,由一個(gè)/將其與前面的URL組件分隔
params:參數(shù),指定輸入的參數(shù),參數(shù)為名/值對(duì),多個(gè)參數(shù),用;分隔
query:查詢,傳遞參數(shù)給程序,如數(shù)據(jù)庫(kù),用?分隔,多個(gè)查詢用&分隔
frag:片段,一小片或一部分資源的名字,此組件在客戶端使用,用#分隔
補(bǔ)充:
重點(diǎn)記憶下
web常用軟件httpd 和 nginx
③ MIME
MIME : Multipurpose Internet Mail Extensions 多用途互聯(lián)網(wǎng)郵件擴(kuò)展
文件 /etc/mime.types ,來(lái)自于mailcap包
MIME格式:type/subtype 主要類型/次要類型
如果你的文件在mime.types里就展示給你看,如果不在就下載
text/plain ?
text/html ?
text/css
image/jpeg ? jpg jpeg
image/png
video/mp4
application/javascript
#前面是大類/后面是小類
④HTTP 請(qǐng)求訪問(wèn)的完整過(guò)程
建立連接
接收請(qǐng)求
處理請(qǐng)求
訪問(wèn)資源
構(gòu)建響應(yīng)報(bào)文
發(fā)送響應(yīng)報(bào)文
記錄日志
接收請(qǐng)求
接收客戶端請(qǐng)求報(bào)文中對(duì)某資源的一次請(qǐng)求的過(guò)程
Web訪問(wèn)響應(yīng)模型(Web I/O)? ?I? INPUT 和O? OUTPUT
-
單進(jìn)程I/O模型:?jiǎn)?dòng)一個(gè)進(jìn)程處理用戶請(qǐng)求,而且一次只處理一個(gè),多個(gè)請(qǐng)求被串行響應(yīng)
-
多進(jìn)程I/O模型:并行啟動(dòng)多個(gè)進(jìn)程,每個(gè)進(jìn)程響應(yīng)一個(gè)連接請(qǐng)求
-
復(fù)用I/O結(jié)構(gòu):?jiǎn)?dòng)一個(gè)進(jìn)程,同時(shí)響應(yīng)N個(gè)連接請(qǐng)求
-
復(fù)用的多進(jìn)程I/O模型:?jiǎn)?dòng)M個(gè)進(jìn)程,每個(gè)進(jìn)程響應(yīng)N個(gè)連接請(qǐng)求,同時(shí)接收M*N個(gè)請(qǐng)求
⑤網(wǎng)站訪問(wèn)量
網(wǎng)站訪問(wèn)量統(tǒng)計(jì)的重要指標(biāo)
-
IP(獨(dú)立IP):即Internet Protocol,指獨(dú)立IP數(shù)。一天內(nèi)來(lái)自相同客戶機(jī)IP 地址只計(jì)算一次,記錄遠(yuǎn)程客戶機(jī)IP地址的計(jì)算機(jī)訪問(wèn)網(wǎng)站的次數(shù),是衡量網(wǎng)站流量的重要指標(biāo)
-
PV(訪問(wèn)量): 即Page View, 頁(yè)面瀏覽量或點(diǎn)擊量,用戶每次刷新即被計(jì)算一次,PV反映的是瀏覽某網(wǎng)站的頁(yè)面數(shù),PV與來(lái)訪者的數(shù)量成正比,PV并不是頁(yè)面的來(lái)訪者數(shù)量,而是網(wǎng)站被訪問(wèn)的頁(yè)面數(shù)量
-
UV(獨(dú)立訪客):即Unique Visitor,訪問(wèn)網(wǎng)站的一臺(tái)電腦為一個(gè)訪客。一天內(nèi)相同的客戶端只被計(jì)算一次??梢岳斫獬稍L問(wèn)某網(wǎng)站的電腦的數(shù)量。網(wǎng)站判斷來(lái)訪電腦的身份是通過(guò)cookies實(shí)現(xiàn)的。如果更換了IP后但不清除cookies,再訪問(wèn)相同網(wǎng)站,該網(wǎng)站的統(tǒng)計(jì)中UV數(shù)是不變的
⑥HTTP工作機(jī)制
一次http事務(wù)包括:
-
http請(qǐng)求:http request
-
http響應(yīng):http response
Web資源:web resource, 一個(gè)網(wǎng)頁(yè)由多個(gè)資源(文件)構(gòu)成,打開(kāi)一個(gè)頁(yè)面,通常會(huì)有多個(gè)資源展示出來(lái),但是每個(gè)資源都要單獨(dú)請(qǐng)求。因此,一個(gè)"Web 頁(yè)面”通常并不是單個(gè)資源,而是一組資源的集合
資源類型:
-
靜態(tài)文件:無(wú)需服務(wù)端做出額外處理,服務(wù)器端和客戶端的文件內(nèi)容相同
常見(jiàn)文件后綴:.html, .txt, .jpg, .js, .css, .mp3, .avi
-
動(dòng)態(tài)文件:服務(wù)端執(zhí)行程序,返回執(zhí)行的結(jié)果,服務(wù)器端和客戶端的文件內(nèi)容不相同
常見(jiàn)文件后綴:.php(一種語(yǔ)言), .jsp ,.asp
提高HTTP連接性能
-
并行連接:通過(guò)多條TCP連接發(fā)起并發(fā)的HTTP請(qǐng)求
-
持久連接:keep-alive,重用TCP連接,以消除連接和關(guān)閉的時(shí)延,以事務(wù)個(gè)數(shù)和時(shí)間來(lái)決定是否關(guān)閉連接
-
管道化連接:通過(guò)共享TCP連接,發(fā)起并發(fā)的HTTP請(qǐng)求
-
復(fù)用的連接:交替?zhèn)魉驼?qǐng)求和響應(yīng)報(bào)文(實(shí)驗(yàn)階段
⑦HTTP 協(xié)議版本
http/0.9:
1991,原型版本,功能簡(jiǎn)陋,只有一個(gè)命令GET。GET /index.html ,服務(wù)器只能回應(yīng)HTML格式字符串,不能回應(yīng)別的格式
http/1.0
1996年5月,支持cache, MIME, method
每個(gè)TCP連接只能發(fā)送一個(gè)請(qǐng)求,發(fā)送數(shù)據(jù)完畢,連接就關(guān)閉,如果還要請(qǐng)求其他資源,就必須再新建一個(gè)連接引入了POST命令和HEAD命令頭信息是 ASCII 碼,后面數(shù)據(jù)可為任何格式。服務(wù)器回應(yīng)時(shí)會(huì)告訴客戶端,數(shù)據(jù)是什么格式,即Content-Type字段的作用。這些數(shù)據(jù)類型總稱為MIME 多用途互聯(lián)網(wǎng)郵件擴(kuò)展,每個(gè)值包括一級(jí)類型和二級(jí)類型,預(yù)定義的類型,也可自定義類型, 常見(jiàn)Content-Type值:text/xml image/jpeg audio/mp3
http/1.1
1997年1月,引入了持久連接(persistent connection),即TCP連接默認(rèn)不關(guān)閉,可以被多個(gè)請(qǐng)求復(fù)用,不用聲明Connection: keep-alive。對(duì)于同一個(gè)域名,大多數(shù)瀏覽器允許同時(shí)建立6個(gè)持久連接引入了管道機(jī)制,即在同一個(gè)TCP連接里,客戶端可以同時(shí)發(fā)送多個(gè)請(qǐng)求,進(jìn)一步改進(jìn)了HTTP協(xié)議的效率新增方法:PUT、PATCH、OPTIONS、DELETE同一個(gè)TCP連接里,所有的數(shù)據(jù)通信是按次序進(jìn)行的。服務(wù)器只能順序處理回應(yīng),前面的回應(yīng)慢,會(huì)有許多請(qǐng)求排隊(duì),造成"隊(duì)頭堵塞"(Head-of-line blocking)為避免上述問(wèn)題,兩種方法:一是減少請(qǐng)求數(shù),二是同時(shí)多開(kāi)持久連接。網(wǎng)頁(yè)優(yōu)化技巧,如合并腳本和樣式表、將圖片嵌入CSS代碼、域名分片(domain sharding)等HTTP 協(xié)議不帶有狀態(tài),每次請(qǐng)求都必須附上所有信息。請(qǐng)求的很多字段都是重復(fù)的,浪費(fèi)帶寬,影響速度
面試小技巧:
0.9版本 只有 get 只有下載 沒(méi)有上傳(put)
1.0版本 沒(méi)有長(zhǎng)連接可以下載和上傳 (put)
1.1版本 支持長(zhǎng)連接可以下載和上傳 (put)
HTTP2協(xié)議
http/2.0:2015年,HTTP2.0是SPDY的升級(jí)版
-
頭信息和數(shù)據(jù)體都是二進(jìn)制,稱為頭信息幀和數(shù)據(jù)幀
-
復(fù)用TCP連接,在一個(gè)連接里,客戶端和瀏覽器都可以同時(shí)發(fā)送多個(gè)請(qǐng)求或回應(yīng),且不用按順序一一對(duì)應(yīng),避免了"隊(duì)頭堵塞",此雙向的實(shí)時(shí)通信稱為多工(Multiplexing)
-
引入頭信息壓縮機(jī)制(header compression),頭信息使用gzip或compress壓縮后再發(fā)送;客戶端和服務(wù)器同時(shí)維護(hù)一張頭信息表,所有字段都會(huì)存入這個(gè)表,生成一個(gè)索引號(hào),不發(fā)送同樣字段,只發(fā)送索引號(hào),提高速度
-
HTTP/2 允許服務(wù)器未經(jīng)請(qǐng)求,主動(dòng)向客戶端發(fā)送資源,即服務(wù)器推送(server push)
⑧HTTPS協(xié)議:
為解決安全問(wèn)題,網(wǎng)景在1994年創(chuàng)建了HTTPS,并應(yīng)用在網(wǎng)景導(dǎo)航者瀏覽器中。 最初,HTTP是與SSL一起使用的;在SSL逐漸演變到TLS時(shí)(其實(shí)兩個(gè)是一個(gè)東西,只是名字不同而已),最新的HTTPS也由在2000年五月公布的RFC 2818正式確定下來(lái)。HTTPS就是安全版的HTTP,目前大型網(wǎng)站基本實(shí)現(xiàn)全站HTTPS
HTTPS特點(diǎn)
-
HTTPS協(xié)議需要到CA申請(qǐng)證書(shū),一般免費(fèi)證書(shū)很少,需要交費(fèi)
-
HTTP協(xié)議運(yùn)行在TCP之上,所有傳輸?shù)膬?nèi)容都是明文,HTTPS運(yùn)行在SSL/TLS之上,SSL/TLS運(yùn)行在TCP之上,所有傳輸?shù)膬?nèi)容都經(jīng)過(guò)加密的
-
HTTP和HTTPS使用的是不同的連接方式,端口不同,前者是80,后者是443
-
HTTPS可以有效的防止運(yùn)營(yíng)商劫持,解決了防劫持的一個(gè)大問(wèn)題
-
HTTPS 實(shí)現(xiàn)過(guò)程降低用戶訪問(wèn)速度,但經(jīng)過(guò)合理優(yōu)化和部署,HTTPS 對(duì)速度的影響還是可以接受的
5.http協(xié)議及報(bào)文頭部結(jié)構(gòu)
1.http請(qǐng)求報(bào)文
報(bào)文由三個(gè)部分組成,即開(kāi)始行、首部行和實(shí)體主體在請(qǐng)求報(bào)文中,開(kāi)始行就是請(qǐng)求行。
URL包含:/index/index2?a=1&b=2;路徑和參數(shù)都在這里。
方法:
-
GET: 獲取資源 當(dāng)前網(wǎng)絡(luò)請(qǐng)求中,絕大部分使用的是 GET 方
-
HEAD: 獲取報(bào)文首部,主要用于確認(rèn) URL 的有效性以及資源更新的日期時(shí)間等
-
POST: 傳輸實(shí)體主體 (比如傳輸 用戶名密碼)
-
PUT: 上傳文件(比如寫博客)
-
PATCH: 對(duì)資源進(jìn)行部分修改
-
DELETE:刪除文件
-
OPTIONS:查詢支持的方法(查看服務(wù)端可以支持哪些方法)
-
CONNECT:要求在與代理服務(wù)器通信時(shí)建立隧道(類似加密)
-
TRACE:追蹤路徑
url:指明資源的具體位置
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
scheme
-
http 超文本傳輸協(xié)議
-
https 安全的http協(xié)議
-
ftp 文件傳輸協(xié)議
-
user:帳號(hào)
-
password:密碼
-
host:主機(jī)名 或 域名 或 ip地址
-
port: 服務(wù)器端口號(hào)
-
path:訪問(wèn)資源的路徑,相當(dāng)于組件路徑
-
params:參數(shù),但是這個(gè)不常用,指定一些參數(shù),譬如指定傳輸方式
-
qurey:查詢參數(shù)
-
frag:html資源片段,譬如html文檔過(guò)大的時(shí)候,frag定位到html的一部分
-
首部字段:使用首部字段是為了給瀏覽器和服務(wù)器提供報(bào)文主體大小、所使用的語(yǔ)言、認(rèn)證信息等內(nèi)容,HTTP 首部字段是由首部字段名和字段值構(gòu)成的,中間用冒號(hào)“:” 分隔
首部的分類:
-
通用首部:請(qǐng)求報(bào)文和響應(yīng)報(bào)文兩方都會(huì)使用的首部
-
Date: 報(bào)文的創(chuàng)建時(shí)間
-
Connection:連接狀態(tài),如keep-alive, close
-
Via:顯示報(bào)文經(jīng)過(guò)的中間節(jié)點(diǎn)(代理,網(wǎng)關(guān))
-
Cache-Control:控制緩存,如緩存時(shí)長(zhǎng)
-
MIME-Version:發(fā)送端使用的MIME版本
-
Warning:錯(cuò)誤通知
-
-
請(qǐng)求首部:從客戶端向服務(wù)器端發(fā)送請(qǐng)求報(bào)文時(shí)使用的首部。補(bǔ)充了請(qǐng)求的附加內(nèi)容、客戶端信息、請(qǐng)求內(nèi)容相關(guān)優(yōu)先級(jí)等信息
-
Accept:通知服務(wù)器自己可接受的媒體類型
-
Accept-Charset: 客戶端可接受的字符集
-
Accept-Encoding:客戶端可接受編碼格式,如gzip
-
Accept-Language:客戶端可接受的語(yǔ)言
-
Client-IP: 請(qǐng)求的客戶端IP
-
Host: 請(qǐng)求的服務(wù)器名稱和端口號(hào)
-
Referer:跳轉(zhuǎn)至當(dāng)前URI的前一個(gè)URL
-
User-Agent:客戶端代理,瀏覽器版本
-
Expect:允許客戶端列出某請(qǐng)求所要求的服務(wù)器行為(條件式請(qǐng)求首部)
-
If-Modified-Since:自從指定的時(shí)間之后,請(qǐng)求的資源是否發(fā)生過(guò)修改(條件式請(qǐng)求首部)
-
If-Unmodified-Since:與上面相反(條件式請(qǐng)求首部)
-
If-None-Match:本地緩存中存儲(chǔ)的文檔的ETag標(biāo)簽是否與服務(wù)器文檔的Etag不匹配(條件式請(qǐng)求首部)
-
If-Match:與上面相反 (條件式請(qǐng)求首部)
-
Authorization:向服務(wù)器發(fā)送認(rèn)證信息,如賬號(hào)和密碼(安全請(qǐng)求首部)
-
Cookie: 客戶端向服務(wù)器發(fā)送cookie
-
Proxy-Authorization: 向代理服務(wù)器認(rèn)證 ( 代理請(qǐng)求首部)
-
-
響應(yīng)首部:從服務(wù)器端向客戶端返回響應(yīng)報(bào)文時(shí)使用的首部。補(bǔ)充了響應(yīng)的附加內(nèi)容,也會(huì)要求客戶端附加額外的內(nèi)容信息
-
協(xié)商首部:某資源有多種表示方法時(shí)使用
-
Accept-Ranges:服務(wù)器可接受的請(qǐng)求范圍類型
-
Vary:服務(wù)器查看的其它首部列表
-
-
安全響應(yīng)首部:
-
Set-Cookie:向客戶端設(shè)置cookie
-
WWW-Authenticate:來(lái)自服務(wù)器對(duì)客戶端的質(zhì)詢列表
-
-
信息性:
-
Age:從最初創(chuàng)建開(kāi)始,響應(yīng)持續(xù)時(shí)長(zhǎng)
-
Server:服務(wù)器程序軟件名稱和版本
-
-
-
實(shí)體首部:針對(duì)請(qǐng)求報(bào)文和響應(yīng)報(bào)文的實(shí)體部分使用的首部。補(bǔ)充了資源內(nèi)容更新時(shí)間等與實(shí)體有關(guān)的的信息
-
緩存相關(guān):
-
ETag:實(shí)體的擴(kuò)展標(biāo)簽
-
Expires:實(shí)體的過(guò)期時(shí)間
-
Last-Modified:最后一次修改的時(shí)間
-
-
Allow: 列出對(duì)此資源實(shí)體可使用的請(qǐng)求方法
-
Location:告訴客戶端真正的實(shí)體位于何處
-
Content-Encoding:對(duì)主體執(zhí)行的編碼
-
Content-Language:理解主體時(shí)最適合的語(yǔ)言
-
Content-Location: 實(shí)體真正所處位置
-
Content-Type:主體的對(duì)象類型,如text
-
-
擴(kuò)展首部
-
-
實(shí)體:請(qǐng)求時(shí)附加的數(shù)據(jù)或響應(yīng)時(shí)附加的數(shù)據(jù),例如:登錄網(wǎng)站時(shí)的用戶名和密碼,博客的上傳文章,論壇上的發(fā)言等。
2.?響應(yīng)報(bào)文
響應(yīng)報(bào)文的開(kāi)始行是狀態(tài)行
狀態(tài)行包括三項(xiàng)內(nèi)容,即 HTTP 的版本,狀態(tài)碼以及解釋狀態(tài)碼的簡(jiǎn)單短語(yǔ)
狀態(tài)碼
三位數(shù)字,標(biāo)記請(qǐng)求處理過(guò)程中發(fā)生的情況
http協(xié)議狀態(tài)碼分類:
類別 | 原因短語(yǔ) | |
1xx |
信息性狀態(tài)碼 | 接收的請(qǐng)求正在處理 |
2xx | 成功狀態(tài)碼 | 請(qǐng)求正常處理完畢 |
3xx | 重定向狀態(tài)碼 | 需要進(jìn)行附加操作以完成請(qǐng)求 |
4xx | 客戶端錯(cuò)誤狀態(tài)碼 | 服務(wù)器無(wú)法處理請(qǐng)求 |
5xx | 服務(wù)器錯(cuò)誤狀態(tài)碼 | 服務(wù)器處理請(qǐng)求出錯(cuò) |
http協(xié)議常用的狀態(tài)碼
200: 成功,請(qǐng)求數(shù)據(jù)通過(guò)響應(yīng)報(bào)文的entity-body部分發(fā)送;OK
301: 請(qǐng)求的URL指向的資源已經(jīng)被刪除;但在響應(yīng)報(bào)文中通過(guò)首部Location指明了資源現(xiàn)? ? ? ? ? ? 在所處的新位置;Moved Permanently
302: 響應(yīng)報(bào)文Location指明資源臨時(shí)新位置 Moved Temporarily
304: 客戶端發(fā)出了條件式請(qǐng)求,但服務(wù)器上的資源未曾發(fā)生改變,則通過(guò)響應(yīng)此響應(yīng)狀態(tài)碼通知客戶端;Not Modified
307: ?瀏覽器內(nèi)部重定向
401: 需要輸入賬號(hào)和密碼認(rèn)證方能訪問(wèn)資源;Unauthorized
403: 請(qǐng)求被禁止;Forbidden
404: 服務(wù)器無(wú)法找到客戶端請(qǐng)求的資源;Not Found
500: 服務(wù)器內(nèi)部錯(cuò)誤;Internal Server Error,比如:cgi程序沒(méi)有執(zhí)行權(quán)限
502: 代理服務(wù)器從后端服務(wù)器收到了一條偽響應(yīng),如無(wú)法連接到網(wǎng)關(guān);Bad Gateway
503: 服務(wù)不可用,臨時(shí)服務(wù)器維護(hù)或過(guò)載,服務(wù)器無(wú)法處理請(qǐng)求,比如:php服務(wù)停止,無(wú)法處理php程序
504: 網(wǎng)關(guān)超時(shí)
二、Cookie和session
會(huì)話管理: 管理瀏覽器客戶端和服務(wù)器端之間會(huì)話過(guò)程中產(chǎn)生的會(huì)話數(shù)據(jù)。
為了會(huì)話管理,HTTP就需要傳輸大量重復(fù)信息內(nèi)容的問(wèn)題,造成大量的網(wǎng)絡(luò)帶寬消耗。于是 Cookie 和Session 技術(shù)閃亮登場(chǎng)了,它們可以為用戶進(jìn)行會(huì)話管理,實(shí)現(xiàn)保存狀態(tài)。
① Cookie
Cookie 又稱為"小甜餅”。類型為"小型文本文件”,指某些網(wǎng)站為了辨別用戶身份而儲(chǔ)存在用戶本地終端(Client Side)上的數(shù)據(jù)(通常經(jīng)過(guò)加密)。由網(wǎng)景公司的前雇員盧·蒙特利在1993年3月發(fā)明
因?yàn)镠TTP協(xié)議是無(wú)狀態(tài)的,即服務(wù)器不知道用戶上一次做了什么,這嚴(yán)重阻礙了交互式Web應(yīng)用程序的實(shí)現(xiàn)。
Cookie就是用來(lái)繞開(kāi)HTTP的無(wú)狀態(tài)性的"額外手段”之一。服務(wù)器可以設(shè)置或讀取Cookies中包含信息,借此維護(hù)用戶跟服務(wù)器會(huì)話中的狀態(tài)。
Cookie基于HTTP協(xié)議,也叫Web Cookie或?yàn)g覽器Cookie,是服務(wù)器發(fā)送到用戶瀏覽器并保存在客戶端本地的一小塊數(shù)據(jù),它會(huì)在瀏覽器下次向同一服務(wù)器再發(fā)起請(qǐng)求時(shí)被攜帶并發(fā)送到服務(wù)器上。通常,它用于告知服務(wù)端兩個(gè)請(qǐng)求是否來(lái)自同一瀏覽器,如保持用戶的登錄狀態(tài)。Cookie使基于無(wú)狀態(tài)的HTTP協(xié)議記錄穩(wěn)定的狀態(tài)信息成為了可能。
Cookie主要用于以下三個(gè)方面:
-
會(huì)話狀態(tài)管理(如用戶登錄狀態(tài)、購(gòu)物車、游戲分?jǐn)?shù)或其它需要記錄的信息)
-
個(gè)性化設(shè)置(如用戶自定義設(shè)置、主題等)
-
瀏覽器行為跟蹤(如跟蹤分析用戶行為等)
②Session
③cookie和session的比較:
-
cookie通常是在服務(wù)器生成,但也可以在客戶端生成,session是在服務(wù)器端生成的
-
session 將數(shù)據(jù)信息保存在服務(wù)器端,可以是內(nèi)存,文件,數(shù)據(jù)庫(kù)等多種形式,cookie 將數(shù)據(jù)保存在客戶端的內(nèi)存或文件中
-
單個(gè)cookie保存的數(shù)據(jù)不能超過(guò)4K,每個(gè)站點(diǎn)cookie個(gè)數(shù)有限制,比如IE8為50個(gè)、Firefox為50個(gè)、Opera為30個(gè);session存儲(chǔ)在服務(wù)器,沒(méi)有容量限制
-
cookie存放在用戶本地,可以被輕松訪問(wèn)和修改,安全性不高;session存儲(chǔ)于服務(wù)器,比較安全
-
cookie有會(huì)話cookie和持久cookie,生命周期為瀏覽器會(huì)話期的會(huì)話cookie保存在緩存,關(guān)閉瀏覽器窗口就消失,持久cookie被保存在硬盤,知道超過(guò)設(shè)定的過(guò)期時(shí)間;隨著服務(wù)端session存儲(chǔ)壓力增大,會(huì)根據(jù)需要定期清理session數(shù)據(jù)
-
session中有眾多數(shù)據(jù),只將sessionID這一項(xiàng)可以通過(guò)cookie發(fā)送至客戶端進(jìn)行保留,客戶端下次訪問(wèn)時(shí),在請(qǐng)求報(bào)文中的cookie會(huì)自動(dòng)攜帶sessionID,從而和服務(wù)器上的的session進(jìn)行關(guān)聯(lián)
面試小技巧:
如何保持 會(huì)話連接?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-832176.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-832176.html
到了這里,關(guān)于web基礎(chǔ)及http協(xié)議 (一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!