HTTP緩存、cookies翰舌、訪問(wèn)控制嚣潜、發(fā)展、消息

3月25日 周一 HTTP緩存

·加速資源

更好地利用緩存資源椅贱,可以提高網(wǎng)站的性能和響應(yīng)速度懂算。為了優(yōu)化緩存,過(guò)期時(shí)間設(shè)置得盡量長(zhǎng)是一種很好的策略庇麦。對(duì)于定期或者頻繁更新的資源计技,這么做是比較穩(wěn)妥的,但對(duì)于那些長(zhǎng)期不更新的資源會(huì)有點(diǎn)問(wèn)題山橄。這些固定的資源在一定時(shí)間內(nèi)受益于這種長(zhǎng)期保存的緩存策略酸役,但一要更新就會(huì)很困難,特指網(wǎng)頁(yè)上引入的一些js/css文件驾胆,當(dāng)它們變動(dòng)時(shí)需要盡快更新線上資源。

revving技術(shù):不頻繁更新的文件會(huì)使用特定的命名方式:在URL后(通常是文件名后)加上版本號(hào)贱呐。加上版本號(hào)后的資源就被視作一個(gè)完全新的獨(dú)立資源丧诺,同時(shí)擁有一年甚至更長(zhǎng)的緩存過(guò)期時(shí)長(zhǎng)。弊端:所有引用這個(gè)資源的地方都需要更新鏈接奄薇。web開(kāi)發(fā)者通常會(huì)采用自動(dòng)化構(gòu)建工具在實(shí)際工作中完成這些瑣碎的工作驳阎。當(dāng)?shù)皖l更新的資源(js/css)變動(dòng)了,只用在高頻變動(dòng)的資源文件(html)里做入口的改動(dòng)馁蒂。好處:同時(shí)更新兩個(gè)緩存資源不會(huì)造成部分緩存先更新而引起新舊文件內(nèi)容不一致呵晚。對(duì)于互相有依賴關(guān)系的css和js文件,避免這種不一致性是非常重要的沫屡。

·緩存驗(yàn)證

觸發(fā)緩存驗(yàn)證:用戶點(diǎn)擊刷新按鈕時(shí)饵隙;緩存的響應(yīng)頭信息里含有“Cache-control:must-revalidate”的定義;在瀏覽器偏好設(shè)置里設(shè)置Advanced->Cache為強(qiáng)制緩存驗(yàn)證沮脖。

在緩存的文檔過(guò)期后金矛,需要進(jìn)行緩存驗(yàn)證或者重新獲取資源芯急。只有在服務(wù)器返回強(qiáng)校驗(yàn)器或者弱校驗(yàn)器時(shí)才會(huì)進(jìn)行驗(yàn)證。

RTags:

緩存的一種強(qiáng)校驗(yàn)器驶俊,響應(yīng)頭是一個(gè)對(duì)用戶代理(User Agent)不透明的值娶耍。對(duì)于像瀏覽器這樣的HTTP UA,不知道ETag代表什么饼酿,不能預(yù)測(cè)它的值是多少榕酒。如果資源請(qǐng)求的響應(yīng)頭里含有ETag违诗,客戶端可以在后續(xù)的請(qǐng)求的頭上帶上If-None-Match來(lái)驗(yàn)證緩存烈涮。

Last-Modified響應(yīng)頭可以作為一種弱校驗(yàn)器。弱:只能精確到一秒账磺。如果響應(yīng)頭里含有這個(gè)信息购披,客戶端可以在后續(xù)的請(qǐng)求頭上帶上If-Modified-Since來(lái)驗(yàn)證緩存杖挣。

當(dāng)向服務(wù)端發(fā)起緩存校驗(yàn)的請(qǐng)求時(shí),服務(wù)端后返回200 ok表示返回正常的結(jié)果或者304 Not Modified(不返回body)表示瀏覽器可以使用本地緩存文件刚陡。304響應(yīng)頭也可以同時(shí)更新緩存文件的過(guò)期時(shí)間惩妇。

3月26日 周二 HTTP緩存、HTTP cookies

·帶Vary的響應(yīng)

Vary HTTP響應(yīng)頭決定了對(duì)于后續(xù)的請(qǐng)求頭筐乳,如何判斷是請(qǐng)求一個(gè)新的資源還是使用緩存的文件歌殃。

當(dāng)緩存服務(wù)器收到一個(gè)請(qǐng)求,只有當(dāng)前的請(qǐng)求和原始(緩存)的請(qǐng)求頭跟緩存的響應(yīng)頭里的Vary都匹配蝙云,才能使用緩存的響應(yīng)氓皱。

使用vary頭有利于內(nèi)容服務(wù)的動(dòng)態(tài)多樣性。

Vary: User-Agent

緩存服務(wù)器需要通過(guò)UA(用戶代理)判斷是否使用緩存的頁(yè)面勃刨。如果需要區(qū)分移動(dòng)端和桌面端的展示內(nèi)容波材,利用這種方式就能避免在不同的終端展示錯(cuò)誤的布局。并且可以幫助搜索引擎更好地發(fā)現(xiàn)頁(yè)面的移動(dòng)版本身隐。

·HTTP Cookie

又稱Web Cookie廷区、瀏覽器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)信息成為了可能。

Cookies主要的作用:

a.會(huì)話狀態(tài)管理(如用戶登錄狀態(tài)叁巨、購(gòu)物車斑匪、游戲分?jǐn)?shù)等其它需要記錄的信息)

b.個(gè)性化設(shè)置(如用戶自定義設(shè)置、主題等)

c.瀏覽器行為跟蹤(如跟蹤分析用戶行為)

為何Cookie不用戶客戶端數(shù)據(jù)存儲(chǔ)俘种?

因?yàn)榉?wù)器指定Cookie后秤标,瀏覽器的每次請(qǐng)求都會(huì)攜帶Cookie數(shù)據(jù)绝淡,會(huì)帶來(lái)額外的性能開(kāi)銷(尤其是移動(dòng)環(huán)境下)。新的瀏覽器API已經(jīng)允許開(kāi)發(fā)者直接將數(shù)據(jù)存儲(chǔ)在本地苍姜。

·創(chuàng)建Cookie

當(dāng)服務(wù)器收到HTTP請(qǐng)求時(shí)牢酵,服務(wù)器可以在響應(yīng)頭里面添加一個(gè)Set-Cookie選項(xiàng)。瀏覽器收到響應(yīng)后通常會(huì)保存下Cookie衙猪,之后對(duì)該服務(wù)器每一次請(qǐng)求中都通過(guò)Cookie請(qǐng)求頭將Cookie信息發(fā)送給服務(wù)端馍乙。Cookie的過(guò)期時(shí)間、域垫释、路徑丝格、有效期、使用網(wǎng)站都可以指定棵譬。

Set-Cookie: <cookie名>=<cookie值> -------------服務(wù)器端Set-Cookie響應(yīng)頭部

·會(huì)話期Cookie

僅在會(huì)話期內(nèi)有效显蝌,瀏覽器關(guān)閉后它會(huì)自動(dòng)刪除。因此會(huì)話期它不需要指定過(guò)期時(shí)間(Expires)或有效期(Max-age)订咸。但是有些瀏覽器提供了會(huì)話恢復(fù)功能曼尊,即保存下會(huì)話期Cookie。

·持久性Cookie

可以指定一個(gè)Expires或Max-Age脏嚷。

Set-Cookie:id=<...>;Expires:<...> ————過(guò)期時(shí)間設(shè)定的日期和時(shí)間只與客戶端相關(guān)

·Cookie的Secure和HTTPOnly標(biāo)記

標(biāo)記為Secure的Cookie只應(yīng)通過(guò)被HTTP協(xié)議加密過(guò)的請(qǐng)求發(fā)送給服務(wù)端骆撇。但敏感信息不應(yīng)通過(guò)Cookie傳輸,Cookie有與其固有的不安全性父叙,如果包含服務(wù)端Session信息的Cookie不想被客戶端JS腳本調(diào)用神郊,就應(yīng)設(shè)置為HTTPOnly標(biāo)記。

·Cookie的作用域

作用域——即Cookie應(yīng)該發(fā)送給哪些URL趾唱。

Domain標(biāo)識(shí)指定了哪些主機(jī)可以接受Cookie涌乳。默認(rèn)為當(dāng)前文檔的主機(jī)(不包含子域名)。但指定了甜癞,則一般包含子域名爷怀。

Path標(biāo)識(shí)指定了主機(jī)下的哪些路徑可以接受Cookie(該URL路徑必須存在于請(qǐng)求URL中)。以“/”為路徑分隔符带欢,子路徑也會(huì)被匹配。

·JS通過(guò)Document.cookies訪問(wèn)Cookie

document.cookie="..."? ----------通過(guò)該屬性可創(chuàng)建新的Cookie烤惊,也可通過(guò)該屬性訪問(wèn)非HTTPOnly標(biāo)記的Cookie乔煞。

·安全

當(dāng)機(jī)器處于不安全環(huán)境時(shí),切記不能通過(guò)HTTP Cookie存儲(chǔ)柒室、傳輸敏感信息渡贾。

會(huì)話劫持和XSS:在Web應(yīng)用中,Cookie常用來(lái)標(biāo)記用戶和授權(quán)對(duì)話雄右。因此如果Web應(yīng)用的Cookie被竊取空骚,可能導(dǎo)致授權(quán)用戶的會(huì)話受到攻擊纺讲。常用的竊取Cookie方法有利用社會(huì)工程學(xué)攻擊和利用應(yīng)用程序漏洞進(jìn)行XSS攻擊。HTTPOnly類型的Cookie由于阻止了JS對(duì)其的訪問(wèn)性能而能在一定程度上緩解此類攻擊囤屹。

跨站請(qǐng)求偽造(CSRF):例如在不安全聊天室或論壇上的一張圖片熬甚,實(shí)際上是一個(gè)給你銀行服務(wù)器發(fā)送提現(xiàn)的請(qǐng)求。因?yàn)槿绻阒耙训顷懥算y行賬戶并且Cookie仍然有效(還沒(méi)有其他驗(yàn)證步驟)肋坚,錢就會(huì)被轉(zhuǎn)走乡括。阻止辦法:對(duì)用戶輸入進(jìn)行過(guò)濾、任何敏感操作都需要確認(rèn)智厌、用于敏感信息的Cookie只能擁有較短的生命周期等诲泌。

·追蹤和隱私

第三方Cookie:每個(gè)Cookie都有與之相關(guān)聯(lián)的域(Domain),如果Cookie的域和頁(yè)面的域相同铣鹏,那么我們稱這個(gè)Cookie為第一方Cookie(first-party cookie)敷扫,如果不同,則稱之為第三方Cookie(third-party cookie)诚卸。一個(gè)頁(yè)面包含圖片或存放在其他域上的資源(如圖片廣告)葵第,第一方的Cookie也只會(huì)發(fā)送給設(shè)置它們的服務(wù)器。通過(guò)第三方組件發(fā)送的第三方Cookie主要用于廣告和網(wǎng)絡(luò)追蹤惨险。

禁止追蹤:Do-Not-Track

僵尸Cookie:即刪不掉的Cookie羹幸,刪除后甚至?xí)詣?dòng)重建。

3月27日 周三 HTTP訪問(wèn)控制(CORS)

跨域資源共享(CORS)是一種機(jī)制辫愉,它使用額外的HTTP頭來(lái)告訴瀏覽器栅受,讓運(yùn)行在一個(gè)origin(domain)上的Web應(yīng)用被準(zhǔn)許訪問(wèn)來(lái)自不同源服務(wù)器上的指定的資源。當(dāng)一個(gè)資源從與該資源本身所在服務(wù)器不同的域恭朗、協(xié)議或端口請(qǐng)求一個(gè)資源時(shí)屏镊,資源會(huì)發(fā)起一個(gè)跨域HTTP請(qǐng)求。

·跨域共享標(biāo)準(zhǔn)允許下列場(chǎng)景中使用跨域HTTP請(qǐng)求:

a.由XMLHttpRequest或Fetch發(fā)起的跨域HTTP請(qǐng)求

b.Web字體(CSS中通過(guò)@font-face)

c.WebGL貼圖

d.使用drawImage將Images/video畫(huà)面繪制到canvas

e.樣式表(使用CSSOM)

·功能概述

跨域資源共享標(biāo)準(zhǔn)新增了一組HTTP首部字段痰腮,允許服務(wù)器聲明哪些源站通過(guò)瀏覽器有權(quán)限訪問(wèn)哪些資源而芥。規(guī)范要求,對(duì)那些可能對(duì)服務(wù)器數(shù)據(jù)類型產(chǎn)生副作用的HTTP請(qǐng)求方法(特別是GET以外的HTTP請(qǐng)求或者搭配某些MIME類型的POST請(qǐng)求)膀值,瀏覽器必須首先使用OPTIONS方法發(fā)起一個(gè)預(yù)檢請(qǐng)求棍丐,從而獲知服務(wù)端是否允許該跨域請(qǐng)求。服務(wù)器確認(rèn)允許之后沧踏,才發(fā)起實(shí)際的HTTP請(qǐng)求歌逢。在預(yù)檢請(qǐng)求返回中,服務(wù)端也可以通知客戶端翘狱,是否需要攜帶身份憑證(包括Cookies和HTTP認(rèn)證相關(guān)數(shù)據(jù))秘案。

3月28日 周四 HTTP訪問(wèn)控制(CORS)

·三個(gè)訪問(wèn)控制示例

(未記錄發(fā)送請(qǐng)求的條件)

1.簡(jiǎn)單請(qǐng)求

不會(huì)觸發(fā)CORS預(yù)檢請(qǐng)求的請(qǐng)求。(如使用了GET、HEAD阱高、POST方法赚导;請(qǐng)求中任意XMLHTTPRequestUpload對(duì)象均沒(méi)有注冊(cè)任何事件監(jiān)聽(tīng)器;XMLHTTPRequestUpload對(duì)象可以使用XMLHTTPRequest.upload屬性訪問(wèn)赤惊;請(qǐng)求中沒(méi)有ReadableStream對(duì)象...)

HTTP請(qǐng)求首部:Origin:<請(qǐng)求來(lái)源>

HTTP響應(yīng)首部:Access-Control-Allow_Origin: <該資源允許哪些外域訪問(wèn)>

2.預(yù)檢請(qǐng)求

需預(yù)檢的請(qǐng)求必須首先使用OPTIONS方法(HTTP/1.1 用以從服務(wù)器獲取更多信息吼旧,不會(huì)對(duì)服務(wù)器資源產(chǎn)生影響)發(fā)起一個(gè)預(yù)檢請(qǐng)求到服務(wù)器,以獲知服務(wù)器是否允許該實(shí)際請(qǐng)求荐捻。預(yù)檢請(qǐng)求的使用可以避免跨域請(qǐng)求對(duì)服務(wù)器用戶數(shù)據(jù)產(chǎn)生的未預(yù)期的影響黍少。(如請(qǐng)求包含自定義的請(qǐng)求首部字段;請(qǐng)求的Content-Type不屬于application/x-www-form-urlencoded处面、multipart/form-data厂置、text/plain...)

預(yù)檢請(qǐng)求:

//告知服務(wù)器實(shí)際請(qǐng)求將使用POST方法

Access-Control-Request-Method: POST?

//告知服務(wù)器實(shí)際請(qǐng)求將攜帶兩個(gè)自定義首部字段X-PINGOTHER, Content-Type,服務(wù)器據(jù)此決定魂角,該實(shí)際請(qǐng)求是否被允許

Access-Control-Request-Headers: X-PINGOTHER, Content-Type

預(yù)檢請(qǐng)求響應(yīng):

//服務(wù)器允許客戶端使用POST昵济,GET,OPTIONS方法發(fā)起請(qǐng)求野揪,該字段僅限于在需要訪問(wèn)控制中的場(chǎng)景中使用

Access-Control-Allow-Methods: POST, GET, OPTIONS

//服務(wù)器允許請(qǐng)求中攜帶字段...

Access-Control-Allow-Headers: X-PINGOTHER, Content-Type

//該響應(yīng)的有效時(shí)間為86400秒(24小時(shí))访忿,在有效時(shí)間內(nèi),瀏覽器無(wú)須為同一請(qǐng)求再次發(fā)起預(yù)檢請(qǐng)求斯稳。瀏覽器自身維護(hù)了一個(gè)最大有效時(shí)間海铆,如果該首部字段的值超過(guò)了最大有效時(shí)間,將不會(huì)生效挣惰。

Access-Control-Max-Age: 86400

3.附帶身份憑證的請(qǐng)求

Fetch和CORS可以基于HTTP cookies和HTTP認(rèn)證信息發(fā)送身份憑證卧斟。

//實(shí)現(xiàn)向服務(wù)器發(fā)送Cookies。如果服務(wù)器端的響應(yīng)中未攜帶Access-Control-Allow-Credentials: true憎茂,瀏覽器將不會(huì)把響應(yīng)內(nèi)容返回給請(qǐng)求的發(fā)送者珍语。

invocation.withCredentials = true;?

?對(duì)于附帶身份憑證的請(qǐng)求,服務(wù)器不得設(shè)置Access-Control-Allow-Origin 的值為“*”(該資源可以被任意外域訪問(wèn))因?yàn)檎?qǐng)求的首部中攜帶了Cookie信息竖幔,如果設(shè)置了請(qǐng)求將會(huì)失敗板乙。

3月29日 周五 HTTP訪問(wèn)控制(CORS),HTTP的發(fā)展

HTTP響應(yīng)首部字段

origin參數(shù)的值指定了允許訪問(wèn)該資源的外域URI拳氢。對(duì)于不需要攜帶身份憑證的請(qǐng)求募逞,服務(wù)器可以指定該字段的值為通配符,表示允許來(lái)自所有域的請(qǐng)求馋评。如果服務(wù)端制定了具體的域名而非*凡辱,那么響應(yīng)首部中的Vary字段的值必須包括Origin,這將告訴客戶端:服務(wù)端對(duì)不同的源站返回不同的內(nèi)容栗恩。

Access-Control-Allow-Origin: <origin>|*

在跨域訪問(wèn)時(shí),XMLHTTPRequest對(duì)象的getResponseHeader()方法只能拿到一些最基本的響應(yīng)頭(Cache-Control、Content-Language磕秤、Content-Type乳乌、Expires、Last-Modified市咆、Pragma)汉操,如要訪問(wèn)其他頭,則需要服務(wù)器設(shè)置本響應(yīng)頭蒙兰。

Access-Control-Expose-Headers:<...>

指定了preflight(預(yù)檢)請(qǐng)求的結(jié)果能夠被緩存多久

Access-Control-Max-Age: <delta-seconds>

指定了當(dāng)瀏覽器的credentials設(shè)置為true時(shí)是否允許瀏覽器讀取response內(nèi)容磷瘤。當(dāng)用在對(duì)preflight請(qǐng)求的響應(yīng)中它指定了實(shí)際的請(qǐng)求是否可以使用credentials。

Access-Control-Allow-Credentials: true

用于預(yù)檢請(qǐng)求的響應(yīng)搜变,指明了實(shí)際請(qǐng)求所允許使用的HTTP方法

Access-Control-Allow-Methods: <method>[,<method>]*

用于預(yù)檢請(qǐng)求的響應(yīng)采缚,指明了實(shí)際請(qǐng)求中允許攜帶的首部字段

Access-Control-Allow-Headers: <field-name>[,<field-name]*

HTTP請(qǐng)求首部字段

預(yù)檢請(qǐng)求或?qū)嶋H請(qǐng)求的源站,參數(shù)為源站URI,不包含任何路徑信息挠他,只是服務(wù)器名稱

Origin:<origin>

用于預(yù)檢請(qǐng)求扳抽,將實(shí)際請(qǐng)求所使用的HTTP方法告訴服務(wù)器

Access-Control-Request-Method: <method>

用于預(yù)檢請(qǐng)求,將實(shí)際請(qǐng)求所攜帶的首部字段告訴服務(wù)器殖侵。

Access-Control-Request-Headers: <field-name>[,<field-name>]*

HTTP/2在HTTP/1.1幾處基本的不同

HTTP/2是二進(jìn)制協(xié)議而不是文本協(xié)議贸呢。不再可讀,也不可無(wú)障礙的手動(dòng)創(chuàng)建拢军,改善的優(yōu)化技術(shù)現(xiàn)在可被實(shí)施楞陷。

這是一個(gè)復(fù)用協(xié)議。并行的請(qǐng)求能在同一個(gè)鏈接在處理茉唉,移除了HTTP/1.x中順序和阻塞的約束固蛾。

壓縮了headers。因?yàn)閔eaders在一系列請(qǐng)求中常常是相似的赌渣,其移除了重復(fù)和傳輸重復(fù)數(shù)據(jù)的成本魏铅。

其允許服務(wù)器在客戶端緩存中填充數(shù)據(jù),通過(guò)一個(gè)叫服務(wù)器推送的機(jī)制來(lái)提前請(qǐng)求坚芜。

3月30日 周六 HTTP消息

HTTP消息是服務(wù)器和客戶端之間交換數(shù)據(jù)的方式览芳。有兩種類型的消息︰ 請(qǐng)求--由客戶端發(fā)送用來(lái)觸發(fā)一個(gè)服務(wù)器上的動(dòng)作;響應(yīng)--來(lái)自服務(wù)器的應(yīng)答鸿竖。

HTTP請(qǐng)求和響應(yīng)具有相似的結(jié)構(gòu):

起始行:描述要執(zhí)行的請(qǐng)求沧竟、對(duì)應(yīng)的狀態(tài)(成功或失敗)缚忧∥虮茫總是單行。

可選的HTTP頭集合:指明請(qǐng)求或描述消息正文闪水。

空行:指示所有關(guān)于請(qǐng)求的元數(shù)據(jù)已經(jīng)發(fā)送完畢糕非。

可選的包含請(qǐng)求相關(guān)數(shù)據(jù)的正文或響應(yīng)相關(guān)的文檔:正文的大小有起始行的HTTP頭來(lái)指定。

HTTP請(qǐng)求

起始行

a.一個(gè)HTTP方法:如GET/PUT/POST/HEAD/OPTIONS,描述要執(zhí)行的動(dòng)作朽肥。GET表示要獲取資源禁筏,POST表示向服務(wù)器推送數(shù)據(jù)。

b.請(qǐng)求目標(biāo):通常是一個(gè)URL或者是協(xié)議衡招、端口和域名的絕對(duì)路徑

c.HTTP版本

Headers

Body:不是所有請(qǐng)求都有一個(gè)body篱昔,例如獲取資源的請(qǐng)求GET,HEAD,DELETE,OPTIONS不需要,有些請(qǐng)求將數(shù)據(jù)發(fā)送到服務(wù)器以便更新數(shù)據(jù):常見(jiàn)POST請(qǐng)求(包含HTML表單數(shù)據(jù))始腾。

HTTP響應(yīng)

狀態(tài)行(起始行)

a.協(xié)議版本

b.狀態(tài)碼:常見(jiàn)200州刽,404,302

c.狀態(tài)文本:一個(gè)簡(jiǎn)短純粹的信息浪箭,通過(guò)狀態(tài)碼的文本描述幫助人們理解該HTTP信息穗椅。

Headers

Body:不是所有響應(yīng)都有body,如具有狀態(tài)碼的響應(yīng)山林,通常不會(huì)有body房待。

HTTP/2幀

HTTP/1.x報(bào)文性能缺陷:

a.Header不像body,不會(huì)被壓縮驼抹。

b.兩個(gè)報(bào)文之間的header通常非常相似桑孩,但它們?nèi)匀辉谶B接中重復(fù)傳輸。

c.無(wú)法復(fù)用框冀。當(dāng)在同一個(gè)服務(wù)器打開(kāi)幾個(gè)連接時(shí):TCP熱連接比冷連接更加有效流椒。

HTTP/2新的引入:

將HTTP/1.x消息分成幀并嵌入到流中。數(shù)據(jù)幀和報(bào)頭幀分離明也,從而允許報(bào)頭壓縮宣虾。將多個(gè)流組合,這是一個(gè)被稱為多路復(fù)用的過(guò)程温数,它允許更有效的底層TCP連接绣硝。

HTTP/2 幀機(jī)制是在 HTTP/1.x 語(yǔ)法和底層傳輸協(xié)議之間增加了一個(gè)新的中間層,而沒(méi)有從根本上修改它撑刺,即它是建立在經(jīng)過(guò)驗(yàn)證的機(jī)制之上鹉胖。

3月31日 周日 典型的HTTP會(huì)話

會(huì)話三階段(如HTTP此類CS協(xié)議)

客戶端建立一條TCP連接(如果傳輸層不是 TCP,也可以是其他適合的連接)够傍。

客戶端發(fā)送請(qǐng)求并等待應(yīng)答甫菠。

服務(wù)器處理請(qǐng)求并送回應(yīng)答,回應(yīng)包括一個(gè)狀態(tài)碼和對(duì)應(yīng)的數(shù)據(jù)冕屯。

從 HTTP/1.1 開(kāi)始寂诱,連接在完成第三階段后不再關(guān)閉,客戶端可以再次發(fā)起新的請(qǐng)求安聘。這意味著第二步和第三步可以連續(xù)進(jìn)行數(shù)次痰洒。

建立連接

連接由客戶端發(fā)起建立瓢棒,在HTTP中打開(kāi)連接意味著在底層傳輸層啟動(dòng)連接,通常是 TCP丘喻。

使用TCP時(shí)音羞,HTTP服務(wù)器默認(rèn)端口號(hào)是80。

?CS模型不允許服務(wù)器在沒(méi)有顯示請(qǐng)求時(shí)發(fā)送數(shù)據(jù)給客戶端仓犬,為了解決這一問(wèn)題,有若干技術(shù):例如舍肠,使用XMLHTTPRequest 或 Fetch API 周期性地請(qǐng)求服務(wù)器搀继,使用HTML WebSockets API等。

發(fā)送客戶端請(qǐng)求

a.請(qǐng)求方法及請(qǐng)求參數(shù)

b.HTTP首部翠语,為服務(wù)器提供關(guān)于所需數(shù)據(jù)的信息叽躯,或是一些改變請(qǐng)求行為的數(shù)據(jù)(如當(dāng)數(shù)據(jù)已經(jīng)被緩存,就不再應(yīng)答)肌括。以空行結(jié)束点骑。

c.可選數(shù)據(jù)塊,主要被POST方法使用

服務(wù)器響應(yīng)結(jié)構(gòu)

a.狀態(tài)行

b.HTTP首部谍夭,為客戶端提供關(guān)于所發(fā)送數(shù)據(jù)的一些信息(如類型黑滴,數(shù)據(jù)大小,使用的壓縮算法紧索,緩存指示)袁辈。以空行結(jié)束。

c.數(shù)據(jù)塊珠漂,包含了相應(yīng)的數(shù)據(jù)(如果有的話)晚缩。

響應(yīng)狀態(tài)碼

200:OK

301:Moved Permanently,請(qǐng)求資源的URI已被改變媳危。

404:Not Found

?URL:Uniform/Universal Resource Locator 荞彼,統(tǒng)一資源定位符,子類待笑。

? ? URI:Uniform Resource Identifier 的縮寫(xiě)鸣皂,統(tǒng)一資源標(biāo)識(shí)符,代表一種標(biāo)準(zhǔn),父類。

二者的區(qū)別在于滋觉,URI 表示請(qǐng)求服務(wù)器的路徑签夭,定義這么一個(gè)資源。而 URL 同時(shí)說(shuō)明要如何訪問(wèn)這個(gè)資源椎侠。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末第租,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子我纪,更是在濱河造成了極大的恐慌慎宾,老刑警劉巖丐吓,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異趟据,居然都是意外死亡券犁,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門汹碱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)粘衬,“玉大人,你說(shuō)我怎么就攤上這事咳促≈尚拢” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵跪腹,是天一觀的道長(zhǎng)褂删。 經(jīng)常有香客問(wèn)我,道長(zhǎng)冲茸,這世上最難降的妖魔是什么屯阀? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮轴术,結(jié)果婚禮上难衰,老公的妹妹穿的比我還像新娘。我一直安慰自己膳音,他們只是感情好召衔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著祭陷,像睡著了一般苍凛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上兵志,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天醇蝴,我揣著相機(jī)與錄音,去河邊找鬼想罕。 笑死悠栓,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的按价。 我是一名探鬼主播惭适,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼楼镐!你這毒婦竟也來(lái)了癞志?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤框产,失蹤者是張志新(化名)和其女友劉穎凄杯,沒(méi)想到半個(gè)月后错洁,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡戒突,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年屯碴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片膊存。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡导而,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出隔崎,到底是詐尸還是另有隱情嗡载,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布仍稀,位于F島的核電站,受9級(jí)特大地震影響埂息,放射性物質(zhì)發(fā)生泄漏技潘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一千康、第九天 我趴在偏房一處隱蔽的房頂上張望享幽。 院中可真熱鬧,春花似錦拾弃、人聲如沸值桩。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)奔坟。三九已至,卻和暖如春搭盾,著一層夾襖步出監(jiān)牢的瞬間咳秉,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工鸯隅, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留澜建,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓蝌以,卻偏偏與公主長(zhǎng)得像炕舵,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子跟畅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容