http請求數據的格式


最近看了tinyhttpd的服務器代理,看了看http請求數據包的格式和內容

http請求報包含三個部分:

請求行 + 請求頭 + 數據體

請求行包含三個內容 method + request-URI + http-version

method 包含有 post , get, head,delete, put, connect, options, patch, propfind, propatch, mkcol, copy, move, lock, unlock, trace, head

方法:

get 

通過請求URI獲得資源
post  用於添加新的資源,用於表單提交

put 

用於修改某個內容
delete  刪除某個內容
connect  用於代理進行傳輸例如SSL
options  詢問可以執行那些方法
patch  部分文檔更該
propfind  查看屬性
proppatch  設置屬性
mkcol  創建集合
copy  拷貝
move  移動
lock  加鎖
unlock  解鎖
trace  用於遠程診斷服務器
head  類似於get,用於檢查對象是否存在用於得到元數據

主要介紹get方法和post方法

get方法:

  是在url中說明情請求的資源,比如https://www.baidu.com/con?from=self?_t=1466609839126 其中?后的數據就是請求的數據,並且連接用&,get方法也可以提交表單數據,但是提交的數據在url中,其他人可以通過查看歷史記錄中的url來獲取你提交的數據,這樣很不安全

post方法:

  傳輸數據不在url中,而在數據段中出現,並且請求頭多了Content-Type 和 Content-Length,post提交表單數據的時候比get方法更安全

post方法提交表單和get方法提交表單相比較:

1>get明文傳輸,信息附加在url上面,get明文傳輸,post更加安全
2> get傳輸有大小限制,應該是3k,post需要制定傳輸類型
3 >get多用於獲取數據,根據get變量的不同調用不同的數據,post多用於提交數據,提交用戶輸入的數據

get方法和post方法的區別:

1>Get是向服務器發索取數據的一種請求,而Post是向服務器提交數據的一種請求
2>Get是獲取信息,而不是修改信息,類似數據庫查詢功能一樣,數據不會被修改
3>Get請求的參數會跟在url后進行傳遞,請求的數據會附在URL之后,以?分割URL和傳輸數據,參數之間以&相連,%XX中的XX為該符號以16進制表示的ASCII,如果數據是英文字母/數字,原樣發送,如果是空格,轉換為+,如果是中文/其他字符,則直接把字符串用BASE64加密。
4>Get傳輸的數據有大小限制,因為GET是通過URL提交數據,那么GET可提交的數據量就跟URL的長度有直接關系了,不同的瀏覽器對URL的長度的限制是不同的。
5>GET請求的數據會被瀏覽器緩存起來,用戶名和密碼將明文出現在URL上,其他人可以查到歷史瀏覽記錄,數據不太安全。在服務器端,用Request.QueryString來獲取Get方式提交來的數據
6>Post請求則作為http消息的實際內容發送給web服務器,數據放置在請求體中,Post沒有限制提交的數據。Post比Get安全,當數據是中文或者不敏感的數據,則用get,因為使用get,參數會顯示在地址,對於敏感數據和不是中文字符的數據,則用post
7>POST表示可能修改變服務器上的資源的請求,在服務器端,用Post方式提交的數據只能用Request.Form來獲取

請求行例如 : GET /icwork/? Search = product HTTP/1.1

請求頭

請求頭包含:

Accept:指瀏覽器或其他客戶可以接愛的MIME文件格式。Servlet可以根據它判斷並返回適當的文件格式。

User-Agent:是客戶瀏覽器名稱

Host:對應網址URL中的Web名稱和端口號。

Accept-Langeuage:指出瀏覽器可以接受的語言種類,如en或en-us,指英語。

connection:用來告訴服務器是否可以維持固定的HTTP連接。http是無連接的,HTTP/1.1使用Keep-Alive為默認值,這樣,當瀏覽器需要多個文件時(比如一個HTML文件和相關的圖形文件),不需要每次都建立連接

Cookie:瀏覽器用這個屬性向服務器發送Cookie。Cookie是在瀏覽器中寄存的小型數據體,它可以記載和服務器相關的用戶信息,也可以用來實現會話功能。

Referer:表明產生請求的網頁URL。如比從網頁/icconcept/index.jsp中點擊一個鏈接到網頁/icwork/search,在向服務器發送的GET/icwork/search中的請求中,Referer是http://hostname:8080/icconcept/index.jsp。這個屬性可以用來跟蹤Web請求是從什么網站來的。

User-Agent:是客戶瀏覽器名稱。

Content-Type:用來表名request的內容類型。可以用HttpServletRequest的getContentType()方法取得。

Accept-Charset:指出瀏覽器可以接受的字符編碼。英文瀏覽器的默認值是ISO-8859-1.

Accept-Encoding:指出瀏覽器可以接受的編碼方式。編碼方式不同於文件格式,它是為了壓縮文件並加速文件傳遞速度。瀏覽器在接收到Web響應之后先解碼,然后再檢查文件格式。

getf方法請求頭例如:

Accept:image/webp,image/*,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch, br
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Cookie:PSTM=1466499789; BAIDUID=D3A617EE01FFA9DB9B7E3E5F0D3A01EE:FG=1; BIDUPSID=4AA34EC11075CB66B8BC9792DD422B6F; BDUSS=VCc1M0cVQtYnFGfmxTUW5kVTUydnBZUmhiWFRXbnRlMnpIdWV2ODVxNHZ1WkZYQVFBQUFBJCQAAAAAAAAAAAEAAADkEA1ZtPO3rMfRt6zH0cfRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8salcvLGpXdz; BD_HOME=1; BD_UPN=123353; BDRCVFR[feWj1Vr5u3D]=I67x6TjHwwYf0; BD_CK_SAM=1; H_PS_PSSID=19292_18286_1458_20318_18241_20369_17942_20388_19690_20417_18560_17001_15560_12277_20253; BDSVRTM=0
Host:www.baidu.com
Referer:https://www.baidu.com/s?wd=http%20%E8%AF%B7%E6%B1%82%E6%95%B0%E6%8D%AE%E7%9A%84%E6%95%B0%E6%8D%AE%E5%8C%85%E6%A0%BC%E5%BC%8F&rsv_spt=1&rsv_iqid=0x9b746a8000022af9&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=baiduhome_pg&rsv_enter=1&oq=http%20%E8%AF%B7%E6%B1%82%E6%96%B9%E5%BC%8Fpost%20url%E6%A0%BC%E5%BC%8F&rsv_t=59fb7cEn5xgK8JFpqQ7F7coy6k6dn5sGpEMj1cDM4oMoy0TGArJ2l3fxOqy6F9lXoqoi&inputT=7936&rsv_pq=ca5859d100027005&rsv_sug3=73&rsv_sug1=12&rsv_sug7=100&rsv_sug2=0&rsv_sug4=32020
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36

post方法的請求頭

Accept:*/*
Accept-Encoding:gzip, deflate, br
Accept-Language:en-US,en;q=0.8
Authorization:Basic WkEtMTE0MjcyNjAyMDY=
Connection:keep-alive
Content-Length:666
Content-Type:application/json
Host:zhihu-web-analytics.zhihu.com
Origin:http://www.zhihu.com
Referer:http://www.zhihu.com/question/41690822
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36
Request Payload
view source

相比之下多了content-Type 和 Content-Length

Content-Type:表示的是請求報文體的 MIME 類型  ,注:GET的請求消息體是空的 所以不需要指定消息體的MIME類型

Content-Length:表示的是 post的數據的長度 

例如請求數據:

1 GET/sample.jspHTTP/1.1
2 Accept:image/gif.image/jpeg,*/*
3 Accept-Language:zh-cn
4 Connection:Keep-Alive
5 Host:localhost
6 User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)
7 Accept-Encoding:gzip,deflate
8  
9 username=jinqiao&password=1234

第一行為http請求行,包含方法,URI 和http版本

1-7為請求頭,包含瀏覽器,主機,接受的編碼方式和壓縮方式

第8行表示一個空行 表示請求頭結束 這個空行是必須的

第9行是數據體,比如是需要查詢的信息。

http響應體由三部分組成:

http響應由三個部分組成分別是狀態行,響應頭,響應正文。

狀態行是由:HTTP-Version+Status-Code+Reason-Phrase
比如:HTTP/1.1 200 ok
分別表示http版本 + 狀態碼 + 狀態代碼的文本描述
狀態碼:


1xx 指示信息–表示請求已接收,繼續處理
2xx 成功–表示請求已被成功接收、理解、接受
3xx 重定向–要完成請求必須進行更進一步的操作。
4xx 客戶端錯誤–請求有語法錯誤或請求無法實現。
5xx 服務器端錯誤–服務器未能實現合法的請求。
響應頭:包含服務器類型,日期,長度,內容類型等
Server:Apache Tomcat/5.0.12
Date:Mon,6Oct2003 13:13:33 GMT
Content-Type:text/html
Last-Moified:Mon,6 Oct 2003 13:23:42 GMT
Content-Length:112

 響應正文響應正文就是服務器返回的HTML頁面

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM