http協議總結


http協議總結

一、www的簡單構成:

  • html:文本如何標記
  • http:文本在不同機子之間如何傳輸
  • url:標記如何定位

二、uri和url

  • uri:統一資源標示符,由某種協議表示的資源的定位符,協議可以是http,ftp,mailto,urn。其表示的資源可以是絕對路徑也可以是相對路徑。其核心是資源的標識。
    • mailto:zzy@example.com
    • http://www.cnblogs.com/zengzy/
    • /index.html
    • urn:isbn:0-486-27557-4
  • url:統一資源定位符,是一種具體的uri,表示能夠在互聯網中使用從而能定位到資源的標識符,必須是絕對路徑。其核心是定位

三、簡單的http

  • 請求報文結構,下面這個請求報文的意思是:請求hacker.jp這台主機上的form/entry這個資源

  • 響應報文結構

 

四、http八大方法

  • 八大方法
  1. get:從指定的資源請求數據,即查找資源

  2. post:向指定資源提交需要被處理的數據,即修改資源

  3. put:上傳uri標識的資源到某個主機

  4. delete:刪除uri指定的資源

  5. head:與get方法相同,但是不返回實體的主體,只返回首部

  6. trace:路徑追蹤,讓http服務器端將請求報文環回給客戶端
  7. connect:要求在與代理服務器通信時建立隧道,用隧道協議進行tcp通信。主要是使用SSL(Secure Sockets Layer,安全套階層)和TLS(Transport Layer Security,傳輸層安全)協議把通信內容加密后經網絡隧道傳輸。
    格式:CONNECT 代理服務器名:端口號 HTTP 版本
    eg:
    請求:CONNECT proxy.hackr.jp:80 HTTP/1.1
    相應:HTTP/1.1 200 OK(之后進入網絡隧道)     

  8. options:http服務器返回支持的http方法
  • get與post區別
  GET POST
后退按鈕/刷新 無害 數據會被重新提交(瀏覽器應該告知用戶數據會被重新提交)。
書簽 可收藏為書簽 不可收藏為書簽
緩存 能被緩存 不能緩存
編碼類型 application/x-www-form-urlencoded application/x-www-form-urlencoded 或 multipart/form-data。為二進制數據使用多重編碼。
歷史 參數保留在瀏覽器歷史中。 參數不會保存在瀏覽器歷史中。
對數據長度的限制 是的。當發送數據時,GET 方法向 URL 添加數據;URL 的長度是受限制的(URL 的最大長度是 2048 個字符)。 無限制。
對數據類型的限制 只允許 ASCII 字符。 沒有限制。也允許二進制數據。
安全性

與 POST 相比,GET 的安全性較差,因為所發送的數據是 URL 的一部分。

在發送密碼或其他敏感信息時絕不要使用 GET !

POST 比 GET 更安全,因為參數不會被保存在瀏覽器歷史或 web 服務器日志中。
可見性 數據在 URL 中對所有人都是可見的。 數據不會顯示在 URL 中。

 

五、http報文格式

1).請求報文:                       2).響應報文

請求行                          狀態行

請求首部字段                       響應首部字段

通用首部字段                       通用首部字段

實體首部字段                       實體首部字段

  空行(用CR+LF表示,回車換行)               空行(用CR+LF表示,回車換行)       

      報文主體                           報文主體    

可見請求報文和響應報文只有綠色部分是不一樣的。

3).請求行:請求方法 URI http版本號  get /index.html HTTP/1.1

4).狀態行:http版本號 狀態碼 原因短語  HTTP/1.1 200 ok

5).常見的狀態碼:

  類型 原因短語
          1xx        Informational,信息性的狀態碼 接受的請求正在處理
          2xx   Success,成功狀態碼 請求正常處理完畢
          3xx  Redirection,重定向狀態碼 可能需要新的請求才能能完成操作
          4xx Client Error,客戶端錯誤 錯誤的客戶端請求,uri拼寫錯誤等
          5xx Server Error,服務器端錯誤 服務器出現錯誤,可能是web的bug等
  • 2xx:

200 Ok:表示請求正常處理

204 No Content :表示服務器成功處理請求,但返回的相應報文中不含實體的主體部分,就是上面報文結構中的紅色部分

206 Partial Content:表示客戶端進行了范圍請求,而服務器成功執行了這部分請求

  • 3xx:

301 Moved Permanently:永久性重定向。也就是說原來請求的uri被分配了新的uri,以后就使用這個新的uri。如果之前的uri被保存為了書簽,那么把uri替換為新的uri

302 Found:臨時性的重定向。與301不同之處在於不更新書簽等。其在收到302后馬上用新的uri進行第二次請求,並將方法改為get,但規范本身是禁止這么做的,只是大多數瀏覽器都沒有遵守規范。

303 See Other:表示請求的資源有多個uri,明確規定應使用get方法定向獲取請求的資源。在現在的使用中302與其有一致的含義。

307 Temporary Redirect:與302有一致的含義,禁止post方法轉成get方法

304 Not Modified:與附帶條件的請求配合使用(例如if-None-Match,if-Range等,下文請求首部字段將會講到),表示請求的資源找到了,但是沒有滿足請求的附帶條件。

  • 4xx

400 Bad Request:表示請求報文中存在語法錯誤,當發生錯誤是,需要修改請求的內容再次發送請求,另外,客戶端瀏覽器會像對待200 0k一樣對待該狀態碼

401 Unauthorized:表示發送的請求需要通過HTTP認證的認證信息,響應報文必須包含一個使用與被請求資源的www-authenticate首部用以質詢用戶信息,當瀏覽器初次接收401時,會彈出認證用的窗口

403 Forbidden

404 Not Found

  • 5xx

500 Internal Server Error:表示服務器端在執行請求時發生了錯誤,也有可能是web的bug

503 Service Unavailable:服務器可能正超負荷或暫停維護無法訪問

6)HTTP的四種首部類型

四大首部類型分別是通用首部字段,請求首部字段,響應首部字段,實體首部字段

  • 通用首部字段:指既能在請求報文中使用,又能在響應報文中使用的字段
    1. Cache-Control:控制緩存的行為,常見的值有No-Cache,No-Store。No-Cache:請求報文出現它表示不希望獲取緩存過的資源,響應報文出現它表示不希望代理緩存請求,No-Store表示不緩存請求或響應的任何一部分
    2. Connection:控制連接的管理,常見的值為Keep-Alive
    3. Date:報文的創建日期
    4. Trailer:表示實現說明在報文主體后記錄了哪些首部字段,看下面這個例子

      HTTP/1.1 200 OK

      ....

      Trailer:Expires

      ...

      (報文主體)

      Expires:Tue, 28 Sep 2015 22:13:34 GMT

    5. Transfer-Encoding:報文主體的傳輸編碼方式(並沒有搞明白和請求首部字段Te有什么區別)
    6. Upgrade:向服務器指定某種傳輸協議以便服務器進行轉換
    7. Via:代理服務器相關的信息,報文經過代理或網關時,會把該代理或網關信息寫入via字段
  • 請求首部字段

Accept首部:

Accept : 瀏覽器可以處理的媒體類型

Accept-Charset:優先的字符集,比如utf-8,gb2312,gbk等等

Accept-Encoding:優先的內容編碼,比如deflate,zlib,gzip等

Accept-Language:優先的語言,en-us等

If首部:

If-Match:比較實體標記Etag,服務器端會給每一個資源標記Etag,客戶端請求的時候可能帶上此條件,表示服務器端有If-Match值對應的資源就處理請求

If-None-Match:與If-Match對應,表示服務器端沒有其對應的值就處理請求

If-Modified-Since:如果服務器資源自某個時間點之后修改了,就處理該請求

If-Unmodified-Since:如果服務器資源自某個時間點之后沒有改動,就處理該請求

If-Range:告知服務器若制定的If-Range字段值(Etag或者時間)和請求資源的Etag和時間相同時,則作為范圍請求處理,反之,返回全體資源。請看下面這個例子:

    

 其他:

Range:表示請求的字節范圍

User-Agent:Http客戶端程序的信息

Max-Forwards:最大的傳輸逐跳數,可以有Traces方法配合使用

Host:請求的資源所在的服務器

From:用戶的電子郵件

Te:表示優先的傳輸編碼,比如deflate,gzip等,與Accept-Encoding不一樣,A-E是指能接受的壓縮方式,而Te是指請求報文實體的壓縮方式

  • 響應首部字段

Accept-Ranges:表示服務器端是否接受范圍請求

Age:告知客戶端服務器端多長時間之前創建了請求,單位是秒

Etag:服務器端資源的標識

Location:重定向后uri

Proxy-Authenticate:服務器端要求代理的認證信息

WWW-Authentivate:服務器端要求客戶端的認證信息

Retry-After:告知客戶端再次發起請求的時間

Server:服務器端的信息

  • 實體首部字段

Content首部

Content-Encoding:實體使用的編碼

Content-Language:實體的自然語言

Content-Length:實體的大小

Content-MD5:實體的MD5校驗碼

Content-Range:實體的字節范圍

Conten-Type:實體的媒體類比

其他首部

Expire:實體的過期日期

Allow:允許的方法,可與Options方法共同使用

 

參考資料:

1.《圖解HTTP》,上野宣著,人民郵電出版社

2.http://www.w3school.com.cn/tags/html_ref_httpmethods.asp

 


免責聲明!

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



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