## 什么Http協議
HTTP是HyperText Transfer Protocol(超文本傳輸協議)的簡寫,它是TCP/IP協議的一個應用層協議,用于定義WEB瀏覽器與WEB服務器之間交換數據的過程及數據本身的格式。
? 版本:1.1(目前使用的)和1.0?
和1.1可以在一次TCP/IP鏈接上,發出多次請求和得到多次響應?
1.0每次都必須建立新的TCP/IP鏈接,比較浪費資源。
基于HTTP協議的客戶/服務器模式的信息交換過程,如圖所示,它分四個過程,建立連接、發送請求信息、發送響應信息、關閉連接。
三次握手?

## 請求部分
請求消息頭:客戶端給服務器端發送的一些附加信息。?
?
請求部分詳解:?
1、請求行:位于請求內容的第一行。?
請求方式 請求的資源的URI地址 使用的協議及版本號?
GET /app1/1.html HTTP/1.1
a、請求方式:?
請求方式有:GET(默認的)、POST、HEAD、DELETE等?
GET方式:/app1/1.html?username=abc&password=123。把表單的數據緊跟在URI地址后面,用?進行分割。問號后面的內容,專業叫法:查詢字符串。請求行的長度不能超過1KB。不適合傳遞太多的數據。?
POST方式:把表單的數據放在了請求的正文部分。沒有長度限制。?
b、請求的URI:?
URI:統一資源標識符。[http://localhost:8080/app1/1.html](http://localhost:8080/app1/1.html)(URL),去掉協議、主機、端口剩余的叫做URI。?
c、客戶端使用的協議及版本。?
2、請求消息頭:?
界限:從第2行開始,到第一個空行結束。?
? Accept:瀏覽器可接受的MIME類型 。?
Accept:text/html.?
MIME類型是區分網絡上傳輸的數據類型的。MIME:大類型/具體類型。MIME類型和文件的擴展名有對應關系(Tomcat\conf\web.xml)
? Accept-Charset: 瀏覽器通過這個頭告訴服務器,它支持哪種字符集?
? Accept-Encoding:瀏覽器能夠進行解碼的數據編碼方式,比如gzip?
Accept-Language:瀏覽器所希望的語言種類,當服務器能夠提供一種以上的語言版本時要用到。 可以在瀏覽器中進行設置。?
Host:初始URL中的主機和端口?
? Referer:取值是一個URL,該URL表示用戶是由哪個頁面過來的。?
?
? Content-Type:內容類型:告知服務器,請求正文的MIME數據類型,默認值:application/x-www-form-urlencoded?
? if-Modified-Since: Wed, 02 Feb 2011 12:04:56 GMT利用這個頭與服務器的文件進行比對,如果一致,則從緩存中直接讀取文件。?
? User-Agent:瀏覽器類型.?
? Content-Length:表示請求消息正文的長度?
? Connection:表示是否需要持久連接。如果服務器看到這里的值為“Keep -Alive”,或者看到請求使用的是HTTP 1.1(HTTP 1.1默認進行持久連接?
? Cookie:這是最重要的請求頭信息之一 (會話管理時再講)?
? Date:Date: Mon, 22 Aug 2011 01:55:39 GMT請求時間GMT
3、請求正文:只有表單的請求方式是POST方式時才會出現。?
username=abc&password=123 參數都是:key=value的形式,多個參數之間用&進行分割。
## 響應部分
響應消息頭:服務器端給客戶端發送的一些附加信息。
?
3.1響應消息行:位于第一行?
服務器端使用的協議及版本 響應碼 響應碼描述?
HTTP/1.1 200 OK?
a、響應碼:?
1XX~5XX:目前用到了40個左右。?
記住常用的幾個狀態碼:?
200:一切正常?
302/307:請求重定向?
304:服務器的資源沒有修改。?
404:客戶端訪問的地址不存在?
500:服務器端程序遇到異常
3.2響應消息頭:(重點)?
? Location:?[http://www.it315.org/index.jsp](http://www.it315.org/index.jsp)指示新的資源的位置?
一般和302、307響應碼一起使用,完成請求重定向。?
? Server:apache tomcat指示服務器的類型?
? Content-Encoding: gzip告知客戶端服務器發送的請求正文內容的壓縮編碼?
? Content-Length: 80 告訴瀏覽器正文的長度?
? Content-Language: zh-cn服務發送的文本的語言?
? Content-Type: text/html; charset=GB2312服務器發送的內容的MIME類型?
? Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT文件的最后修改時間?
? Refresh: 1;url=[http://www.it315.org](http://www.it315.org/)指示客戶端刷新頻率。單位是秒
? Content-Disposition: attachment; filename=aaa.zip指示客戶端下載文件?
? Set-Cookie:SS=Q0=5Lb_nQ; path=/search服務器端發送的Cookie(會話管理)?
? Expires: -1?
? Cache-Control: no-cache (1.1)?
? Pragma: no-cache (1.0) 三個頭一般一起使用,告訴客戶端不要緩存內容?
? Connection: close/Keep-Alive?
? Date: Tue, 11 Jul 2000 18:23:51 GMT
3.3響應正文:?
和在頁面上點擊右鍵“查看源碼”看到的是一樣的。
## 三種禁止瀏覽器緩存的頭字段
~~~
// 不要 緩存的 三個 頭 :
//Cache-Control : no-cache
// Pragma: no-cache
// Expires: Thu, 01 Dec 1994 16:00:00 GMT (時間值 )
// 都是 用于 控制 瀏覽器 緩存的 , 當前 是要不緩存, 其 值 是 no-cache, no-cache,Thu, 01 Dec 1994 16:00:00 GMT 時間值
// 為什么 有三個 頭 啊 ?
// 如果 要 通知 瀏覽器 不緩存, 最好 的方式 這個三個 都設置
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
// 設置 expires 的時候 需要 調用 這個 方法 : setDateHeader(java.lang.String name, long date)
response.setDateHeader("Expires", -1);
~~~
## 狀態碼所表示的意義
狀態行?
格式: HTTP版本號 狀態碼 原因敘述?
舉例:HTTP/1.1 200 OK?
狀態碼用于表示服務器對請求的各種不同處理結果和狀態,它是一個三位的十進制數。響應狀態碼分為5類,使用最高位為1到5來進行分類如下所示:
**一、200狀態碼:**?
成功2××: 成功處理了請求的狀態碼。?
1、200 :服務器已成功處理了請求并提供了請求的網頁。?
2、204: 服務器成功處理了請求,但沒有返回任何內容。?
**二、300狀態碼:**?
重定向3×× :每次請求中使用重定向不要超過 5 次。?
1、301: 請求的網頁已永久移動到新位置。當URLs發生變化時,使用301代碼。搜索引擎索引中保存新的URL。?
2、302: 請求的網頁臨時移動到新位置。搜索引擎索引中保存原來的URL。?
3、304: 如果網頁自請求者上次請求后沒有更新,則用304代碼告訴搜索引擎機器人,可節省帶寬和開銷。?
**三、400狀態碼:**?
客戶端錯誤4×× :表示請求可能出錯,妨礙了服務器的處理。?
1、400: 服務器不理解請求的語法。?
2、403: 服務器拒絕請求。?
3、404: 服務器找不到請求的網頁。服務器上不存在的網頁經常會返回此代碼。?
4、410 :請求的資源永久刪除后,服務器返回此響應。該代碼與 404(未找到)代碼相似,但在資源以前存在而現在不存在的情況下,有時用來替代404 頁面代碼。如果資源已永久刪除,應當使用 301 指定資源的新位置。?
**四、500狀態碼:**?
服務器錯誤5×× :表示服務器在處理請求時發生內部錯誤。這些錯誤可能是服務器本身的錯誤,而不是請求出錯。?
1、500 :服務器遇到錯誤,無法完成請求。?
2、503: 服務器目前無法使用(由于超載或停機維護)。
- 前言
- 內存溢出的解決方案
- 安卓消息推送解決方案
- 語言識別和聊天機器人的實現
- 抽屜效果的實現(DrawerLayout和SlidingMenu的對比)
- 植物大戰僵尸經典開發步驟
- 屏幕適配全攻略
- 安卓圖像處理入門教程
- android開發常用工具箱
- java基礎知識總結
- 剖析軟件外包項目
- java基礎知識——網絡編程、IO流
- 安卓性能優化手冊
- 電商活動中刮刮卡的實現
- Android系統的安全設計與架構
- AsnycTask的內部的實現機制
- Android應用UI設計流程
- 數據結構與算法,每日一道
- html5全解析
- 深入解讀XML解析
- 新聞客戶端案例開發
- 細說Http協議
- win10+ubuntu雙系統安裝方案
- 隨機驗證碼實現案例
- 動態數組的實現案例
- 猜拳游戲案例
- 商業級項目——基金客戶端的架構設計與開發(上)