一般,HTTP的請求方式有3種,分別是:POST、GET、HEAD。POST和GET方法是用於數據發送的。html
POST:它將要發送的數據單獨放在一個流中進行發送,而不是附加在URL地址後面,這樣作的好處是這些數據不會出如今URL地址中。程序員
GET:它將要發送的數據直接添加在URL後面,如:www.sina.com.cn?username=""&password="",這樣的好處是能夠直接將數據加在URL後,而不需在用另外的流來發送這些數據,可是缺點也顯而易見,它將用戶的信息顯示出來了。web
HEAD:它是請求資源的元數據方法。在具體的應用中,我暫時還沒遇到過,也不去對它進行研究,須要是在學習。面試
URL全稱是資源描述符,咱們能夠這樣認爲:一個URL地址,它用於描述一個網絡上的資源,而HTTP中的GET,POST,PUT,DELETE就對應着對這個資源的查,改,增,刪4個操做。編程
GET通常用於獲取/查詢資源信息,而POST通常用於更新資源信息。json
它是基於TCP/IP協議,Socket就是一個能夠連通網絡上不一樣計算機程序之間的管道,把一堆數據從管道的A端扔進去,則會從管道的B端(也許同時還能夠從C、D、E、F……端冒出來)。管道的端口由兩個因素來惟一確認,即機器的IP地址和程序所使用的端口號。數組
Socket能夠支持數據的發送和接收,它會定義一種稱爲套接字的變量,發送數據時首先建立套接字,而後使用該套接字的sendto等方法對準某個IP/端口進行數據發送;接收端也首先建立套接字,而後將該套接字綁定到一個IP/端口上,全部發向此端口的數據會被該套接字的recv等函數讀出。如同讀出文件中的數據同樣。瀏覽器
TCP/IP的socket提供下列三種類型套接字。 流式套接字、數據報式套接字、原始式套接字。安全
客戶端編程步驟:服務器
1:加載套接字庫,建立套接字(WSAStartup()/socket());
2:向服務器發出鏈接請求(connect());
3:和服務器端進行通訊(send()/recv());
4:關閉套接字,關閉加載的套接字庫(closesocket()/WSACleanup())。
經常使用第三方庫:1,Asyncsocket庫
asihttp代碼原理,異步請求的原理,異步請求最大數目,爲何只能這麼多?
ASIHTTPRequest是一個簡易使用的類庫,經過包裝CFNetwork API 來簡化 和服務器端的通信. 它編寫的語言是Objective-C 可以應用於Mac OS X and iPhone 平臺的應用程序.
異步: 請求經過事件觸發->服務器處理(這是瀏覽器仍然能夠做其餘事情)->處理完畢這個數量是跟cpu有關的,併發性取決於cpu核數,每一個核只能同時處理一個任務.4核cpu理論上能夠併發處理4個任務,若是按http來算就是4個請求,可是cpu是搶佔式資源,因此通常來講併發量是要根據任務的耗時和cpu的繁忙度來計算4個左右只是個經驗值你開10個短耗時的任務和幾個長耗時任務的效率是不一樣的。
JSONKit、SBJson、TouchJSON(性能從左到右,越右越差,主要就是性能上的差異)
1> 設置請求超時
2> 給用戶提示請求超時
3> 根據用戶操做再次請求數據
請求頭:包含了對客戶端的環境描述、客戶端請求的主機地址等信息
OC中響應用NSURLRespose:返回給客戶端的迴應包含:
實體內容:服務器返回給客戶端的具體二進制數據
經常使用屬性: expectedContentLength (下載時返回文件的長度)
suggestedFilename(建議保存的文件名)
GET | POST | |
---|---|---|
用途 | 從服務器上獲取數據 | 向服務器傳送數據提交方式 |
服務器解析 | Request.QueryString獲取變量的值 | Request.Form獲取提交的數據 |
數據大小 | 最大1024字節 | 無限制 |
安全性 | URL中能看到提交的數據 | 隱藏在請求頭中 |
TCP | UDP | |
---|---|---|
發送與接收 | 安全送達 | 只管發送 |
創建鏈接 | 是(三次握手) | 否(有數據包,無需鏈接) |
數據大小 | 無限制 | 每一個數據報64k |
可靠性 | 可靠 | 不可靠 |
速度 | 慢(三次握手才能完成鏈接 | 快(無需鏈接) |
應用 | 流媒體 |
三次握手實現的過程:
四次揮手:
Json與xml的區別:
JSON底層原理:
XML底層原理:
OSI簡介:OSI採用了分層的結構化技術,共分七層,物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層。
物理層:主要定義物理設備標準,如網線的接口類型、光纖的接口類型、各類傳輸介質的傳輸速率等。它的主要做用是傳輸比特流(就是由一、0轉化爲電流強弱來進行傳輸,到達目的地後在轉化爲一、0,也就是咱們常說的數模轉換與模數轉換)。這一層的數據叫作比特。
數據鏈路層:定義瞭如何讓格式化數據以進行傳輸,以及如何讓控制對物理介質的訪問。這一層一般還提供錯誤檢測和糾正,以確保數據的可靠傳輸。
網絡層::在位於不一樣地理位置的網絡中的兩個主機系統之間提供鏈接和路徑選擇。Internet的發展使得從世界各站點訪問信息的用戶數大大增長,而網絡層正是管理這種鏈接的層。
傳輸層:定義了一些傳輸數據的協議和端口號(WWW端口80等),如:TCP(傳輸控制協議,傳輸效率低,可靠性強,用於傳輸可靠性要求高,數據量大的數據),UDP(用戶數據報協議,與TCP特性偏偏相反,用於傳輸可靠性要求不高,數據量小的數據,如QQ聊天數據就是經過這種方式傳輸的)。 主要是將從下層接收的數據進行分段和傳輸,到達目的地址後再進行重組。經常把這一層數據叫作段。
會話層:經過傳輸層(端口號:傳輸端口與接收端口)創建數據傳輸的通路。主要在你的系統之間發起會話或者接受會話請求(設備之間須要互相認識能夠是IP也能夠是MAC或者是主機名)
表示層::可確保一個系統的應用層所發送的信息能夠被另外一個系統的應用層讀取。例如,PC程序與另外一臺計算機進行通訊,其中一臺計算機使用擴展二一十進制交換碼(EBCDIC),而另外一臺則使用美國信息交換標準碼(ASCII)來表示相同的字符。若有必要,表示層會經過使用一種通格式來實現多種數據格式之間的轉換。
應用層:是最靠近用戶的OSI層。這一層爲用戶的應用程序(例如電子郵件、文件傳輸和終端仿真)提供網絡服務。
all people seem to need date processing這一句話的意思是全部的人彷佛都須要處理數據
Application | all |
Presentation | people |
Session | seem |
Transport | to |
Network | need |
Data | date |
Physical | processing |
NSURLSession
支持斷點下載,自動記錄中止下載時斷點的位置
下載步驟:
設置下載任務task的爲成員變量
@property (nonatomic, strong) NSURLSessionDownloadTask *task;
獲取NSURLSession對象
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[[NSOperationQueue alloc] init]];
初始化下載任務任務
self.task = [session downloadTaskWithURL:(此處爲下載文件路徑URL)];
實現代理方法
/*每當寫入數據到臨時文件的時候,就會調用一次該方法,一般在該方法中獲取下載進度/
-(void)URLSession:(NSURLSession )session downloadTask: (NSURLSessionDownloadTask )downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
{
// 計算下載進度 CGFloat progress = 1.0 * totalBytesWritten / totalBytesExpectedToWrite;
}
/*任務終止時調用的方法,一般用於斷點下載/
-(void)URLSession:(NSURLSession )session downloadTask:(NSURLSessionDownloadTask )downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes
{
//fileOffset:下載任務停止時的偏移量
}
/*遇到錯誤的時候調用,error參數只能傳遞客戶端的錯誤/
-(void)URLSession:(NSURLSession )session task:(NSURLSessionTask )task didCompleteWithError:(NSError *)error
{ }
/*下載完成的時候調用,須要將文件剪切到能夠長期保存的文件夾中/
-(void)URLSession:(NSURLSession )session downloadTask:(NSURLSessionDownloadTask )downloadTask didFinishDownloadingToURL:(NSURL *)location
{
//生成文件長期保存的路徑 NSString *file = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:downloadTask.response.suggestedFilename]; //獲取文件句柄 NSFileManager *fileManager = [NSFileManager defaultManager]; //經過文件句柄,將文件剪切到文件長期保存的路徑 [fileManager moveItemAtURL:location toURL:[NSURL fileURLWithPath:file] error:nil];
}
操做任務狀態
/*開始/繼續下載任務/
[self.task resume];
/*暫停下載任務/
[self.task suspend];
HTTP協議的特色:
- HTTP超文本傳輸協議,是短鏈接,是客戶端主動發送請求,服務器作出響應,服務器響應以後,連接斷開。HTTP是一個屬於應用層面向對象的協議,HTTP有兩類報文:請求報文和響應報文。 - HTTP請求報文:一個HTTP請求報文由請求行、請求頭部、空行和請求數據4部分組成。 - HTTP響應報文:由三部分組成:狀態行、消息報頭、響應正文。
A UDP
B TCP
C HTTP D FTP 參考答案:D 理由:FTP是文件傳輸協議,是File Transfer Protocol的簡稱,它的做用是用於控制互聯網上文件的雙向傳輸,所以必定不會是即時聊天使用的;UDP是面向無鏈接的傳輸層協議,數據傳輸是不可靠的,它只管發,無論收不收穫得;TCP是面向鏈接的,可靠的傳輸層協議;HTTP是超文本傳輸協議,對應於應用層,而HTTP是基於TCP的。
在iOS中,一般是用UIWebView來實現,固然在iOS8之後可使用WKWebView來實現.有如下幾種實現方法: 經過實現UIWebView的代理方法來攔截,判斷scheme是不是約定好的,而後iOS調用本地相關API來實現: - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; 在iOS7之後,能夠直接經過JavaScripteCore這個庫來實現,經過往JS DOM注入對象,而這個對象對應於咱們iOS的某個類的實例。更詳細請閱讀: OC JavaScriptCore與js交互 WKWebView新特性及JS交互 Swift JavaScriptCore與JS交互 能夠經過WebViewJavascriptBridge來實現。具體如何使用,請你們去其它博客搜索吧! 優缺點: iOS加入H5響應比原生要慢不少,體驗不太好,這是缺點。 iOS加入H5能夠實現嵌入別的功能入口,可隨時更改,不用更新版本就能夠上線,這是最大的優勢。
XMPP(Extensible Messaging and Presence Protocol,前稱)是一種以XML爲基礎的開放式實時通訊協議,是 經由互聯網工程工做小組(IETF)經過的互聯網標準。簡單的說,XMPP就是一種協議,一種規定。就是說,在網絡上傳 東西,要創建鏈接,TCP/IP鏈接,創建後再傳東西,而XMPP就是規定你傳的東西的格式。XMPP是基於XML的協議。 優勢 開放: XMPP協議是自由、開放、公開的,而且易於瞭解。 並且在客戶端 、 服務器 、 組件 、 源碼庫等方面,都已經各自有多種實現。 標準: 互聯網工程工做小組( IETF )已經將Jabber的核心XML流協議以XMPP之名,正式列爲承認的實時通訊及Presence技術。 而XMPP的技術規格已被定義在RFC 3920及RFC 3921 。 任何IM供應商在遵循XMPP協議下,均可與Google Talk實現鏈接。 證明可用: 第一個Jabber(如今XMPP)技術是Jeremie Miller在1998年開發的,如今已經至關穩定;數以百計的開發者爲XMPP技術而努 力。 今日的互聯網上有數以萬計的XMPP服務器運做着,並有數以百萬計的人們使用XMPP實時傳訊軟件。 分散式: XMPP網絡的架構和電子郵件十分相像;XMPP核心協議通訊方式是先建立一個stream,XMPP以TCP傳遞XML數據流,沒有 中央主服務器。 任何人均可以運行本身的XMPP服務器,使我的及組織可以掌控他們的實時傳訊體驗。 安全: 任何XMPP協議的服務器能夠獨立於公衆XMPP網絡(例如在企業內部網絡中),而使用SASL及TLS等技術的可靠安全性,已自 帶於核心XMPP技術規格中。 可擴展: XML 命名空間的威力可以使任何人在覈心協議的基礎上建造定製化的功能;爲了維持通透性,常見的擴展由XMPP標準基金會 。 彈性佳: XMPP除了可用在實時通訊的應用程序,還能用在網絡管理、內容供稿、協同工具、文件共享、遊戲、遠程系統監控等。 多樣性: 用XMPP協議來建造及佈署實時應用程序及服務的公司及開放源代碼計劃分佈在各類領域;用XMPP技術開發軟件,資源及支持的 來源是多樣的,使得使你不會陷於被「綁架」的困境。 缺點 數據負載過重: 隨着一般超過70%的XMPP協議的服務器的數據流量的存在和近60%的被重複轉發,XMPP協議目前擁有一個大型架空中存在的 數據提供給多個收件人。 新的議定書正在研究,以減輕這一問題。 沒有二進制數據: XMPP協議的方式被編碼爲一個單一的長的XML文件,所以沒法提供修改二進制數據。 所以, 文件傳輸協議同樣使用外部的 HTTP。 若是不可避免,XMPP協議還提供了帶編碼的文件傳輸的全部數據使用的Base64 。 至於其餘二進制數據加密會話 (encrypted conversations)或圖形圖標(graphic icons)以嵌入式使用相同的方法。
利用字典(圖片地址爲key,下載操做爲value)
1> SIP(Session Initiation Protocol),會話發起協議 2> SIP是創建VOIP鏈接的 IETF 標準,IETF是全球互聯網最具權威的技術標準化組織 3> 所謂VOIP,就是網絡電話,直接用互聯網打電話,不用耗手機話費
TCP/IP是一組協議的代名詞,它還包括許多協議,組成了TCP/IP協議簇。TCP/IP協議簇分爲四層,IP位於協議簇的第二層(對應OSI的第三層),TCP位於協議簇的第三層(對應OSI的第四層)。
應用層:應用程序間溝通的層,如簡單電子郵件傳輸(SMTP)、文件傳輸協議(FTP)、網絡遠程訪問協議(Telnet)等。
傳輸層:在此層中,它提供了節點間的數據傳送服務,如傳輸控制協議(TCP)、用戶數據報協議(UDP)等,TCP和UDP給數據包加入傳輸數據並把它傳輸到下一層中,這一層負責傳送數據,而且肯定數據已被送達並接收。
互連網絡層:負責提供基本的數據封包傳送功能,讓每一塊數據包都可以到達目的主機(但不檢查是否被正確接收),如網際協議(IP)。
網絡接口層:對實際的網絡媒體的管理,定義如何使用實際網絡(如Ethernet、Serial Line等)來傳送數據。
文章若有問題,請留言,我將及時更正。