1. 程式人生 > >Android中的Http通訊(一)之Http協議基本知識

Android中的Http通訊(一)之Http協議基本知識

寫了這麼久的專案,幾乎每個專案都用到了網路請求,不對,是所有的專案吐舌頭。一直沒有對這一塊做過詳細的總結,今天結合一些網上的資料以及自己的理解,來談談Http。廢話不多說,直奔正題吧......

我們如果想要真正的瞭解Http,我們必須要知道什麼是Http?

一、什麼是Http?

超文字協議(HTTP,HyperText Transfer Protocol)是網際網路上應用最為廣泛的一種網路協議。Http定義了瀏覽器(即全球資訊網客戶程序)怎樣向全球資訊網伺服器請求全球資訊網文件,以及伺服器怎麼把文件傳給瀏覽器。Http是全球資訊網可靠的交換檔案(包括文字、影象、聲音、以及視訊等)的基礎。

工作流程:一次的Http請求成為一次事務,其工作流程可以分為四步:

1、首先客戶端和伺服器需要建立連線。這個是從客戶端發起的。

2、建立連線之後,客戶端傳送一個請求給伺服器,請求方式的格式為:統一資源定位符(URL)、協議版本號、後邊是MIME的資訊(請求的是文字、影象、聲音、視訊.....)包括請求修飾符、客戶端的資訊以及可能的內容。

3、伺服器接到請求後,基於相應的響應資訊,其格式為一個狀態行、包括資訊的協議版本號、一個成功或者錯誤的程式碼、後邊是MIME資訊包括伺服器資訊,實體資訊以及一些可能的內容。

4、客戶端接受到伺服器端返回的資訊之後,根據需要將資訊展示出來,然後斷開與伺服器的連線。

                              

Http協議永遠是客戶端發起,伺服器端響應。

二、什麼是URL?

統一資源定位符(Uniform Resource Locator),是因特網上標準的資源地址。URL格式主要分為三個部分:

1、協議,如Http、Https。

2、存有該資源的IP地址,有時候也包括埠號。如:192.168.1.112(現在基本使用域名代替,如:www.baidu.com)

3、主機資源的具體地址。如檔案和目錄名。如:index.jsp或aaa.doc

1和2之間用“://”隔開,2和3用“/”分開。1和2是不可缺少的,3是可以缺少的。

三、什麼是TCP三次握手?

SYN(synchronousTCP/IP建立連線時的握手訊號。ACKacknowledgement

)為確認符,在資料通訊中,接收站發給傳送站的一種傳輸類控制字元。表示發來的資料已確認接受。

    過程如下圖所示:

                  

     在客戶端和伺服器建立正常的TCP網路連線的時候,客戶端首先會向伺服器傳送一個SYN資訊,伺服器使用SYN+ACK應答表示接收到了這個訊息,最後客戶端再以ACK訊息響應,這樣一來,客戶端和伺服器之間就建立了一種可靠的TCP連線,資料可以在客戶端和伺服器之間進行傳遞。

四、Http請求方式?

GET:請求獲取Request-Uri所標識的資源

POST:在Request-Uri所標識的資源後附加新的資料

GetPost是比較常見的Http請求方式,另外還有HEADPUTDELETETRACECONNECTOPTIONS

五、Http響應碼資訊?

200 OK  //客戶端請求成功

400 Bad Request  //客戶端請求有語法錯誤,不能被伺服器所理解

401 Unauthorized  //請求未經授權,這個狀態碼必須和WWW-Authenticate報頭一起使用

403 Forbidden  //伺服器收到請求,但是拒絕提供服務

404 Not Found  //請求資源不存在,大多是輸入了錯誤的URL

500 Internal Server Error  //伺服器發生不可預期的錯誤

503 Server Unavailable  //伺服器不能處理當前客戶端的請求,一段時間後可能會恢復正常

六、Http協議的特點?

1、支援客戶端/伺服器模式:就是客戶端請求,伺服器做出響應。

2、簡單快速:客戶端向伺服器請求服務時,是需要傳入請求方法和路徑。請求方法常用的有GETPOST。每種方法都規定了客戶端與伺服器聯絡的型別不同。

3、靈活:HTTP允許傳輸任意型別的資料物件。正在傳輸的型別由Content-Type加以標記。

4、無連線:無連線的含義就是限制每次連線只處理一個請求。伺服器處理完客戶端的請求,並收到客戶端的應答之後,即立即斷開連線。

5、無狀態:HTTP協議是無狀態的協議。無狀態就是指協議對於事務的處理是沒有記憶能力的。缺少狀態就意味著如果後續處理需要前面的資訊,則必須重新傳送,這樣會導致每次連線傳送的資料量大。另一方面,在伺服器不需要先前資訊時,它的應答就會較快。


相關推薦

AndroidHttp通訊Http協議基本知識

寫了這麼久的專案,幾乎每個專案都用到了網路請求,不對,是所有的專案。一直沒有對這一塊做過詳細的總結,今天結合一些網上的資料以及自己的理解,來談談Http。廢話不多說,直奔正題吧...... 我們如果想要真正的瞭解Http,我們必須要知道什麼是Http? 一、什麼是Http?

Android與伺服器端通訊方式HTTP、TCP、Socket

      Android作為客戶端,與伺服器的通訊方式主要有兩種:一種是HTTP通訊,一種是Socket通訊。 一、HTTP、Socket簡介       HTTP通訊:即使用HTTP協議進行通訊,工作原理是客戶端向伺服器端傳送一條HTTP請求,伺服器收到之後先解析客戶

網路篇——androidHttpHttp協議基礎

本人水平有限,文章中如果出現什麼不正確或者模糊的地方,還請各位小夥伴留下評論,多多指教 : ) Http概述 什麼是Http 採用知識點的形式,個人認為會更加高效直觀一點。 - HTTP,即超文字傳輸協議 - 它定義了瀏覽器(客戶端的一種

Android註冊程式編寫圖解程式設計

Android註冊程式編寫(一) (作者:Baron_wu 禁止轉載) 介面設計 首先進入Androidstudio建立一個空的工程: 選擇要執行的裝置: 選擇一個空的活動: 為app命名: 之後進入主介面: 點選紅筆畫中的視窗進入介面設計視窗: 介面設計視窗如下

Android使用OrmLite:表建立及增刪改查

OrmLite是一個輕量級的ORM框架,面向JAVA語言。也是時下流行的Android的ORM框架之一。在Android中使用Sqlite資料,如果又不想寫SQL,OrmLite或許是個不錯的選擇。 使用OrmLite,首先要在gradle

Android藍芽開發開啟藍芽和裝置搜尋

Android藍芽開發系列目錄: 一、判斷是否系統是否支援藍芽 在使用藍芽之前,我們首先要判斷手機裝置是否支援藍芽,雖然現在基本都支援藍芽了,但是為了程式碼的嚴謹性我們還是需要在程式碼中判斷: private BluetoothManager bluetoothma

Android自定義錄影錄影功能實現(附demo原始碼)

引言 最近在做一個專案,是有關用手機攝像頭做影象實時識別的。所以裡面需要自定義一個錄影功能。該demo實現了錄影和錄影後文件的儲存檢視,錄影會實時自動對焦(AutoFocus)。根據功能分兩篇講述。這第一篇講述錄影基本實現思路和需要注意的點。後面附有githu

android:wifi通訊

上傳了原始碼,自己下載看吧:http://download.csdn.net/detail/bigtree_mfc/9528424 關於wifi操作: 1、開啟wifi 2、關閉wifi 3、獲取wifi網絡卡狀態 activity_main.xml中新增三個按鈕 pu

Android藍芽通訊————藍芽功能的相關許可權

根據sdk中的docs的文件說明,使用Android的藍芽裝置時,只需要申請兩個許可權即可保證藍芽的正常的工作(其實在與藍芽相關的許可權一共有3個,其中BLUETOOTH_PRIVILEGED許可權只有系統應用可以使用,在這裡就不說明了),今天我們需要使用的兩個

TCP/IP詳解V2UDP協議

listen point reflect con 協議 提取 高級數據結構 don size UDP UDP是一個面向數據報的簡單運輸層協議。 數據結構 struct udphdr { u_short uh_sport; //源端口 u_shor

LVS入門篇ARP協議

失敗 自己的 ref 偽造 str 一個 消息 自己 機器 1、概念   地址解析協議,即ARP(AddressResolutionProtocol),是根據IP地址獲取物理MAC地址的一個TCP/IP協議。主機發送信息時將包含目標IP地址的ARP請求廣播到網絡上的

Node.Js http模組-傳送http請求例項

Node.Js http模組可以建立伺服器應用例項,也能傳送http請求 1.http.get(options[, callback]) 傳送簡單Get請求,並響應 var http=require

android訊息推送——XMPP協議

XMPP協議 XMPP協議,中文名為可擴充套件通訊和表示協議,是一種以XML為基礎的開放式實時通訊協議,它將需要實時通訊的訊息嵌入到XML結構體中,不僅具有很好的可擴充套件性,還有較強的可讀性。 XM

網路的那些事兒神奇的通訊

       考試大戰在即,這是大二生涯中最後一場戰役,為了給自己這半年的戎馬生涯畫上一個圓滿句號,故最近幾天在複習(其實說預習更為合理一些)《計算機網路》這門課程。臨時抱佛腳,真心地不好。不過好在自

Android開發藍芽——基於SPP協議藍芽模組通訊

使用裝置 基本概念 基本流程 本文意在介紹藍芽開發的主要流程,學習使用藍芽開發一個星期了,寫寫一個星期以來遇到的一些小問題,還有介紹下流程。開發具有基本的通訊功能,本專案主要是用於與藍芽模組的串列埠讀寫功能。 下一篇文章還有Android開

Pyhton函數篇函數的形參與實參

依然 tell 多個 存在 默認 urn 字符串 div 地址 1:什麽是函數   函數其實就是帶名字的代碼塊,用於完成一些具體的工作。如果我們在寫一段程序的時候,需要多次用到同樣的一個功能,如果每次都要重復寫相同的代碼,不僅會增加我們的代碼量,更會讓我們寫出的代碼讓別人看

Android IPC程序間通訊檔案共享

IPC程序間通訊簡介 1.在AndroidManifest.xml中宣告元件android:process屬性。 不指定process屬性,則預設執行在主程序中,主程序名字為包名。 android:process = package:remote,將執行在package:remote程序

HTTP系列—— TCP/IP的分層管理及通訊傳輸

1. TCP/IP的分層管理 TCP/IP協議族按照層次分為以下幾層:應用層,傳輸層,網路層和資料鏈路層。 1.1 應用層 應用層決定了向用戶提供應用服務時的通訊活動;FTP協議(檔案傳輸協議),HTTP協議,DNS服務(域名解析服務)等均處於該層。 1.2 傳輸層 傳輸層提供處

淺談ES6promise 實際開發的使用

一:promise是個什麼鬼?   1.1:說起promise這個玩意,首先呢,我們來討論一下什麼叫做"非同步"而於此相反的呢就是"同步"呢,好,那下面讓寡人給大家舉個例子來講明白什麼是同步什麼是非同步.                 1.1.1:同步     同步就

Linux學習程序通訊

言之者無罪,聞之者足以戒。 ——《詩序》 ctrl+alt+t     開啟終端 一、程序間通訊和執行緒間通訊: 程序通訊:在使用者空間實現程序通訊是不可能的,通過Linux核心通訊 執行緒通訊:可以在使用者空間就可以實現,可以通過全域性變數通訊 二、通訊方式: