http,? 全稱:超文本傳輸協(xié)議(HyperText Transfer Protocol) 作用:設(shè)計(jì)之初是為了將超文本標(biāo)記語言(HTML)文檔從Web服務(wù)器傳送到客戶端的瀏覽器。現(xiàn)在http的作用已不局限于HTML的傳輸,。 版本:http/1.0 http/1.1* http/2.0 兩篇佳文 輸入網(wǎng)址之后發(fā)生了什么 Web開發(fā)新人培訓(xùn)系列 URL詳解 一個(gè)示例URL http://www./sj/test;id=8079?name=sviergn&x=true#stuff Schema: http host: www. path: /sj/test URL params: id=8079 Query String: name=sviergn&x=true Anchor: stuff scheme:指定低層使用的協(xié)議(例如:http, https, ftp) host:HTTP服務(wù)器的IP地址或者域名 port#:HTTP服務(wù)器的默認(rèn)端口是80,,這種情況下端口號(hào)可以省略。如果使用了別的端口,,必須指明,,例如 http://www.:8080/ path:訪問資源的路徑 url-params query-string:發(fā)送給http服務(wù)器的數(shù)據(jù) anchor:錨 無狀態(tài)的協(xié)議 http協(xié)議是無狀態(tài)的: 同一個(gè)客戶端的這次請(qǐng)求和上次請(qǐng)求是沒有對(duì)應(yīng)關(guān)系,對(duì)http服務(wù)器來說,,它并不知道這兩個(gè)請(qǐng)求來自同一個(gè)客戶端,。 解決方法:Cookie機(jī)制來維護(hù)狀態(tài) 既然Http協(xié)議是無狀態(tài)的,那么Connection:keep-alive 又是怎樣一回事? 無狀態(tài)是指協(xié)議對(duì)于事務(wù)處理沒有記憶能力,,服務(wù)器不知道客戶端是什么狀態(tài),。從另一方面講,打開一個(gè)服務(wù)器上的網(wǎng)頁和你之前打開這個(gè)服務(wù)器上的網(wǎng)頁之間沒有任何聯(lián)系,。 http消息結(jié)構(gòu) Request 消息的結(jié)構(gòu):三部分 第一部分叫Request line(請(qǐng)求行),, 第二部分叫http header, 第三部分是body 請(qǐng)求行:包括http請(qǐng)求的種類,請(qǐng)求資源的路徑,,http協(xié)議版本 http header:http頭部信息 body:發(fā)送給服務(wù)器的query信息 當(dāng)使用的是'GET' 方法的時(shí)候,,body是為空的(GET只能讀取服務(wù)器上的信息,post能寫入) GET /hope/ HTTP/1.1 //---請(qǐng)求行 Host: ce. Accept: */* Accept-Encoding: gzip, deflate, sdch Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.6 Cache-Control: max-age=0 Cookie:......... Referer: http://ce./hope/ User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.130 Safari/537.36 ---分割線--- POST /hope/ HTTP/1.1 //---請(qǐng)求行 Host: ce. Accept: */* Accept-Encoding: gzip, deflate, sdch Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.6 Cache-Control: max-age=0 Cookie:......... Referer: http://ce./hope/ User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.130 Safari/537.36 ...body... Response消息的結(jié)構(gòu) 也分為三部分,,第一部分叫request line, 第二部分叫request header,,第三部分是body request line:協(xié)議版本、狀態(tài)碼,、message request header:request頭信息 body:返回的請(qǐng)求資源主體 HTTP/1.1 200 OK Accept-Ranges: bytes Content-Encoding: gzip Content-Length: 4533 Content-Type: text/html Date: Sun, 06 Sep 2015 07:56:07 GMT ETag: '2788e6e716e7d01:0' Last-Modified: Fri, 04 Sep 2015 13:37:55 GMT Server: Microsoft-IIS/7.5 Vary: Accept-Encoding X-Powered-By: ASP.NET ... <> ... get 和 post 區(qū)別 http協(xié)議定義了很多與服務(wù)器交互的方法,,最基本的有4種,分別是GET,POST,PUT,*,。 一個(gè)URL地址用于描述一個(gè)網(wǎng)絡(luò)上的資源,,而HTTP中的GET, POST, PUT, * 就對(duì)應(yīng)著對(duì)這個(gè)資源的查,改,,增,,刪4個(gè)操作。 我們最常見的就是GET和POST了,。GET一般用于獲取/查詢資源信息,,而POST一般用于更新資源信息. GET 提交的數(shù)據(jù)會(huì)放在URL之后,以?分割URL和傳輸數(shù)據(jù),,參數(shù)之間以&相連,如EditPosts.aspx?name=test1&id=123456,。POST 方法是把提交的數(shù)據(jù)放在HTTP包的Body中,。 GET 提交的數(shù)據(jù)大小有限制(因?yàn)闉g覽器對(duì)URL的長度有限制),而POST方法提交的數(shù)據(jù)沒有限制. GET 方式需要使用Request.QueryString 來取得變量的值,,而POST方式通過Request.Form來獲取變量的值,。 GET 方式提交數(shù)據(jù),會(huì)帶來安全問題,,比如一個(gè)登錄頁面,,通過GET方式提交數(shù)據(jù)時(shí),用戶名和密碼將出現(xiàn)在URL上,,如果頁面可以被緩存或者其他人可以訪問這臺(tái)機(jī)器,,就可以從歷史記錄獲得該用戶的賬號(hào)和密碼. HTTP請(qǐng)求的Get與Post 狀態(tài)碼 Response 消息中的第一行叫做狀態(tài)行,由HTTP協(xié)議版本號(hào), 狀態(tài)碼,, 狀態(tài)消息 三部分組成,。 狀態(tài)碼用來告訴HTTP客戶端,HTTP服務(wù)器是否產(chǎn)生了預(yù)期的Response. HTTP/1.1中定義了 5 類狀態(tài)碼,。 狀態(tài)碼由三位數(shù)字組成,,第一個(gè)數(shù)字定義了響應(yīng)的類別 1XX 提示信息 - 表示請(qǐng)求已被成功接收,繼續(xù)處理 2XX 成功 - 表示請(qǐng)求已被成功接收,,理解,,接受 3XX 重定向 - 要完成請(qǐng)求必須進(jìn)行更進(jìn)一步的處理 4XX 客戶端錯(cuò)誤 - 請(qǐng)求有語法錯(cuò)誤或請(qǐng)求無法實(shí)現(xiàn) 5XX 服務(wù)器端錯(cuò)誤 - 服務(wù)器未能實(shí)現(xiàn)合法的請(qǐng)求 200 OK 請(qǐng)求被成功地完成,所請(qǐng)求的資源發(fā)送回客戶端 302 Found 重定向,,新的URL會(huì)在response中的Location中返回,,瀏覽器將會(huì)使用新的URL發(fā)出新的Request 304 Not Modified 文檔已經(jīng)被緩存,直接從緩存調(diào)用 400 Bad Request 客戶端請(qǐng)求與語法錯(cuò)誤,,不能被服務(wù)器所理解 403 Forbidden 服務(wù)器收到請(qǐng)求,,但是拒絕提供服務(wù) 404 Not Found 請(qǐng)求資源不存在 500 Internal Server Error 服務(wù)器發(fā)生了不可預(yù)期的錯(cuò)誤 503 Server Unavailable 服務(wù)器當(dāng)前不能處理客戶端的請(qǐng)求,一段時(shí)間后可能恢復(fù)正常 http reauest header http 請(qǐng)求頭包括很多鍵值對(duì),,這些鍵值對(duì)有什么意義與作用,?如何根據(jù)功能為他們分一下組呢? cache 頭域 If-Modified-Since 用法:If-Modified-Since: Thu, 09 Feb 2012 09:07:57 GMT 把瀏覽器端緩存頁面的最后修改時(shí)間發(fā)送到服務(wù)器去,,服務(wù)器會(huì)把這個(gè)時(shí)間與服務(wù)器上實(shí)際文件的最后修改時(shí)間進(jìn)行對(duì)比,。如果時(shí)間一致,那么返回304,,客戶端就直接使用本地緩存文件,。如果時(shí)間不一致,就會(huì)返回200和新的文件內(nèi)容,??蛻舳私拥街螅瑫?huì)丟棄舊文件,,把新文件緩存起來,,并顯示在瀏覽器中。 If-None-Match 用法:If-None-Match: '03f2b33c0bfcc1:0' If-None-Match和ETag一起工作,,工作原理是在HTTP Response中添加ETag信息,。 當(dāng)用戶再次請(qǐng)求該資源時(shí),將在HTTP Request 中加入If-None-Match信息(ETag的值),。如果服務(wù)器驗(yàn)證資源的ETag沒有改變(該資源沒有更新),,將返回一個(gè)304狀態(tài)告訴客戶端使用本地緩存文件。否則將返回200狀態(tài)和新的資源和Etag. 使用這樣的機(jī)制將提高網(wǎng)站的性能 Pragma:Pragma: no-cache Pargma只有一個(gè)用法,, 例如: Pragma: no-cache 作用: 防止頁面被緩存,, 在HTTP/1.1版本中,,它和Cache-Control:no-cache作用一模一樣 Cache-Control 用法: Cache-Control:Public 可以被任何緩存所緩存() Cache-Control:Private 內(nèi)容只緩存到私有緩存中 Cache-Control:no-cache 所有內(nèi)容都不會(huì)被緩存 作用:用來指定Response-Request遵循的緩存機(jī)制 Client 頭域 Accept 用法:Accept: */*,Accept: text/html 作用: 瀏覽器端可以接受的媒體類型,; Accept: */* 代表瀏覽器可以處理所有回發(fā)的類型,,(一般瀏覽器發(fā)給服務(wù)器都是發(fā)這個(gè)) Accept: text/html 代表瀏覽器可以接受服務(wù)器回發(fā)的類型為 text/html ;如果服務(wù)器無法返回text/html類型的數(shù)據(jù),,服務(wù)器應(yīng)該返回一個(gè)406錯(cuò)誤(non acceptable) Accept-Encoding 用法:Accept-Encoding: gzip, deflate 作用: 瀏覽器申明自己接收的文件編碼方法,,通常指定壓縮方法,是否支持壓縮,,支持什么壓縮方法(gzip,,deflate),(注意:這不是指字符編碼) Accept-Language 用法:Accept-Language: en-us 作用: 瀏覽器申明自己接收的語言,。 語言跟字符集的區(qū)別:中文是語言,,中文有多種字符集,比如big5,,gb2312,,gbk等等; User-Agent 用法: User-Agent: Mozilla/4.0...... 作用:告訴HTTP服務(wù)器,, 客戶端使用的操作系統(tǒng)和瀏覽器的名稱和版本. Accept-Charset 用法:Accept-Charset:utf-8 作用:瀏覽器申明自己接收的字符集,,這就是本文前面介紹的各種字符集和字符編碼,如gb2312,,utf-8(通常我們說Charset包括了相應(yīng)的字符編碼方案) Cookie/Login 頭域 Cookie Cookie: bdshare_firstime=1439081296143; ASP.NET_SessionId=rcqayd4ufldcke0wkbm1vhxb; pgv_pvi=7361416192; pgv_si=s6686106624; ce.80.ASPXAUTH=9E099592DD5A414BEECD8CF43CFC71664 作用: 最重要的header, 將cookie的值發(fā)送給HTTP 服務(wù)器 Entity 頭域 Content-Length 用法:Content-Length: 38 作用:發(fā)送給HTTP服務(wù)器數(shù)據(jù)的長度,。 Content-Type 用法:Content-Type: application/x-www-form-urlencoded 不常出現(xiàn),一般出現(xiàn)在response頭部,,用于指定數(shù)據(jù)文件類型 Miscellaneous 頭域 Referer 用法:Referer: http://ce./hope/ 作用:提供了Request的上下文信息的服務(wù)器,,告訴服務(wù)器我是從哪個(gè)鏈接過來的,比如從我主頁上鏈接到一個(gè)朋友那里,,他的服務(wù)器就能夠從HTTP Referer中統(tǒng)計(jì)出每天有多少用戶點(diǎn)擊我主頁上的鏈接訪問他的網(wǎng)站,。 Transport 頭域 Connection Connection: keep-alive: 當(dāng)一個(gè)網(wǎng)頁打開完成后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接不會(huì)關(guān)閉,,如果客戶端再次訪問這個(gè)服務(wù)器上的網(wǎng)頁,,會(huì)繼續(xù)使用這一條已經(jīng)建立的連接 Connection: close: 代表一個(gè)Request完成后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接會(huì)關(guān)閉,, 當(dāng)客戶端再次發(fā)送Request,,需要重新建立TCP連接 Host 用法:Host: ce. 作用: 請(qǐng)求報(bào)頭域主要用于指定被請(qǐng)求資源的Internet主機(jī)和端口號(hào)(默認(rèn)80),,它通常從HTTP URL中提取出來的 HTTP Response header Cache 頭域 Date 用法:Date: Sat, 11 Feb 2012 11:35:14 GMT 作用: 生成消息的具體時(shí)間和日期 Expires 用法:Expires: Tue, 08 Feb 2022 11:35:14 GMT 作用: 瀏覽器會(huì)在指定過期時(shí)間內(nèi)使用本地緩存 Vary 用法:Vary: Accept-Encoding Cookie/Login 頭域 P3P 用法: P3P: CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR 作用: 用于跨域設(shè)置Cookie, 這樣可以解決iframe跨域訪問cookie的問題 Set-Cookie 用法: Set-Cookie: sc=4c31523a; path=/; domain=.acookie.taobao.com 作用:非常重要的header, 用于把cookie 發(fā)送到客戶端瀏覽器,, 每一個(gè)寫入cookie都會(huì)生成一個(gè)Set-Cookie. Entity 頭域 ETag 用法:ETag: '03f2b33c0bfcc1:0' 作用: 和request header的If-None-Match 配合使用 Last-Modified 用法:Last-Modified: Wed, 21 Dec 2011 09:09:10 GMT 作用:用于指示資源的最后修改日期和時(shí)間。(實(shí)例請(qǐng)看上節(jié)的If-Modified-Since的實(shí)例) Content-Type 用法: Content-Type: text/html; charset=utf-8 Content-Type:text/html;charset=GB2312 Content-Type: image/jpeg 作用:WEB服務(wù)器告訴瀏覽器自己響應(yīng)的對(duì)象的類型和字符集 Content-Encoding 用法:Content-Encoding:gzip 作用:WEB服務(wù)器表明自己使用了什么壓縮方法(gzip,,deflate)壓縮響應(yīng)中的對(duì)象,。 Content-Language 用法: Content-Language:da WEB服務(wù)器告訴瀏覽器自己響應(yīng)的對(duì)象的語言 Miscellaneous 頭域 Server 用法:Server: Microsoft-IIS/7.5 作用:指明HTTP服務(wù)器的軟件信息 X-AspNet-Version 用法:X-AspNet-Version: 4.0.30319 作用:如果網(wǎng)站是用ASP.NET開發(fā)的,,這個(gè)header用來表示ASP.NET的版本 X-Powered-By 用法:X-Powered-By: ASP.NET 作用:表示網(wǎng)站是用什么技術(shù)開發(fā)的 Transport頭域 Connection 用法與作用: Connection: keep-alive:當(dāng)一個(gè)網(wǎng)頁打開完成后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接不會(huì)關(guān)閉,,如果客戶端再次訪問這個(gè)服務(wù)器上的網(wǎng)頁,,會(huì)繼續(xù)使用這一條已經(jīng)建立的連接 Connection: close:代表一個(gè)Request完成后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接會(huì)關(guān)閉,, 當(dāng)客戶端再次發(fā)送Request,,需要重新建立TCP連接 Location頭域 Location 用法:Location:http://ce./hope/ 作用: 用于重定向一個(gè)新的位置, 包含新的URL地址 |
|