http請求報文包含三個部分(請求行 + 請求頭 + 請求體)


http請求報文包含三個部分(請求行 + 請求頭 + 請求體)

一、請求行

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

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

1.1 請求方法

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,用於檢查對象是否存在用於得到元數據

1.2 get方法和post方法

get方法:

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

post方法

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

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

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

1.4 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來獲取

二、請求頭

2.1 請求頭成分

  1. Accept:指瀏覽器或其他客戶可以接愛的MIME文件格式。Servlet可以根據它判斷並返回適當的文件格式。
  2. User-Agent:是客戶瀏覽器名稱
  3. Host:對應網址URL中的Web名稱和端口號。
  4. Accept-Langeuage:指出瀏覽器可以接受的語言種類,如en或en-us,指英語。
  5. connection:用來告訴服務器是否可以維持固定的HTTP連接。http是無連接的,HTTP/1.1使用Keep-Alive為默認值,這樣,當瀏覽器需要多個文件時(比如一個HTML文件和相關的圖形文件),不需要每次都建立連
  6. Cookie:瀏覽器用這個屬性向服務器發送Cookie。Cookie是在瀏覽器中寄存的小型數據體,它可以記載和服務器相關的用戶信息,也可以用來實現會話功能。
  7. Referer:表明產生請求的網頁URL。如比從網頁/icconcept/index.jsp中點擊一個鏈接到網頁/icwork/search,在向服務器發送的GET/icwork/search中的請求中,Referer是http://hostname:8080/icconcept/index.jsp。這個屬性可以用來跟蹤Web請求是從什么網站來的。
  8. User-Agent:是客戶瀏覽器名稱。
  9. Content-Type:用來表名request的內容類型。可以用HttpServletRequest的getContentType()方法取得。
  10. Accept-Charset:指出瀏覽器可以接受的字符編碼。英文瀏覽器的默認值是ISO-8859-1.
  11. Accept-Encoding:指出瀏覽器可以接受的編碼方式。編碼方式不同於文件格式,它是為了壓縮文件並加速文件傳遞速度。瀏覽器在接收到Web響應之后先解碼,然后再檢查文件格式。

2.2 get方法請求頭例如:

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

2.3 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的數據的長度

2.4 舉例說明

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響應由三個部分組成分別是狀態行,響應頭,響應正文

3.1 狀態行

狀態行是由:HTTP-Version + Status-Code + Reason-Phrase

比如:HTTP/1.1 200 ok
分別表示:http版本 + 狀態碼 + 狀態代碼的文本描述

響應狀態碼

狀態碼類型 表達意義
1xx 指示信息–表示請求已接收,繼續處理
2xx 成功–表示請求已被成功接收、理解、接受
3xx 重定向–要完成請求必須進行更進一步的操作。
4xx 客戶端錯誤–請求有語法錯誤或請求無法實現。
5xx 服務器端錯誤–服務器未能實現合法的請求。

3.2 響應頭

響應頭:包含服務器類型,日期,長度,內容類型等

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

3.3 響應正文

響應正文響應正文就是服務器返回的HTML頁面,HTTP響應頭與響應正文之間也必須以空行分隔

正文部分的MIME類型:HTTP請求及響應的正文部分可以是任意格式的數據,如何保證接收方能看得懂發送方發送的正文數據呢?HTTP協議采用MIME協議來規范正文的數據格式。

文件擴展名 MIME類型
.bin .exe .o .a .z application/octet-stream
.pdf application/pdf
.zip application/zip
.tar application/x-tar
.gif image/gif
.jpg .jpeg image/jpeg
.htm .html text/html
.text .c .h .txt .java text/plain
.mpg .mpeg video/mpeg
.xml application/xml
表單上傳文件 multipart/form-data
<form>標簽的enctype屬性:用於指定表單數據的MIME類型,取值為multipart/form-data,表示表單數據為復合類型的數據,包含多個子部分。


免責聲明!

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



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