1. 程式人生 > >博主重新在http://yummylau.com/開始寫部落格,共勉!

博主重新在http://yummylau.com/開始寫部落格,共勉!

HTTP報文是面向文字的,報文中的每一個欄位都是一些ASCII碼串,各個欄位的長度是不確定的。HTTP有兩類報文:請求報文和響應報文。

HTTP請求報文

一個HTTP請求報文由請求行(request line)、請求頭部(header)、空行請求資料4個部分組成,下圖給出了請求報文的一般格式。

or

<request-line>

<headers>

<blank line>

[<request-body>

1.請求頭

請求行由請求方法欄位、URL欄位和HTTP協議版本欄位3個欄位組成,它們用空格分隔。例如,GET /index.html HTTP/1.1。

HTTP協議的請求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。

而常見的有如下幾種:

1).GET

最常見的一種請求方式,當客戶端要從伺服器中讀取文件時,當點選網頁上的連結或者通過在瀏覽器的位址列輸入網址來瀏覽網頁的,使用的都是GET方式。GET方法要求伺服器將URL定位的資源放在響應報文的資料部分,回送給客戶端。使用GET方法時,請求引數和對應的值附加在URL後面,利用一個問號(“?”)代表URL的結尾與請求引數的開始,傳遞引數長度受限制。例如,/index.jsp?id=100&op=bind,這樣通過GET方式傳遞的資料直接表示在地址中,所以我們可以把請求結果以連結的形式傳送給好友。以用google搜尋domety為例,Request格式如下:

複製程式碼
GET /search?hl=zh-CN&source=hp&q=domety&aq=f&oq= HTTP/1.1  
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, 
application/msword, application/x-silverlight, application/x-shockwave-flash, */*  
Referer: <a href="http://www.google.cn/"
>http://www.google.cn/</a> Accept-Language: zh-cn Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld) Host: <a href="http://www.google.cn">www.google.cn</a> Connection: Keep-Alive Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g; NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y- FxlRugatx63JLv7CWMD6UB_O_r
複製程式碼

可以看到,GET方式的請求一般不包含”請求內容”部分,請求資料以地址的形式表現在請求行。地址連結如下:

<a href="http://www.google.cn/search?hl=zh-CN&source=hp&q=domety&aq=f&oq=">http://www.google.cn/search?hl=zh-CN&source=hp
&q=domety&aq=f&oq=</a> 

地址中”?”之後的部分就是通過GET傳送的請求資料,我們可以在位址列中清楚的看到,各個資料之間用”&”符號隔開。顯然,這種方式不適合傳送私密資料。另外,由於不同的瀏覽器對地址的字元限制也有所不同,一般最多隻能識別1024個字元,所以如果需要傳送大量資料的時候,也不適合使用GET方式

2).POST

對於上面提到的不適合使用GET方式的情況,可以考慮使用POST方式,因為使用POST方法可以允許客戶端給伺服器提供資訊較多。POST方法將請求引數封裝在HTTP請求資料中,以名稱/值的形式出現,可以傳輸大量資料,這樣POST方式對傳送的資料大小沒有限制,而且也不會顯示在URL中。還以上面的搜尋domety為例,如果使用POST方式的話,格式如下:

複製程式碼
POST /search HTTP/1.1  
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, 
application/msword, application/x-silverlight, application/x-shockwave-flash, */*  
Referer: <a href="http://www.google.cn/">http://www.google.cn/</a>  
Accept-Language: zh-cn  
Accept-Encoding: gzip, deflate  
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)  
Host: <a href="http://www.google.cn">www.google.cn</a>  
Connection: Keep-Alive  
Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g; 
NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y-
FxlRugatx63JLv7CWMD6UB_O_r  

hl=zh-CN&source=hp&q=domety  
複製程式碼

可以看到,POST方式請求行中不包含資料字串,這些資料儲存在”請求內容”部分,各資料之間也是使用”&”符號隔開。POST方式大多用於頁面的表單中。因為POST也能完成GET的功能,因此多數人在設計表單的時候一律都使用POST方式,其實這是一個誤區。GET方式也有自己的特點和優勢,我們應該根據不同的情況來選擇是使用GET還是使用POST。

3).HEAD

HEAD就像GET,只不過服務端接受到HEAD請求後只返回響應頭,而不會發送響應內容。當我們只需要檢視某個頁面的狀態的時候,使用HEAD是非常高效的,因為在傳輸的過程中省去了頁面內容。

2.請求頭部

請求頭部由關鍵字/值對組成,每行一對,關鍵字和值用英文冒號“:”分隔。請求頭部通知伺服器有關於客戶端請求的資訊,典型的請求頭有:

User-Agent:產生請求的瀏覽器型別。

Accept:客戶端可識別的內容型別列表。

Host:請求的主機名,允許多個域名同處一個IP地址,即虛擬主機。

3.空行

最後一個請求頭之後是一個空行,傳送回車符和換行符,通知伺服器以下不再有請求頭

4.請求資料

請求資料不在GET方法中使用而是在POST方法中使用。POST方法適用於需要客戶填寫表單的場合。與請求資料相關的最常使用的請求頭是Content-Type和Content-Length。

HTTP報文

HTTP響應也由三個部分組成,分別是:狀態行、訊息報頭、響應正文。

如下所示,HTTP響應的格式與請求的格式十分類似:

<status-line>

<headers>

<blank line>

[<response-body>]

 正如你所見,在響應中唯一真正的區別在於第一行中用狀態資訊代替了請求資訊。狀態行(status line)通過提供一個狀態碼來說明所請求的資源情況。

狀態行格式如下:

HTTP-Version Status-Code Reason-Phrase CRLF

其中,HTTP-Version表示伺服器HTTP協議的版本;Status-Code表示伺服器發回的響應狀態程式碼;Reason-Phrase表示狀態程式碼的文字描述。狀態程式碼由三位數字組成,第一個數字定義了響應的類別,且有五種可能取值。

  • 1xx:指示資訊--表示請求已接收,繼續處理。
  • 2xx:成功--表示請求已被成功接收、理解、接受。
  • 3xx:重定向--要完成請求必須進行更進一步的操作。
  • 4xx:客戶端錯誤--請求有語法錯誤或請求無法實現。
  • 5xx:伺服器端錯誤--伺服器未能實現合法的請求。

常見狀態程式碼、狀態描述的說明如下。

  • 200 OK:客戶端請求成功。
  • 400 Bad Request:客戶端請求有語法錯誤,不能被伺服器所理解。
  • 401 Unauthorized:請求未經授權,這個狀態程式碼必須和WWW-Authenticate報頭域一起使用。
  • 403 Forbidden:伺服器收到請求,但是拒絕提供服務。
  • 404 Not Found:請求資源不存在,舉個例子:輸入了錯誤的URL。
  • 500 Internal Server Error:伺服器發生不可預期的錯誤。
  • 503 Server Unavailable:伺服器當前不能處理客戶端的請求,一段時間後可能恢復正常,舉個例子:HTTP/1.1 200 OK(CRLF)。

下面給出一個HTTP響應報文例子

複製程式碼
HTTP/1.1 200 OK
Date: Sat, 31 Dec 2005 23:59:59 GMT
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 122

<html>
<head>
<title>Wrox Homepage</title>
</head>
<body>
<!-- body goes here -->
</body>
</html>
複製程式碼

關於HTTP請求GET和POST的區別

1.GET提交,請求的資料會附在URL之後(就是把資料放置在HTTP協議頭<request-line>中),以?分割URL和傳輸資料,多個引數用&連線;例如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD。如果資料是英文字母/數字,原樣傳送,如果是空格,轉換為+,如果是中文/其他字元,則直接把字串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX為該符號以16進製表示的ASCII。

POST提交:把提交的資料放置在是HTTP包的包體<request-body>中。上文示例中紅色字型標明的就是實際的傳輸資料

  因此,GET提交的資料會在位址列中顯示出來,而POST提交,位址列不會改變

2.傳輸資料的大小:

   首先宣告,HTTP協議沒有對傳輸的資料大小進行限制,HTTP協議規範也沒有對URL長度進行限制。 而在實際開發中存在的限制主要有:

   GET:特定瀏覽器和伺服器對URL長度有限制,例如IE對URL長度的限制是2083位元組(2K+35)。對於其他瀏覽器,如Netscape、FireFox等,理論上沒有長度限制,其限制取決於作業系統的支援。

   因此對於GET提交時,傳輸資料就會受到URL長度的限制。

   POST:由於不是通過URL傳值,理論上資料不受限。但實際各個WEB伺服器會規定對post提交資料大小進行限制,Apache、IIS6都有各自的配置。

3.安全性:

    POST的安全性要比GET的安全性高。注意:這裡所說的安全性和上面GET提到的“安全”不是同個概念。上面“安全”的含義僅僅是不作資料修改,而這裡安全的含義是真正的Security的含義,比如:通過GET提交資料,使用者名稱和密碼將明文出現在URL上,因為(1)登入頁面有可能被瀏覽器快取, (2)其他人檢視瀏覽器的歷史紀錄,那麼別人就可以拿到你的賬號和密碼了。

文章轉自:http://blog.csdn.net/zhangliang_571/article/details/23508953 感謝博主無私奉獻!

相關推薦

重新http://yummylau.com/開始部落共勉

HTTP報文是面向文字的,報文中的每一個欄位都是一些ASCII碼串,各個欄位的長度是不確定的。HTTP有兩類報文:請求報文和響應報文。 HTTP請求報文 一個HTTP請求報文由請求行(request line)、請求頭部(header)、空行和請求資料4個部分組成,下

是時候重新開始部落

以前: 從2017年4月開始忙畢業設計到2017年7月轉正再到現在,已經整整7個月沒有記錄學習,沒有總結反思過自己了。心裡一直惦記著,卻遲遲沒有開始,只有一個字可以形容,懶懶懶!!! 現在:

關於重新開始部落

前天想著把最近在做的事分享出來,在考慮分享到哪些平臺,結果無意中發現原來早就在部落格園建了賬號,還寫了些隨筆,全部看了下,感覺有點神奇,因為很多雖然是自己寫的,但是完全沒印象了。。。。但是也看到自己上大學時一些對外來的暢想,一些對自己的要求等,現在這些要求都做到了麼,我不敢這麼說,但是至少方向是對的,保持進步

為什麼我開始部落

寫在前面 已經很長一段時間沒有寫過文章了,其實之前玩過一段時間的公眾號,因為那個號的定位就是短視訊分享,儘管視訊不是自己拍的都是從各大視訊平臺看完之後分享出來,只是簡單的寫一下視訊的內容和自己的感受,後來一直沒更新,因為未來是想走上程式設計道路的,再者一直得不到一些可觀的資料(閱

為什麼要開始部落

最近有點忙,但是做事的效率卻總是不高。 其實一直都想寫部落格記錄一下自己的知識,其實主要是想記錄一下一些軟體的配置方法,不然每次再配置都要花費很長的時間。 再其次是因為自己配置的時候去查了很多網上的教程,發現他們的方法要麼是很零碎,要麼就是在自己電腦上無法復現。 所以打算記錄下自己摸索下來的配置方法,也

為什麼我在部落開始部落

    我可以提升個人能力(比如最差勁的表達能力),總結自己的經驗,掌握知識盲點,可以幫助更多的和我一樣的JAVA開發者(我知道不一定幫得到),並且及時對資訊進行梳理。   我希望有更多人能指點出我的錯誤。因為我處於自學,可能會存在一些知識的誤解。   這更方便了我對知識的回顧,加深印象,對我

記錄一下開始部落......

  每次學習新的知識都是在網上各種搜尋資料,看各種書籍,當時感覺自己大概已經掌握課,但是過一段時間後,發現忘得差不多了,只是知道個大概,這時候從頭再查詢看一下也挺麻煩,所以今天打算開始自己寫部落格,作為對自己學習知識的一個總結、備忘,讓自己更好的掌握知識,能寫出來並和大家一起分享才基本

懶妹子,第一次開始部落有那麼一丟丟小激動呢 ememem--進入正題分享關於個別iphoneX輸入框失去焦點的bug

近來iphone新機鋪面而來,作為一個自己沒有iphone最新機的小前端,也只有羨慕的份啦,不過呢程式碼還是要碼的,新機的bug還是要改滴,iphone x系列包括xs xr,當input獲取焦點後鍵盤彈起,頁面隨著鍵盤向上滑動,一切正常,然鵝,當輸入完,點選手機鍵盤自帶的完成按鈕,或者是你要進入下一步操作,

一次面試後的人生感悟,是什麼促進了我開始部落的決心

最近突然想到想寫部落格了,雖然在老男孩培訓的時候,老師說到每個技術人員都要寫部落格,當初還不以為然,直到這次面試,深有感觸 說起這次面試,是我有史以來印象最深刻的一次.平時面試,大同小異,問你會做什麼,做過哪些,這些有什麼技巧,再問一些深一點的問題,就結束了.然面試官也是在

開始部落

起因 很早之前就有寫部落格的想法,但是覺得自己太菜沒什麼乾貨能輸出,工作後的很多內容也是在加密模式下不方便禁止發出來,加上個人比較懶沒有下定決心,所以一直沒有正式弄起來。 但是實際上用不同工具和平臺零零散散的也寫了些東西:論壇、知乎、作業部落、個人電腦,而且其實挺喜歡把東西整理成文字的感覺,要是能幫上其他

開篇:為什麼開始部落

第一篇博文,寫為什麼要開始寫部落格。 1 最主要的原因是,為了節約時間。 學習知識的時候,有這樣的感覺,零零碎碎學了不少東西,學的時候用不上,用的時候又要重新學起。以前積累的資料,程式碼都不知道放到哪裡了。為了節約重新學習知識的時間,查詢資料的時間,複習知識的時間,所以決

iOS解決按鈕短時間內多次點選只觸發一次事件方法(開始部落

在上家公司做專案的時候,做了個60秒獲取驗證碼的功能,當時做了個定時器,按鈕觸發定時器,邏輯來講都是沒問題的,但是實際操作的時候,惡意的在短時間內多次點選那個獲取驗證碼按鈕,按鈕的點選事件被呼叫了多次,定時器從而也呼叫多次,本來一秒減一的事件變成了一秒減多,並且減到0

三月三日正式開始部落

從2017年十月開始正式學習嵌入式開發,到現在也有5個月的時光了,從一個基礎薄弱的萌新,到現在初步掌握一點C語言和linux,有了很大的進步。本來不想寫部落格,我自己所有的筆記與練習都放在了有道雲筆記,我認為二者作用很相似,為什麼會想寫呢?聊天室這個專案,比較複雜,可以寫很多

今天開始部落記錄我的WebGIS學習歷程

下定決心2018年6月1日,充滿童心的一天,我在糾結頹廢了這麼久之後總算找到了人生方向,不敢說是唯一的出路,單絕對是我要努力的標準。因為今天我下定決心要走WebGIS的技術之路了,畢竟有以下幾點原因1.就業方向無外乎技術和應用,應用層就是使用資料作圖,我本科就可以做的事情為何

如何從現在開始部落

《構建之法》讀書筆記四-關於寫部落格的想法   在前不久知名博主《純潔的微笑》在部落格園分享了他寫部落格的心得,獲得了讀者圈的廣泛共鳴,同時也引起了一些老生常談的爭議,這樣的討論在我們長沙.NET技術社群內部也經常發生。 1、寫部落格的好處   在《軟技能·程式碼之外的生存指南》這

從今天開始部落

從今天開始寫部落格了,從今天開始寫部落格了從今天開始寫部落格了從今天開始寫部落格了從今天開始寫部落格了從今天開始寫部落格了從今天開始寫部落格了從今天開始寫部落格了從今天開始寫部落格了從今天開始寫部落格了從今天開始寫部落格了從今天開始寫部落格了從今天開始寫部落格了從今天開始寫部落格了從今天開始寫部落格了從今天開

在開頭共勉

勵誌 Linux 發展方向 以第一篇博客開始自己的博客經歷,以前都是只看不寫,甚至寫了也只是自己看看,現在要以這種形式堅定下自己學習的目標,同時監督自己,並將自己的經歷與人分享,記錄自己的經驗與成長。 老實講,從一開始學習我就覺得眼花繚亂,各種技術,各

我們為什麼堅持部落學習的另一種方式

種種原因: 我們很多人都有過寫點東西的衝動,只是又因為種種原因沒有發表。 寫著寫著,擠不出字來了。 總感覺自己的內心想法表達不出來。 感覺寫了沒什麼用,自己都明白了幹嘛還要寫。 怕寫出來被人笑話

javascript 表格增刪改查 排序不會(第一次部落求交流哈)

  學習JS快1個月了,博主本人上的是培訓的,快考試了,補習下學過的 發下今晚寫的吧。。。 有大神看看我的這種程度,排序事件怎麼弄~~ <!DOCTYPE html><html lang="zh"><head>    <

第一次部落多多關照

今天上部落格發現一個用js語音編寫Cocos2dx的工具。看來學cocos還得想想是用c++還是用js,java了。。 http://blog.csdn.net/touchsnow/article/details/18446119