*****
**HTTP協議**
[TOC=6]
# 1. 為什么要學習HTTP協議?
中國人與中國人使用漢語溝通。
美國人與美國人使用英語溝通。
德國人與德國人使用德語溝通。
日本人與日本人使用日語溝通。
漢語、英語、德語、日語。就像約束、規范一樣。要讓他們聽懂我們說的話要使用相應的語言。
那么,我們要使用一臺計算機和另一臺計算機通信,有沒有規范/協議呢?
那么,那么這個規范/協議是什么?
# 2. HTTP協議的由來
它的發展是萬維網協會(World Wide Web Consortium)和Internet工作小組IETF(Internet Engineering Task Force)合作的結果,(他們)最終發布了一系列的RFC,RFC 1945定義了HTTP/1.0版本。其中最著名的就是RFC 2616。RFC 2616定義了今天普遍使用的一個版本——HTTP 1.1。
## 2.1 RFC
Request For Comments(RFC),是一系列以編號排定的文件。文件收集了有關互聯網相關信息,以及UNIX和互聯網社區的[軟件](https://baike.baidu.com/item/%E8%BD%AF%E4%BB%B6/12053)文件。目前RFC文件是由Internet Society(ISOC)贊助發行。基本的互聯網通信協議都有在RFC文件內詳細說明。RFC文件還額外加入許多的論題在標準內,例如對于互聯網新開發的協議及發展中所有的記錄。因此幾乎所有的互聯網標準都有收錄在RFC文件之中。
# 3. 什么是HTTP協議?
HTTP協議,即超文本傳輸協議(Hypertext transfer protocol)。是一種詳細規定了瀏覽器和萬維網(WWW = World Wide Web)服務器之間互相通信的規則,通過因特網傳送萬維網文檔的數據傳送協議。
# 4. HTTP協議有哪些特點呢?
HTTP是一個屬于應用層的面向對象的協議,由于其簡捷、快速的方式,適用于分布式超媒體信息系統。
* 支持客戶/服務器模式
* 簡單快速
* 靈活
* 無連接
* 無狀態
# 5. HTTP請求頭與相應頭
HTTP的請求由三部分組成,分別是:請求行、請求頭、請求正文
請求頭:請求報頭允許客戶端向服務器端傳遞請求的附加信息以及客戶端自身的信息。
常見的請求頭:
Accept:Accept請求報頭域用于指定客戶端接受哪些類型的信息。
Accept-Charset:Accept-Charset請求報頭域用于指定客戶端接受的字符集。
Accept-Encoding:Accept-Encoding請求報頭域類似于Accept,但是它是用于指定可接受的內容編碼。
Authorization:Authorization請求報頭域主要用于證明客戶端有權查看某個資源。
Host(發送請求時,該報頭域是必需的):Host請求報頭域主要用于指定被請求資源的Internet主機和端口號,它通
常從HTTP URL中提取出來的,
HTTP的響應由三個部分組成,分別是:狀態行、響應頭、響應正文
響應頭:響應報頭允許服務器傳遞不能放在狀態行中的附加響應信息,以及關于服務器的信息和對Request-URI所標識的
資源進行下一步訪問的信息。
常見的響應頭:
Location:Location響應報頭域用于重定向接受者到一個新的位置。
Server:Server響應報頭域包含了服務器用來處理請求的軟件信息。
# 6. HTTP請求方法與響應碼
根據HTTP標準,HTTP請求可以使用多種請求方法。
HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

HTTP響應碼:
狀態代碼有三位數字組成,第一個數字定義了響應的類別,且有五種可能取值:
1xx:指示信息--表示請求已接收,繼續處理
2xx:成功--表示請求已被成功接收、理解、接受
3xx:重定向--要完成請求必須進行更進一步的操作
4xx:客戶端錯誤--請求有語法錯誤或請求無法實現
5xx:服務器端錯誤--服務器未能實現合法的請求
常見狀態代碼、狀態描述、說明:
200 OK ? ? ? //客戶端請求成功
400 Bad Request ? //客戶端請求有語法錯誤,不能被服務器所理解
401 Unauthorized //請求未經授權,這個狀態代碼必須和WWW-Authenticate報頭域一起使用?
403 Forbidden ? //服務器收到請求,但是拒絕提供服務
404 Not Found ? //請求資源不存在,eg:輸入了錯誤的URL
500 Internal Server Error //服務器發生不可預期的錯誤
503 Server Unavailable ? //服務器當前不能處理客戶端的請求,一段時間后可能恢復正常
# 7. GET請求和POST請求的區別
* GET在瀏覽器回退時是無害的,而POST會再次提交請求。
* GET請求會被瀏覽器主動cache,而POST不會,除非手動設置。
* GET請求只能進行url編碼,而POST支持多種編碼方式。
* GET請求參數會被完整保留在瀏覽器歷史記錄里,而POST中的參數不會被保留。
* GET請求在URL中傳送的參數是有長度限制的,而POST么有。
* GET比POST更不安全,因為參數直接暴露在URL上,所以不能用來傳遞敏感信息。
* GET參數通過URL傳遞,POST放在Request body中。
# 8. HTTP1.1與HTTP1.0的區別
(1)加入了緩存處理
(2)帶寬的優化
(3)錯誤通知管理
(4)host頭處理
(5)長鏈接
- 咨詢項目實戰
- 第一單元 HTTP協議
- 1.1 OSI七層模型
- 1.2 HTTP協議(重點)
- 1.3 HTTPS協議(了解)
- 1.4 TCP/IP協議擴展
- 1.5 WebService簡介及實戰(無接口)
- 1.6 課后練習
- 第二單元 HTTPURLConnection
- 2.1 ANR
- 2.2 網絡判斷
- 2.3 HTTPURLConnection
- 2.4 課后練習
- 第三單元 AsyncTask
- 3.1 AsyncTask概述
- 3.2 AsyncTask基本使用
- 3.3 課后練習
- 第四單元 圖片異步加載
- 4.1 圖片異步加載概述
- 4.2 LruCache
- 4.3 DiskLRUCache
- 4.4 圖片三級緩存概述
- 4.5 封裝圖片加載緩存框架
- 第五單元 ListView多條目
- 5.1 ListView多條目概述
- 5.2 ListView多條目的使用
- 第六單元 ListView實現下拉刷新上拉加載
- 6.1 下拉刷新和上拉加載更多
- 6.2 XListView概述
- 6.3 XListView的使用
- 第七單元 封裝網絡框
- 7.1 封裝網絡框架概述
- 7.2 網絡框架的封裝
- 第八單元 項目介紹
- 8.1 公司項目團隊架構簡介
- 8.2 項目文檔及項目流程介紹
- 8.3 項目管理
- 8.4 項目開發
- 第九單元 項目框架搭建
- 9.1 基類封裝概述
- 9.2 Application中初始化配置
- 9.3 項目中的工具類
- 9.4 封裝網絡請求框架
- 9.5 封裝圖片異步緩存框架
- 第十單元 搭建UI框架1
- 10.1 側滑菜單概述
- 10.2 主界面框架搭建
- 第十一單元 搭建UI框架2
- 11.1 TabLayout的概述
- 11.2 TabLayout的使用
- 第十二單元 圖片上傳
- 12.1 圖片上傳概述
- 12.2 圖片上傳的實現
- 第十三單元 PullToRefresh
- 13.1 PullToRefresh概述
- 13.2 PullToRefresh的使用
- 13.3 緩存業務實現思路
- 第十四單元 事件分發及滑動沖突
- 14.1 事件分發概述
- 14.2 事件分發流程
- 14.3 事件分發的使用
- 第十五單元 傳感器的基本使用
- 15.1 傳感器概述
- 15.2 傳感器的使用
- 第十六單元 HTML與CSS復習
- 16.1 HTML
- 16.2 CSS
- 第十七單元 js復習
- 17.1 js基礎語法
- 17.2 js數組和內置對象
- 17.3 js常用事件
- 17.4 js對象模型
- 17.5 js 正則表達式
- 第十八單元 WebView
- 18.1 WebView 概述
- 18.2 WebView的使用
- 18.3 WebView與js交互
- 第十九單元 項目案例
- 項目概述
- 第二十單元 項目答辯
- 周考
- 第一周周考
- 第二周周考
- 第三種周考
- 月考
- 接口文檔