国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Http請求的方法

2019-11-08 02:03:57
字體:
供稿:網(wǎng)友

本文轉(zhuǎn)自http://blog.csdn.net/fhzaitian/article/details/51249000

Web開發(fā)最常見的就是HTTP(超文本傳輸協(xié)議)通信協(xié)議,該協(xié)議(HTTP)設(shè)計的目的是確保服務(wù)器與客戶端之間的正確通信, 

HTTP請求方法并不是只有GET和POST,只是最常用的。據(jù)RFC2616標(biāo)準(zhǔn)(現(xiàn)行的HTTP/1.1)得知,通常有以下8種方法:OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE和CONNECT。這8種我們一起來分析一下,其中最常用的也就是前4種。最最常用的就是前2個。我們一起來看看,^_^

(1)GET請求

Http get 方法: 主要用于向指定的URL(URI)請求資源(資源文件或是數(shù)據(jù)均可), 可以帶參數(shù)也可以不帶參數(shù), 帶參數(shù)時,參數(shù)是明文傳遞,你可以在瀏覽器的地址欄中看到參數(shù)名及參數(shù)值,get安全性不高,所以常用于安全性要求低的場合, 比如登錄后請求數(shù)據(jù)。

經(jīng)常使用GET提交方法,因為通過GET來提交表單沒有任何負(fù)面影響并且是冪等的。

從理論上講,如果請求具有冪等性就可以使用GET,所謂冪等是指多個請求返回相同的結(jié)果。

(2)POST請求

Http post方法:主要是向指定的URL(URI)提交數(shù)據(jù), 通常用于表單發(fā)送,psot所傳遞的數(shù)據(jù)或參數(shù)不是已明文形式存在的,而是封裝后的,因此相對安全系數(shù)高,像注冊、登錄、提交表單都是用該方法實現(xiàn)的。 

實際上,相應(yīng)的服務(wù)器方法可能會以某種方式修改狀態(tài),所以一般情況下這是不成立的,只是一種標(biāo)準(zhǔn)。GET與POST的區(qū)別在于所能攜帶信息的大小,在許多情況下,瀏覽器和服務(wù)器會限制URL的長度(GET利用URL向服務(wù)器發(fā)送數(shù)據(jù))。一般來講,如果請求是從服務(wù)器獲取數(shù)據(jù)應(yīng)該使用GET;換句話說,要避免通過GET方式改變服務(wù)器上的狀態(tài)。當(dāng)改變服務(wù)器上的狀態(tài)時應(yīng)該使用POST方法,POST不會限制發(fā)送給服務(wù)器的信息的大小,而且POST請求不能保證是冪等的。在實際開發(fā)過程中,大多數(shù)請求可能都是GET請求,不過如果需要,也完全可以使用POST。

(3)PUT請求Http put方法: 功能跟post相似,用來將信息放到請求的URL(URI)上,put方法是冪等方法, post非冪等方法,put在請求時容易造成數(shù)據(jù)冗余, 而post則不然。(4)DELETEHttp delete方法: 用于刪除請求URL上的某個資源, 該請求返回狀態(tài)有3.1. 200:表示刪除請求被成功執(zhí)行,返回被刪除的資源2. 202:表示刪除請求被接受,但還沒有被執(zhí)行3. 204:表示刪除請求被執(zhí)行,但沒有返回被刪除的資源HTTP提供了一個與PUT方法對應(yīng)的DELETE方法。一個DELETE請求將需要從Web服務(wù)器刪除的內(nèi)容指定為請求行中的資源部分。DELETE方法唯一有趣的地方在于當(dāng)你接收了一個標(biāo)識為200 OK的響應(yīng)的時候,那并不意味著指定的資源已經(jīng)被刪除了。那僅僅說明服務(wù)器接收到了刪除資源的命令。這一例外允許了出于安全考慮的人為的干預(yù)。(5)HEAD官方定義HEAD方法跟GET方法相同,只不過服務(wù)器響應(yīng)時不會返回消息體。一個HEAD請求的響應(yīng)中,HTTP頭中包含的元信息應(yīng)該和一個GET請求的響應(yīng)消息相同。這種方法可以用來獲取請求中隱含的元信息,而不用傳輸實體本身。也經(jīng)常用來測試超鏈接的有效性、可用性和最近的修改。一個HEAD請求的響應(yīng)可被緩存,也就是說,響應(yīng)中的信息可能用來更新之前緩存的實體。如果當(dāng)前實體跟緩存實體的閾值不同(可通過Content-Length、Content-md5、ETag或Last-Modified的變化來表明),那么這個緩存就被視為過期了。簡而言之HEAD請求常常被忽略,但是能提供很多有用的信息,特別是在有限的速度和帶寬下。主要有以下特點:1、只請求資源的首部;2、檢查超鏈接的有效性;3、檢查網(wǎng)頁是否被修改;4、多用于自動搜索機器人獲取網(wǎng)頁的標(biāo)志信息,獲取rss種子信息,或者傳遞安全認(rèn)證信息等(6)OPTIONSOPTIONS請求方法的主要用途有兩個:1、獲取服務(wù)器支持的HTTP請求方法;也是黑客經(jīng)常使用的方法。2、用來檢查服務(wù)器的性能。例如:Ajax進(jìn)行跨域請求時的預(yù)檢,需要向另外一個域名的資源發(fā)送一個HTTP OPTIONS請求頭,用以判斷實際發(fā)送的請求是否安全。以下是官方文檔:OPTIONS方法是用于請求獲得由Request-URI標(biāo)識的資源在請求/響應(yīng)的通信過程中可以使用的功能選項。通過這個方法,客戶端可以在采取具體資源請求之前,決定對該資源采取何種必要措施,或者了解服務(wù)器的性能。該請求方法的響應(yīng)不能緩存。如果這個OPTIONS請求包含一個正文(有Content-Length或Transfer-Encoding存在),則必須有Content-Type來指定媒體類型。雖然規(guī)范里沒有定義這種正文的用法,但是HTTP將來的擴(kuò)展可能會用它來查詢服務(wù)器上更詳細(xì)的信息。不支持該擴(kuò)展的服務(wù)器可以忽略該請求正文。如果該URI是一個星號(“*”),OPTIONS請求將試圖應(yīng)用于服務(wù)器,而不是某個指定資源。由于服務(wù)器的通信選項通常依賴于資源,所以此“*”請求只能作為“ping”或者“no-op”方法;或者用來測試服務(wù)器的性能。例如,用來測試HTTP/1.1代理。如果該URI不是星號,則只能用來獲取該資源通信中可用的選項。得到的200響應(yīng)應(yīng)該包含一個頭域,指明服務(wù)器實現(xiàn)的和適用于該資源的可選特征(如:Allow),可能還包括該規(guī)范尚未定義的擴(kuò)展。如果有響應(yīng)正文,則應(yīng)包含關(guān)于通信選項的信息。本規(guī)范沒有定義該正文格式,但可能在HTTO將來的擴(kuò)展中定義。可以利用內(nèi)容協(xié)商來選擇合適的響應(yīng)格式。如果沒有響應(yīng)正文,響應(yīng)必須包含Content-Length,并且值為“0”。請求頭的Max-Forwards用來請求特定代理。當(dāng)代理收到一個允許URI轉(zhuǎn)發(fā)的OPTIONS請求,則檢查Max-Forwards。如果Max-Forwards值為0,則不能轉(zhuǎn)發(fā)該消息;相反,代理會將自己的通信選項去響應(yīng)。如果Max-Forwards是正整數(shù),代理轉(zhuǎn)發(fā)請求的時候會將該值減1。如果請求中沒有Max-Forwards,轉(zhuǎn)發(fā)的請求也不會有。(7)TRACETRACE_Method是HTTP(超文本傳輸)協(xié)議定義的一種協(xié)議調(diào)試方法,該方法會使服務(wù)器原樣返回任意客戶端請求的任何內(nèi)容。TRACE和TRACK是用來調(diào)試web服務(wù)器連接的HTTP方式。支持該方式的服務(wù)器存在跨站腳本漏洞,通常在描述各種瀏覽器缺陷的時候,把"Cross-Site-Tracing"簡稱為XST。攻擊者可以利用此漏洞欺騙合法用戶并得到他們的私人信息。(這個命令好怕怕,無知好嚇人啊)如何關(guān)閉Apache的TRACE請求 ?虛擬主機用戶可以在.htaccess文件中添加如下代碼過濾TRACE請求: RewriteEngine onRewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)RewriteRule .* - [F] ?服務(wù)器用戶在httpd.conf尾部添加如下指令后重啟apache即可: TraceEnable off (8)CONNECTCONNECT這個方法的作用就是把服務(wù)器作為跳板,讓服務(wù)器代替用戶去訪問其它網(wǎng)頁,之后把數(shù)據(jù)原原本本的返回給用戶。這樣用戶就可以訪問到一些只有服務(wù)器上才能訪問到的網(wǎng)站了,這就是HTTP代理。說到代理,我想各位在黨的旗幟下成長的同學(xué)都不會陌生吧。我們使用的網(wǎng)絡(luò)被稱為天朝局域網(wǎng),它離Internet還有很長的一段路要走。所以,我們就必須越過重重坎坷去摸一摸這個世界本來的樣子。哎呀,不小心又扯了一下蛋。下面來說說這個CONNECT方法的用法。  CONNECT方法是需要使用TCP直接去連接的,所以不適合在網(wǎng)頁開發(fā)中使用,不過網(wǎng)頁開發(fā)中也用不到這玩意兒。要是使用CONNECT方法,首先要讓服務(wù)器監(jiān)聽一個端口來接收CONNECT方法的請求。這個是服務(wù)器軟件做的事情,我們只要配置好它就可以了,除非你閑著無聊想自己實現(xiàn)一個這樣的服務(wù)器。在服務(wù)器監(jiān)聽了端口以后就是客戶端的請求,我們必須告訴代理服務(wù)器我們想要訪問哪個Internet服務(wù)器。假如我想通過代理訪問這個博客(www.web-tinker.com),我就需要建立一個TCP連接,連接到服務(wù)器監(jiān)聽的那個端口,然后給服務(wù)器發(fā)送一個HTTP頭。下面就是這個HTTP頭的內(nèi)容:CONNECT www.web-tinker.com:80 HTTP/1.1Host: www.web-tinker.com:80PRoxy-Connection: Keep-AliveProxy-Authorization: Basic *Content-Length: 0  所有的HTTP頭都是類似的,第一行是方法名、主要參數(shù)、HTTP版本。接著一行一個參數(shù),最后用兩個換行來結(jié)束。這個HTTP頭其實也沒什么好介紹的,唯一一個重點的地方就是星號的部分,這個地方應(yīng)該填寫驗證的用戶名和密碼。而且,用戶名和密碼也是有固定格式的。要把用戶名和密碼用冒號連接起來,再經(jīng)過BASE64的編碼后才可以使用。假如用戶名是abc密碼是123,那么星號的地方就應(yīng)該換上YWJjOjEyMw==,也就是abc:123經(jīng)過BASE64編碼的結(jié)果。  發(fā)送完這個請求之后,就是服務(wù)器端響應(yīng)請求了。如果用戶名和密碼驗證通過,就會返回一個狀態(tài)碼為200的響應(yīng)信息。雖然狀態(tài)碼是200,但是這個狀態(tài)描述不是OK,而是Connection Established。HTTP/1.1 200 Connection Established  如果用戶名和密碼驗證不通過。會返回一個407的狀態(tài)碼,狀態(tài)表述是Unauthorized。表示沒有權(quán)限訪問代理服務(wù)器。HTTP/1.1 407 Unauthorized  驗證失敗的情況有時候還會帶上一堆HTML,這是有些服務(wù)器為了讓網(wǎng)頁上在連接失敗是顯示用的,如果不是通過瀏覽器來連接的話無視就好了。無論驗證成功還是驗證失敗,這些服務(wù)器返回的信息在不同的服務(wù)器軟件上會有一些差異。比如有些服務(wù)器軟件返回這些代碼會使用HTTP/1.0,有些則會在后面加上個代表服務(wù)器版本的字段。這些信息都無所謂,對于服務(wù)器返回的數(shù)據(jù),我們關(guān)鍵是看狀態(tài)碼。  驗證通過之后,我們就可以做普通的HTTP操作了。完全可以把現(xiàn)在的代理服務(wù)器看作是請求連接的Internet服務(wù)器,也就是說可以像直接訪問普通的服務(wù)器一樣,使用GET、POST等方法來請求Internet服務(wù)器上的頁面了。我們在發(fā)送CONNECT請求的時候就已經(jīng)告訴了服務(wù)器我們需要訪問的Internet服務(wù)器,上面我用了這個博客的網(wǎng)址。現(xiàn)在我們要訪問這個博客的主頁就可以發(fā)送一個簡單的GET請求。GET / HTTP/1.1Host: www.web-tinker.comContent-Length: 0  這個就是普通的GET請求的操作了,我就不多說了,這樣CONNECT方法的操作就完成了。假如哪天這個博客被墻了,就可以通過這個方式來訪問。但是道高一尺魔高一丈,天朝的和諧技術(shù)已經(jīng)不僅僅在與ip屏蔽上了。如果使用HTTP代理訪問youtube這種超級和諧的網(wǎng)站就會被攔截下來,畢竟HTTP是明文傳輸?shù)模粌H是域名,只要網(wǎng)站中有和諧字眼的都會被攔截。所以,這個HTTP代理只能訪問一些被屏蔽了IP,但是沒有被和諧的太嚴(yán)重的網(wǎng)站。如果需要逃過天朝的網(wǎng)絡(luò)監(jiān)視就必須使用加密的連接方式,比如SOCK5代理或者加密的VPN。總之,注意和諧吧。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 越西县| 全州县| 芷江| 马公市| 中阳县| 盐山县| 江安县| 红安县| 贵阳市| 雅安市| 郸城县| 新巴尔虎左旗| 西宁市| 高台县| 安阳市| 怀远县| 南木林县| 琼海市| 尉犁县| 秀山| 弥勒县| 西宁市| 新蔡县| 英德市| 安阳市| 吴忠市| 郴州市| 明水县| 南涧| 阳原县| 高雄县| 全南县| 玉门市| 四子王旗| 台中县| 卓资县| 奈曼旗| 古丈县| 龙胜| 六安市| 且末县|