亚洲色成人网站www永久,亚洲欧美人成视频一区在线,亚洲国产成人高清在线观看,亚洲精品久久久久久动漫,亚洲国产精品久久电影欧美

數(shù)據(jù)專欄

智能大數(shù)據(jù)搬運工,你想要的我們都有

科技資訊

科技學院

科技百科

科技書籍

網(wǎng)站大全

軟件大全

HDC調(diào)試需求開發(fā)(15萬預算),能者速來!>>> 插入什么樣的Html標簽可以不改變原文樣式?目前已知的有['',''],很急,求大神解答。
來源:開源中國
發(fā)布時間:2016-08-24 17:12:00
早上收到Android 2.2.1的OTA之后很開心,于是升級了,之前都是使用Wifi連接,都沒有發(fā)現(xiàn)有什么問題,以為沒有太大變化。到公司之后Wifi信號很弱,于是想關掉Wifi使用GPRS上網(wǎng),沒想到一關掉Wifi,手機就是處在斷網(wǎng)狀態(tài),不能自動切換到GPRS狀態(tài)下,也不知道要怎么切換到GPRS下。 以為重啟一下機器就可以恢復了。 但沒想到,重啟完之后機器又自動連上那個有信號但無法連接的Wifi源,關掉又恢復到斷網(wǎng)狀態(tài),超級杯具了。
來源:V2EX
發(fā)布時間:2020-08-27 17:39:17
HDC調(diào)試需求開發(fā)(15萬預算),能者速來!>>> 各位小伙伴好,請教個問題,如圖所示,怎么導航欄在內(nèi)容部分打開對應的內(nèi)容
來源:開源中國
發(fā)布時間:2016-08-22 17:58:00
頭一次看到這個所謂的廣告優(yōu)化工具名叫果合的。在 twitter 上是 @guohead ,看到一些朋友在討論。---以下轉自果合博客--- Hello, World! 發(fā)表于 2010 年 09 月 03 日 由 admin 經(jīng)過不斷的除蟲和耐心的調(diào)試,我們終于決定發(fā)布這個版本作為果合的第一個公開版本。 果合是一個針對移動廣告進行優(yōu)化調(diào)整的工具,在第一個版本中,它暫時只支持 Android 的應用軟件。如果你是一個 Android 開發(fā)者,那么你一定在為選擇哪種移動廣告平臺而困擾。國外的 AdMob 雖然功能強大,但是不適用于中國本土消費者,國內(nèi)的幾家廣告平臺都是剛剛起步,似乎也不知道如何選擇。果合整合了四家移動廣告平臺,把他們放在一個 SDK 中。只要你在你的 app 中嵌入了這個 SDK,就能通過果合提供的控制面板自由分配展示不同廣告平臺的時間比例。運行多個廣告平臺的好處還在于,如果第一優(yōu)先級的廣告平臺沒有響應,果合會自動請求第二優(yōu)先級的廣告,保證廣告填充率。另外,果合還允許通過這個 SDK 在你的 app 中加入『自主廣告』,幫助您對自己的其它軟件進行推廣。 服務開發(fā)者 我們希望能通過果合這樣一個簡單的工具服務中國的移動開發(fā)者。我們相信,通過果合背后的算法,能夠幫助很多開發(fā)者節(jié)省選擇廣告平臺的時間,提高 app 的廣告填充率,并通過合理的時間分配對廣告收入進行優(yōu)化。果合團隊中的很多人是非常資深的移動開發(fā)者,因而了解開發(fā)者在開發(fā) app 之余的一些困擾。果合是一個整合了多方資源的一次嘗試,希望能夠給開發(fā)者帶來實際的好處。 一切關于選擇 果合的第一個版本支持 5 家廣告平臺:AdMob、AdChina、架勢無線、哇棒和有米(排名不分前后)。這包含了國內(nèi)外大部分主流移動廣告平臺的選擇,我們還在通過自己的努力向果合的 SDK 中添加更多的廣告平臺選擇。 我們認為,果合最大的價值在于提供了一個簡易的方式而允許開發(fā)者選擇移動廣告平臺。他們可以通過自己的使用經(jīng)驗來分配廣告時間,為自己的 app 匹配最佳的廣告方案。果合希望能夠收納盡可能多的廣告平臺,而讓每一位開發(fā)者進行自由的選擇。因此,果合也為每一個移動廣告平臺提供了均等的機會,讓更好的廣告平臺服務于更廣泛的開發(fā)者群體。 透明、開放與創(chuàng)新 移動互聯(lián)網(wǎng)是當今網(wǎng)絡技術創(chuàng)新最為密集的領域。果合團隊中的很多人都以各種方式加入了這個新的浪潮。無論是從過去還是現(xiàn)在的經(jīng)驗中,我們看到開放和創(chuàng)新的巨大力量,也希望向這股力量貢獻我們的部分。果合是很多開源項目的結晶。出于對國內(nèi)目前的市場環(huán)境的考慮,我們暫時沒有把果合進行開源,以保證果合的穩(wěn)定運行和中立的立場。果合只是一個整合了多家廣告 SDK 的工具,沒有任何可能賺取開發(fā)者的廣告收入。同時,我們會通過盡可能直觀的方式來保證算法及數(shù)據(jù)的透明和公平。 如何使用果合 目前,果合處于一個邀請測試的階段。您需要一個邀請碼才能完成注冊流程,并獲取到果合的 SDK。我們?nèi)匀恍枰诿總€廣告平臺注冊并獲得 API Key 并提供給果合才能完成從廣告展示到后臺數(shù)據(jù)統(tǒng)計的連接。只要您的 app 正確配置了果合的 SDK,它就可以按照您預設的比例展示不同廣告平臺的廣告。 我們的服務運行于云端,您不需要因為改變了廣告配置而重新打包您的 app,只需在后臺進行修改,一切就自然發(fā)生。
來源:V2EX
發(fā)布時間:2020-08-27 17:39:09
HDC調(diào)試需求開發(fā)(15萬預算),能者速來!>>> 初學前端,搜了全網(wǎng)沒找到好的框架資源(主要是想支持響應式),希望有經(jīng)驗的能給點意見。
來源:開源中國
發(fā)布時間:2016-08-22 16:44:00
HDC調(diào)試需求開發(fā)(15萬預算),能者速來!>>> wireshark3.2.23抓取tcp數(shù)據(jù)之后,用 “追蹤流” 的“tcp流”查看,發(fā)現(xiàn)用軟件模擬發(fā)送數(shù)據(jù)。 如果模擬發(fā)送的不斷開,查看時就會被合成一個內(nèi)容(上圖就是不斷開端口發(fā)了n次),除非模擬發(fā)送的斷開之后在發(fā)送,這個能設置嗎? 還有假設我時間點1,時間點2,時間點3個發(fā)了數(shù)據(jù),點時間點1 查看的信息會包含所有的
來源:開源中國
發(fā)布時間:2020-04-13 09:59:00
HDC調(diào)試需求開發(fā)(15萬預算),能者速來!>>> 發(fā)現(xiàn)辦公室網(wǎng)絡訪問網(wǎng)站有點慢, 切換成4G就快了, 通過Wireshark抓包 發(fā)現(xiàn)很多如下的異常 Previous segment not captured This frame is a out-of-order segment Connection reset 能否表示 公司的網(wǎng)絡不正常呢 需要聯(lián)系運營商呢?
來源:開源中國
發(fā)布時間:2020-03-21 11:57:00
HDC調(diào)試需求開發(fā)(15萬預算),能者速來!>>> 辦公網(wǎng)絡時不時訪問線上域名的接口很慢 時間都是花在建立連接上了 如下所示 建立連接就用了一分多鐘 也抓了包 但是看不出什么來 不知道是什么原因?qū)е?怎么解決
來源:開源中國
發(fā)布時間:2019-09-23 20:29:00
最近想買,但是按照之前用智能機的經(jīng)驗對電池續(xù)航和電話功能比較關注 特別是電話功能,之前用過多普達和N78,一年左右都遇到基本的電話功能出問題,真是本末倒置啊~ 所以,這次要打聽清楚
來源:V2EX
發(fā)布時間:2020-08-27 17:38:38
我該怎么辦?From: "Jim Struthers" < [email?protected] >Date: Apr, 4/30/2010 12:35 Subject: Android Market Trademark Complaint: Bingshot Ticket Id: 637199279 Queue: Legal- Android Market Show original Dear Google Legal Support, 1. We have a signature on file with Google. 2. Trademark: BING 3. Registrations: BING is registered as a trademark in various countries. See attached list. In the United States, BING is a common law trademark and is also the subject of pending trademark applications including Serial No. 77/681,498 filed March 2, 2009. Microsoft also holds International Registration No.’s 996,797 and 996,700 for BING which were filed on March 2, 2009 and designate a variety of countries, including Australia, China, the European Community, Japan, Korea, Russia, Singapore and others. 4. Application: Bingshot (see attached screenshots) 5. Developer: Henry Huang On behalf of Microsoft Corporation, we request removal of this application. Please let me know if you need any additional information. Best regards, Jim James F. Struthers Richard Law Group 8411 Preston Road, Suite 890 Dallas, TX 75225 Tel (214) 206-4312 Fax (214) 206-4330 [email?protected]
來源:V2EX
發(fā)布時間:2020-08-27 17:38:32
HDC調(diào)試需求開發(fā)(15萬預算),能者速來!>>> 電腦A通過自身無線網(wǎng)卡把網(wǎng)絡用wifi熱點的方式分享出去 電腦B C D通過電腦A這個熱點wifi鏈接上網(wǎng) 電腦A能通過Wireshark+Fiddler(或者 Wireshark+其他工具 )抓取到電腦B C D訪問的https明文內(nèi)容嗎?現(xiàn)在抓包測試是TLS密文的,不知道可行嗎? 感謝!
來源:開源中國
發(fā)布時間:2014-12-20 21:12:00
HDC調(diào)試需求開發(fā)(15萬預算),能者速來!>>> 1、引言 在文章《 理論聯(lián)系實際:Wireshark抓包分析TCP 3次握手、4次揮手過程 》中,我們學會了用wireshark來分析TCP的“三次握手,四次揮手”,非常好用。這就是傳說中的錘子,拿著 錘子,看什么都像 釘子!在這本文中,我對將準 HTTP這顆釘子,狠狠地砸下去。。。 為了對網(wǎng)絡數(shù)據(jù)包的“流轉”有更加深刻的理解,我在docker(遠程)上部署一個服務,支持http方式調(diào)用。從客戶端(本地)用http方式請求其中的一個接口,并得到響應數(shù)據(jù)。同時本地通過wireshark抓包,遠程用tcpdump抓包,然后分析過程中的所有通信細節(jié)(悲劇是把美好的東西撕碎給人看,而我則是把復雜的東西撕碎了給人看)。 本文的主要內(nèi)容是: 先通過工具獲取HTTP通信的數(shù)據(jù)包,再來抽絲剝繭,深入傳輸層二進制的天地里,解密HTTP所有的通信細節(jié)。分析過程中,由點到面,將相關知識串接起來。市面上講HTTP協(xié)議的文章很多,但深入到傳輸層從2進制的角度來解析,則相當少見。 保證全篇讀完之后,你對HTTP的理解會上升一個臺階! 本文稍長,請在看本文時保持耐心。 (本文同步發(fā)布于: http://www.52im.net/thread-2456-1-1.html ) 2、關于作者 饒全成: 畢業(yè)于華中科技大學,中科院計算所碩士,滴滴出行后端研發(fā)工程師。微信公眾號: 碼農(nóng)桃花源,個人博客: https://www.cnblogs.com/qcrao-2018/ 。 3、系列文章 1)本文是系列文章中的第8篇,本系列文章的大綱如下: 《 不為人知的網(wǎng)絡編程(一):淺析TCP協(xié)議中的疑難雜癥(上篇) 》 《 不為人知的網(wǎng)絡編程(二):淺析TCP協(xié)議中的疑難雜癥(下篇) 》 《 不為人知的網(wǎng)絡編程(三):關閉TCP連接時為什么會TIME_WAIT、CLOSE_WAIT 》 《 不為人知的網(wǎng)絡編程(四):深入研究分析TCP的異常關閉 》 《 不為人知的網(wǎng)絡編程(五):UDP的連接性和負載均衡 》 《 不為人知的網(wǎng)絡編程(六):深入地理解UDP協(xié)議并用好它 》 《 不為人知的網(wǎng)絡編程(七):如何讓不可靠的UDP變的可靠? 》 《 不為人知的網(wǎng)絡編程(八):從數(shù)據(jù)傳輸層深度解密HTTP 》(本文) 2)如果您覺得本系列文章過于專業(yè),您可先閱讀《網(wǎng)絡編程懶人入門》系列文章,該系列目錄如下: 《 網(wǎng)絡編程懶人入門(一):快速理解網(wǎng)絡通信協(xié)議(上篇) 》 《 網(wǎng)絡編程懶人入門(二):快速理解網(wǎng)絡通信協(xié)議(下篇) 》 《 網(wǎng)絡編程懶人入門(三):快速理解TCP協(xié)議一篇就夠 》 《 網(wǎng)絡編程懶人入門(四):快速理解TCP和UDP的差異 》 《 網(wǎng)絡編程懶人入門(五):快速理解為什么說UDP有時比TCP更有優(yōu)勢 》 3)《腦殘式網(wǎng)絡編程入門》也適合入門學習,本系列大綱如下: 《 腦殘式網(wǎng)絡編程入門(一):跟著動畫來學TCP三次握手和四次揮手 》 《 腦殘式網(wǎng)絡編程入門(二):我們在讀寫Socket時,究竟在讀寫什么? 》 《 腦殘式網(wǎng)絡編程入門(三):HTTP協(xié)議必知必會的一些知識 》 《 腦殘式網(wǎng)絡編程入門(四):快速理解HTTP/2的服務器推送(Server Push) 》 4)其它跟HTTP有關的文章: 《 從HTTP/0.9到HTTP/2:一文讀懂HTTP協(xié)議的歷史演變和設計思路 》 《 美圖App的移動端DNS優(yōu)化實踐:HTTPS請求耗時減小近半 》 《 一分鐘理解 HTTPS 到底解決了什么問題 》 《 一篇讀懂HTTPS:加密原理、安全邏輯、數(shù)字證書等 》 《 小白必讀:閑話HTTP短連接中的Session和Token 》 《 IM開發(fā)基礎知識補課:正確理解前置HTTP SSO單點登陸接口的原理 》 《 從HTTP到MQTT:一個基于位置服務的APP數(shù)據(jù)通信實踐概述 》 《 基于APNs最新HTTP/2接口實現(xiàn)iOS的高性能消息推送(服務端篇) 》 《 Comet技術詳解:基于HTTP長連接的Web端實時通信技術 》 《 WebSocket詳解(四):刨根問底HTTP與WebSocket的關系(上篇) 》 《 WebSocket詳解(五):刨根問底HTTP與WebSocket的關系(下篇) 》 4、在傳輸層捕獲HTTP報文 4.1 背景介紹 我手頭現(xiàn)在有一個地理幾何相關的服務,它提供一組接口對外使用。其中有一個接口是Fence2Area. 使用方傳入一個圍欄(由點的列表組成,點由<經(jīng)度,緯度>表示)、點的坐標系類型(谷歌地圖用的是wgs84, 國內(nèi)騰訊、高德用的是soso, 而百度用的是另一套自己的坐標系),接口輸出的則是圍欄的面積。 我請求服務的“Fence2Area”接口,輸入圍欄(fence)頂點(lng, lat)坐標、坐標系類型(coordtype),輸出的則是多邊形的面積(area). 一次正常的請求示例url, 這個大家都不陌生(我用docker_ip代替真實的ip): http://docker_ip:7080/data?cmd=Fence2Area&meta={"caller":"test","TraceId":"test"}&request={"fence":[{"lng":10.2,"lat":10.2}, {"lng":10.2,"lat":8.2}, {"lng":8.2,"lat":8.2}, {"lng":8.2,"lat":10.2}],"coordtype":2} 請求發(fā)出后,服務器進行處理,之后,客戶端收到返回的數(shù)據(jù)如下: { "data": { "area": 48764135597.842606 }, "errstr": "" } area字段表示面積,errstr表示出錯信息,空說明沒有出錯。 4.2 抓包 在真正發(fā)送請求之前,需要進行抓包前的設置。在本地mac,我用wireshark; 而在遠程docker上,我用tcpdump工具。 mac本地: 設置wireshark包過濾器,監(jiān)控本地主機和遠程docker之間的通信。 ip.addr eq docker_ip 點擊開始捕獲。 遠程docker: 該服務通過7080端口對外提供,使用如下命令捕獲網(wǎng)絡包: tcpdump -w /tmp/testHttp.cap port 7080 -s0 4.3 請求、捕獲、分析 準備工作做完,我選了一個神圣的時刻,在本地通過瀏覽器訪問如下url: http://docker_ip:7080/data?cmd=Fence2Area&meta={"caller":"test","TraceId":"test"}&request={"fence":[{"lng":10.2,"lat":10.2}, {"lng":10.2,"lat":8.2}, {"lng":8.2,"lat":8.2}, {"lng":8.2,"lat":10.2}],"coordtype":2} 這樣本地的wireshark和遠程的tcpdump都能抓取到HTTP網(wǎng)絡數(shù)據(jù)包。 【關閉服務進程】: 正式請求之前,我們先看一下幾種特殊的情形。 首先,關閉gcs服務進程,請求直接返回RST報文。 如上圖,我在請求的時候,訪問服務端的另一個端口5010, 這個端口沒有服務監(jiān)聽,和關閉gcs服務進程是同樣的效果??梢钥吹?,客戶端發(fā)送SYN報文,但直接被遠程docker RST掉了。因為服務端操作系統(tǒng)找不到監(jiān)聽此端口的進程。 【關閉docker】: 關閉docker, 由于發(fā)送的SYN報文段得不到響應,因此會進行重試,mac下重試的次數(shù)為10次。 先每隔1秒重試了5次,再用“指數(shù)退避”的時間間隔重試,2s, 4s, 8s, 16s, 32s. 最后結束。 【重啟docker】: 先進行一次正常的訪問,隨后重啟docker。并再次在本地訪問以上url, 瀏覽器這時還是用的上一次的端口,訪問到服務端后,因為它已經(jīng)重啟了,所以服務端已經(jīng)沒有這個連接的消息了。因此會返回一個RST報文。 【正常請求】: 服務正常啟動,正常發(fā)送請求,這次請求成功,那是當然的,嘿嘿! 這是在mac上用wireshark捕獲的數(shù)據(jù)包,共7個包,前三個包為3次握手的包,第四個包為HTTP層發(fā)送的請求數(shù)據(jù),第五個包為服務端的TCP 確認報文,第六個包為服務端在HTTP層發(fā)送的響應數(shù)據(jù),第七個包為mac對第六個包的確認報文。 重點來關注后面幾個包,先看第四個包: 0x0000: 4500 0295 0000 4000 3606 623b ac17 ccdc 0x0010: 0a60 5cd4 db9b 1ba8 a59a 46ce 6d03 e87d 0x0020: 8018 1015 0ee7 0000 0101 080a 2e4c b2ef 0x0030: 0f20 3acf 4745 5420 2f64 6174 613f 636d 0x0040: 643d 4665 6e63 6532 4172 6561 266d 6574 0x0050: 613d 7b25 3232 6361 6c6c 6572 2532 323a 0x0060: 2532 3274 6573 7425 3232 2c25 3232 5472 0x0070: 6163 6549 6425 3232 3a25 3232 7465 7374 0x0080: 2532 327d 2672 6571 7565 7374 3d7b 2532 0x0090: 3266 656e 6365 2532 323a 5b7b 2532 326c 0x00a0: 6e67 2532 323a 3130 2e32 2c25 3232 6c61 0x00b0: 7425 3232 3a31 302e 327d 2c25 3230 7b25 0x00c0: 3232 6c6e 6725 3232 3a31 302e 322c 2532 0x00d0: 326c 6174 2532 323a 382e 327d 2c25 3230 0x00e0: 7b25 3232 6c6e 6725 3232 3a38 2e32 2c25 0x00f0: 3232 6c61 7425 3232 3a38 2e32 7d2c 2532 0x0100: 307b 2532 326c 6e67 2532 323a 382e 322c 0x0110: 2532 326c 6174 2532 323a 3130 2e32 7d5d 0x0120: 2c25 3232 636f 6f72 6474 7970 6525 3232 0x0130: 3a32 7d20 4854 5450 2f31 2e31 0d0a 486f 0x0140: 7374 3a20 3130 2e39 362e 3932 2e32 3132 0x0150: 3a37 3038 300d 0a55 7067 7261 6465 2d49 0x0160: 6e73 6563 7572 652d 5265 7175 6573 7473 0x0170: 3a20 310d 0a41 6363 6570 743a 2074 6578 0x0180: 742f 6874 6d6c 2c61 7070 6c69 6361 7469 0x0190: 6f6e 2f78 6874 6d6c 2b78 6d6c 2c61 7070 0x01a0: 6c69 6361 7469 6f6e 2f78 6d6c 3b71 3d30 0x01b0: 2e39 2c2a 2f2a 3b71 3d30 2e38 0d0a 5573 0x01c0: 6572 2d41 6765 6e74 3a20 4d6f 7a69 6c6c 0x01d0: 612f 352e 3020 284d 6163 696e 746f 7368 0x01e0: 3b20 496e 7465 6c20 4d61 6320 4f53 2058 0x01f0: 2031 305f 3133 5f36 2920 4170 706c 6557 0x0200: 6562 4b69 742f 3630 352e 312e 3135 2028 0x0210: 4b48 544d 4c2c 206c 696b 6520 4765 636b 0x0220: 6f29 2056 6572 7369 6f6e 2f31 322e 302e 0x0230: 3220 5361 6661 7269 2f36 3035 2e31 2e31 0x0240: 350d 0a41 6363 6570 742d 4c61 6e67 7561 0x0250: 6765 3a20 7a68 2d63 6e0d 0a41 6363 6570 0x0260: 742d 456e 636f 6469 6e67 3a20 677a 6970 0x0270: 2c20 6465 666c 6174 650d 0a43 6f6e 6e65 0x0280: 6374 696f 6e3a 206b 6565 702d 616c 6976 0x0290: 650d 0a0d 0a 我們來逐字節(jié)分析: 剩余的數(shù)據(jù)部分即為TCP協(xié)議相關的。 TCP也是20B固定長度+可變長度部分: 可變長度部分,協(xié)議如下: 剩下來的就是數(shù)據(jù)部分了。我們一行一行地看。 因為http是字符流,所以我們先看一下ascii字符集,執(zhí)行命令: man ascii 可以得到ascii碼,我們直接看十六進制的結果: 把上表的最后一列連起來,就是: GET /data?cmd=Fence2Area&meta={%22caller%22:%22test%22,%22TraceId%22:%22test%22}&request={%22fence%22:[{%22lng%22:10.2,%22lat%22:10.2},%20{%22lng%22:10.2,%22lat%22:8.2},%20{%22lng%22:8.2,%22lat%22:8.2},%20{%22lng%22:8.2,%22lat%22:10.2}],%22coordtype%22:2} HTTP/1.1 Host: 10.96.92.212:7080 Upgrade-Insecure-Requests: 1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.2 Safari/605.1.15 Accept-Language: zh-cn Accept-Encoding: gzip, deflate Connection: keep-alive 其中,cr nl表示回車,換行。 docker收到數(shù)據(jù)后,會回復一個ack包。第四個包的總長度為661字節(jié),去掉IP頭部20字節(jié),TCP頭部固定部分20字節(jié),TCP頭部可選長度為12字節(jié),共52字節(jié),因此TCP數(shù)據(jù)部分總長度為661-52=609字節(jié)。另外,序列號為2778351310. 再來看第5個包,字節(jié)流如下: 0x0000: 4500 0034 d28b 4000 4006 8810 0a60 5cd4 0x0010: ac17 ccdc 1ba8 db9b 6d03 e87d a59a 492f 0x0020: 8010 00ec e04e 0000 0101 080a 0f20 3af7 0x0030: 2e4c b2ef 剩余的數(shù)據(jù)部分即為TCP協(xié)議相關的。 TCP也是20B固定長度+可變長度部分: 可變長度部分,協(xié)議如下: 數(shù)據(jù)部分為空,這個包僅為確認包。 再來看第六個包,字節(jié)流如下: 0x0000: 4500 00f9 d28c 4000 4006 874a 0a60 5cd4 0x0010: ac17 ccdc 1ba8 db9b 6d03 e87d a59a 492f 0x0020: 8018 00ec e113 0000 0101 080a 0f20 3af8 0x0030: 2e4c b2ef 4854 5450 2f31 2e31 2032 3030 0x0040: 204f 4b0d 0a41 6363 6573 732d 436f 6e74 0x0050: 726f 6c2d 416c 6c6f 772d 4f72 6967 696e 0x0060: 3a20 2a0d 0a44 6174 653a 2054 6875 2c20 0x0070: 3033 204a 616e 2032 3031 3920 3132 3a32 0x0080: 333a 3437 2047 4d54 0d0a 436f 6e74 656e 0x0090: 742d 4c65 6e67 7468 3a20 3438 0d0a 436f 0x00a0: 6e74 656e 742d 5479 7065 3a20 7465 7874 0x00b0: 2f70 6c61 696e 3b20 6368 6172 7365 743d 0x00c0: 7574 662d 380d 0a0d 0a7b 2264 6174 6122 0x00d0: 3a7b 2261 7265 6122 3a34 3837 3634 3133 0x00e0: 3535 3937 2e38 3432 3630 367d 2c22 6572 0x00f0: 7273 7472 223a 2222 7d 剩余的數(shù)據(jù)部分即為TCP協(xié)議相關的。TCP也是20B固定長度+可變長度部分: 可變長度部分,協(xié)議如下: 剩下來的就是數(shù)據(jù)部分了。我們一行一行地看: 把上表的最后一列連起來,就是: HTTP/1.1 200 OK Access-Control-Allow-Origin: * Date: Thu, 03 Jan 2019 12:23:47 GMT Content-Length: 48 Content-Type: text/plain; charset=utf-8 {"data":{"area":48764135597.842606},"errstr":""} Content-Length: 48,最后一行的長度即為48個字節(jié)。 最后,第七個包,字節(jié)流如下: 0x0000: 4500 0034 0000 4000 3606 649c ac17 ccdc 0x0010: 0a60 5cd4 db9b 1ba8 a59a 492f 6d03 e942 0x0020: 8010 100f 1eb9 0000 0101 080a 2e4c b314 0x0030: 0f20 3af8 剩余的數(shù)據(jù)部分即為TCP協(xié)議相關的。TCP也是20B固定長度+可變長度部分: 可變長度部分,協(xié)議如下: 至此,一次完整的http請求的報文就解析完了。感覺如何,是不是很親切?(PS: WTF?看的人都抓狂了,還親切?哈哈) 5、在應用層學習HTTP協(xié)議 上面我們把HTTP協(xié)議相關的數(shù)據(jù)從2進制層給解密了,下面我將對照上面的數(shù)據(jù)拆解結果,一步步帶你從應用層深入認識HTTP協(xié)議。 5.1 整體介紹 HTTP(Hypertext Transfer Protocol)超文本傳輸協(xié)議,是在互聯(lián)網(wǎng)上進行通信時使用的一種協(xié)議。說得更形象一點:HTTP是現(xiàn)代互聯(lián)網(wǎng)中使用的公共語言。它最著名的應用是用在瀏覽器的服務器間的通信。 HTTP屬于應用層協(xié)議,底層是靠TCP進行可靠地信息傳輸。 HTTP在傳輸一段報文時,會以流的形式將報文數(shù)據(jù)的內(nèi)容通過一條打開的TCP連接按序傳輸。TCP接到上層應用交給它的數(shù)據(jù)流之后,會按序?qū)?shù)據(jù)流打散成一個個的分段。再交到IP層,通過網(wǎng)絡進行傳輸。另一端的接收方則相反,它們將接收到的分段按序組裝好,交給上層HTTP協(xié)議進行處理。 5.2 編碼 我們再來回顧一下: 在之前的報文拆解過程中,我們看到多了很多%22,其實,0x22是單引號"的ascii值。 一方面,URL描述的資源為了能通過其他各種協(xié)議傳送,但是有些協(xié)議在傳輸過程中會剝?nèi)ヒ恍┨囟ǖ淖址? 另一方面,URL還是可讀的,所以那些不可打印的字符就不能在URL中使用了,比如空格; 最后,URL還得是完整的,它需要支持所有語言的字符。 總之,基于很多原因,URL設計者將US-ASCII碼和其轉義序列集成到URL中,通過轉義序列,就可以用US-ASCII字符集的有限子集對任意字符或數(shù)據(jù)進行編碼了。 轉義的方法:百分號(%)后跟著兩個表示ASCII碼的十六進制數(shù)。比如: 所以上面在瀏覽器發(fā)送給服務器的URL進行了非“安全字符”編碼,也就不奇怪了吧? 在URL中,當上面的保留字符用在保留用途之外的場合時,需要對URL進行編碼。 5.3 MIME類型 響應數(shù)據(jù)中,我們注意到有一個首部: Content-Type: text/plain; charset=utf-8 互聯(lián)網(wǎng)上有數(shù)千種不同的數(shù)據(jù)類型,HTTP給每種對象都打上了MIME(Multipurpose Internet Media Extension, 多用途因特網(wǎng)郵件擴展)標簽,也就是響應數(shù)據(jù)中的Content-Type. MIME本來是用在郵件協(xié)議中的,后來被移植到了HTTP中。瀏覽器從服務器上取回了一個對象時,會去查看MIME類型,從而得知如何處理這種對象,是該展示圖片,還是調(diào)用聲卡播放聲音。 MIME通過斜杠來標識對象的主類型和其中的特定的子類型,下表展示了一些常見的類型,其中的實體主體是指body部分: 5.4 URI/URL/URN URI(Uniform Resource Identifier, 統(tǒng)一資源標識符)表示服務器資源,URL(Uniform Resource Locator, 統(tǒng)一資源定位符)和URN(Uniform Resource Name, 統(tǒng)一資源名)是URI的具體實現(xiàn)。URI是一個通用的概念,由兩個主要的子集URL和URN構成,URL通過位置、URN通過名字來標識資源。 URL定義了資源的位置,表示資源的實際地址,在使用URL的過程中,如果URL背后的資源發(fā)生了位置移動,訪問者就找不到它了。這個時候就要用到URN了,它給定資源一個名字,無論它移動到哪里,都可以通過這個名字來訪問到它,簡直完美! URL通常的格式是: 協(xié)議方案+服務器地址+具體的資源路徑 協(xié)議方案(scheme),如 http, ftp,告知web客戶端怎樣訪問資源);服務器地址,如 www.oreilly.com ; 具體的資源路徑,如 index.html. 5.5 HTTP方法 HTTP支持幾種不同的請求方法,每種方法對服務器要求的動作不同,如下圖是幾種常見的方法: HEAD方法只獲取頭部,不獲取數(shù)據(jù)部分。通過頭部可以獲取比如資源的類型(Content-Type)、資源的長度(Content-Length)這些信息。這樣,客戶端可以獲取即將請求資源的一些情況,可以做到心中有數(shù)。 1)POST用于向服務器發(fā)送數(shù)據(jù),常見的是提交表單; 2)PUT用于向服務器上的資源存儲數(shù)據(jù)。 5.6 狀態(tài)碼 每條HTTP的響應報文都會帶上一個三位數(shù)字的狀態(tài)碼和一條解釋性的“原因短語”,通知客戶端本次請求的狀態(tài),幫助客戶端快速理解事務處理結果, 最常見的是: 200 OK 404 Not Found 500 Internal Server Error 我們平時使用瀏覽器的時候,很多的錯誤碼其實是由瀏覽器處理的,我們感知不到。但是404 Not Found會穿透重重迷霧,來到我們面前,為何?那是因為他對我們愛的深沉??! 客戶端可以據(jù)此狀態(tài)碼,決定下一步的行動(如重定向等)。 三位數(shù)字的第一位表示分類: 5.7 報文格式 HTTP報文實際上是由一行行的字符串組成的,每行字符串的末尾用\r\n分隔,人類可以很方便的閱讀。順便說一句,不是所有的協(xié)議都對人類這么友好的,像thrift協(xié)議,直接甩一堆字節(jié)給你,告訴你說0x0001表示調(diào)用方法,諸如此類的,你只能對著一個十六進制的數(shù)據(jù)塊一個個地去“解碼”。不可能像HTTP協(xié)議這樣,直接將字符編碼,人類可以直接讀懂。 舉個簡單的請求報文和響應報文的格式的例子: 實際上,請求報文也是可以有body(主體)部分的。請求報文是由請求行(request line)、請求頭部(header)、空行、請求數(shù)據(jù)四個部分組成。唯一要注意的一點就是,請求報文即使body部分是空的,請求頭部后的回車換行符也是必須要有的。 響應報文的格式和請求報文的格式類似: 請求報文、響應報文的起始行和響應頭部里的字段都是文本化、結構化的。而請求body卻可以包含任意二進制數(shù)據(jù)(如圖片、視頻、軟件等),當然也可以包含文本。 有些首部是通用的,有些則是請求或者響應報文才會有的。 順便提一下, 用telnet直連服務器的http端口,telnet命令會建立一條TCP通道,然后就可以通過這個通道直接發(fā)送HTTP請求數(shù)據(jù),獲取響應數(shù)據(jù)了。 6、HTTP協(xié)議進階 6.1 代理 HTTP的代理服務器既是Web服務器,又是Web客戶端。 使用代理可以“接觸”到所有流過的HTTP流量,代理可以對其進行監(jiān)視和修改。常見的就是對兒童過濾一些“成人”內(nèi)容;網(wǎng)絡工程師會利用代理服務器來提高安全性,它可以限制哪些應用層的協(xié)議數(shù)據(jù)可以通過,過濾“病毒”等數(shù)據(jù);代理可以存儲緩存的文件,直接返回給訪問者,無需請求原始的服務器資源;對于訪問慢速網(wǎng)絡上的公共內(nèi)容時,可以假扮服務器提供服務,從而提高訪問速度;這被稱為反向代理;可以作為內(nèi)容路由器,如對付費用戶,則將請求導到緩存服務器,提高訪問速度;可以將頁面的語言轉換到與客戶端相匹配,這稱為內(nèi)容轉碼器; 匿名代理會主動從HTTP報文中刪除身份相關的信息,如User-Agent, Cookie等字段。 現(xiàn)實中,請求通過以下幾種方式打到代理服務器上去: 報文每經(jīng)過一個中間點(代理或網(wǎng)關),都需要在首部via字段的末尾插入一個可以代表本節(jié)點的獨特的字符串,包含實現(xiàn)的協(xié)議版本和主機地址。注意下圖中的via字段。 請求和響應的報文傳輸路徑通常都是一致的,只不過方向是相反的。因此,響應報文上的via字段表示的中間節(jié)點的順序是剛好相反的。 6.2 緩存 當有很多請求訪問同一個頁面時,服務器會多次傳輸同一份數(shù)據(jù),這些數(shù)據(jù)重復地在網(wǎng)絡中傳輸著,消耗著大量帶寬。如果將這些數(shù)據(jù)緩存下來,就可以提高響應速度,節(jié)省網(wǎng)絡帶寬了。 大部分緩存只有在客戶端發(fā)起請求,并且副本已經(jīng)比較舊的情況下才會對副本的新鮮度進行檢測。最常用的請求首部是If-Modified-Since, 如果在xx時間(此時間即為If-Modified-Since的值)之后內(nèi)容沒有變化,服務器會回應一個304 Not Modified. 否則,服務器會正常響應,并返回原始的文件數(shù)據(jù),而這個過程中被稱為再驗證命中。 再驗證可能出現(xiàn)命中或未命中的情況: 1)未命中時,服務器回復200 OK,并且返回完整的數(shù)據(jù); 2)命中時,服務器回復304 Not Modified。 還有一種情況,緩存被刪除了,那么根據(jù)響應狀態(tài)碼,緩存服務器也會刪除自己緩存的副本。 順帶提一句,若要在項目中使用緩存,就一定要關注緩存命中比例。若命中比例不高,就要重新考慮設置緩存的必要性了。 緩存服務器返回響應的時候,是基于已緩存的服務器響應的首部,再對一些首部字段做一些微調(diào)。比如向其中插入新鮮度信息(如Age, Expires首部等),而且通常會包含一個via首部來說明緩存是由一個緩存代理提供的。注意,這時不要修改Date字段,它表示原始服務器最初構建這條響應的日期。 HTTP通過文檔過期機制和服務器再驗證機制保持已緩存數(shù)據(jù)和服務器間的數(shù)據(jù)充分一致。 文檔過期通過如下首部字段來表示緩存的有效期: 當上面兩個字段暗示的過期時間已到,需要向服務器再次驗證文檔的新鮮度。如果這時緩存仍和服務器上的原始文檔一致,緩存只需要更新頭部的相關字段。如上表中提到的Expires字段等。 為了更好的節(jié)省網(wǎng)絡流量,緩存服務器可以通過相關首部向原始服務器發(fā)送一個條件GET請求, 這樣只有在緩存真正過期的情況下,才會返回原始的文檔,否則只會返回相關的首部。 條件GET請求會用到如下的字段: 6.3 cookie cookie是服務器“貼在”客戶端身上的標簽,由客戶端維護的狀態(tài)片段,并且只會回送給合適的站點。 有兩類cookie: 1)會話cookie、持久cookie. 會話cookie在退出瀏覽器后就被刪除了; 2)而持久cookie則保存在硬盤中,計算機重啟后仍然存在。 服務器在給客戶端的響應字段首部加上Set-cookie或Set-cookie2, 值為名字=值的列表,即可以包含多個字段。當下次瀏覽器再次訪問到相同的網(wǎng)站時,會將這些字段通過Cookie帶上。cookie中保留的內(nèi)容是服務器給此客戶端打的標簽,方便服務進行追蹤的識別碼。瀏覽器會將cookie以特定的格式存儲在特定的文件中。 瀏覽器只會向產(chǎn)生這條cookie的站點發(fā)生cookie. Set-cookie字段的值會包含domain這個字段,告知瀏覽器可以把這條cookie發(fā)送給給相關的匹配的站點。path字段也是相似的功能。 如i瀏覽器收到如下的cookie: Set-cookie: user="mary"; domain="stefno.com" 那么瀏覽器在訪問任意以stefno.com結尾的站點都會發(fā)送: Cookie: user="mary" 6.4 實體和編碼 響應報文中的body部分傳輸?shù)臄?shù)據(jù)本質(zhì)上都是二進制。我們從上面的報文數(shù)據(jù)也可以看出來,都是用十六進制數(shù)來表示,關鍵是怎么解釋這塊內(nèi)容。 如果Content-Type定義是text/plain, 那說明body內(nèi)容就是文本,我們直接按文本編碼來解釋;如果Content-Type定義是image/png, 說明body部分是一幅圖片,那我們就按圖片的格式去解釋數(shù)據(jù)。 Content-Length標示報文主體部分的數(shù)據(jù)長度大小,如果內(nèi)容是壓縮的,那它表示的就是壓縮后的大小。另外,Content-Length在長連接的情況下,可以對多個報文進行正確地分段。所以,如果沒有采用分塊編碼,響應數(shù)據(jù)中必須帶上Content-Length字段。分塊編碼的情形中,數(shù)據(jù)被拆分成很多小塊,每塊都有大小說明。因此,任何帶有主體部分的報文(請求或是響應)都應帶上正確的Content-Length首部。 HTTP的早期版本采用關閉連接的方式來劃定報文的結束。這帶來的問題是顯而易見的:客戶端并不能分清是因為服務器正常結束還是中途崩潰了。這里,如果是客戶端用關閉來表示請求報文主體部分的結束,是不可取的,因為關閉之后,就無法獲取服務器的響應了。當然,客戶端可以采用半關閉的方式,只關閉數(shù)據(jù)發(fā)送方向,但是很多服務器是不識別的,會把半關閉當成客戶端要成服務器斷開來處理。 HTTP報文在傳輸?shù)倪^程中可能會遭到代理或是其他通信實體的無意修改,為了讓接收方知道這種情況,服務器會對body部分作一個md5, 并把值放到Content-MD5這個字段中。但是,如果中間的代理即修改了報文主體,又修改了md5, 就不好檢測了。因此規(guī)定代理是不能修改Content-MD5首部的。這樣,客戶端在收到數(shù)據(jù)后,先進行解碼,再算出md5, 并與Content-MD5首部進行比較。這主要是防止代理對報文進行了無意的改動。 HTTP在發(fā)送內(nèi)容之前需要對其進行編碼,它是對報文主體進行的可逆變換。比如將報文用gzip格式進行壓縮,減少傳輸時間。 常見的編碼類型如下: 當然,客戶端為了避免服務器返回自己不能解碼的數(shù)據(jù),請求的時候,會在Accept-Encoding首部里帶上自己支持的編碼方式。如果不傳輸?shù)脑?,默認可以接受任何編碼方式。 上面提到的編碼是內(nèi)容編碼,它只是在響應報文的主體報文將原始數(shù)據(jù)進行編碼,改變的是內(nèi)容的格式。還有另一種編碼:傳輸編碼。它與內(nèi)容無關,它是為了改變報文數(shù)據(jù)在網(wǎng)絡上傳輸?shù)姆绞?。傳輸編碼是在HTTP 1.1中引入的一個新特性。 通常,服務器需要先生成數(shù)據(jù),再進行傳輸,這時,可以計算數(shù)據(jù)的長度,并將其編碼到Content-Length中。但是,有時,內(nèi)容是動態(tài)生成的,服務器希望在數(shù)據(jù)生成之前就開始傳輸,這時,是沒有辦法知道數(shù)據(jù)大小的。這種情況下,就要用到傳輸編碼來標注數(shù)據(jù)的結束的。 HTTP協(xié)議中通過如下兩個首部來描述和控制傳輸編碼: 分塊編碼的報文形式是這樣的: 每個分塊包含一個長度值(十六進制,字節(jié)數(shù))和該分塊的數(shù)據(jù)。用于區(qū)隔長度值和數(shù)據(jù)。長度值不包含分塊中的任何序列。最后一個分塊,用長度值0來表示結束。注意報文首部包含一個Trailer: Content-MD5, 所以在緊跟著最后一個報文結束之后,就是一個拖掛。其他如,Content-Length, Trailer, Transfer-Encoding也可以作為拖掛。 內(nèi)容編碼和傳輸編碼是可以結合起來使用的。 6.5 國際化支持 HTTP為了支持國際化的內(nèi)容,客戶端要告知服務器自己能理解的何種語言,以及瀏覽器上安裝了何種字母表編碼算法。這通過Accept-Charset和Accept-Language首部實現(xiàn)。 比如: Accept-Language: fr, en;q=0.8 Accept-Charset: iso-8859-1, utf-8 表示: 客戶端接受法語(fr, 優(yōu)先級默認為1.0)、英語(en, 優(yōu)先級為0.8),支持iso-8859-1, utf-8兩種字符集編碼。服務器則會在Content-Type首部里放上charset. 本質(zhì)上,HTTP報文的body部分存放的就是一串二進制碼,我們先把二進制碼轉換成字符代碼(如ascii是一個字節(jié)表示一個字符,而utf-8則表示一個字符的字節(jié)數(shù)不定,每個字符1~6個字節(jié)),之后,用字符代碼去字符集中找到對應的元素。 比較常見的字符集是US-ASCII: 這個字符集是所有字符集的始祖,早在1968年就發(fā)布了標準。ASCII碼的代碼值從0到127, 只需要7個bit位就可以覆蓋代碼空間。HTTP報文的首部、URL使用的字符集就是ASCII碼??梢栽倏聪律衔膱笪姆治霾糠值腶csii碼集。 US-ASCII是把每個字符編碼成固定的7位二進制值。UTF-8則是無固定的編碼方案。第一個字節(jié)的高位用來表示編碼后的字符所用的字節(jié)數(shù)(如果所用的字節(jié)數(shù)是5,則第一個字節(jié)前5bit都是1,第6bit是0),所需的后續(xù)的字節(jié)都含有6位的代碼值,前兩個bit位是用10標識。 舉個例子,漢字“嚴”的Unicode編碼為4E25(100111000100101), 共有15位,落在上表中的第三行,因此“嚴”的編碼就需要三個字節(jié)。將100111000100101填入上表中的c位即可。因此,嚴的UTF-8編碼是11100100 10111000 10100101,轉換成十六進制就是E4B8A5. 比如我在谷歌搜索框里搜索“嚴”字,google發(fā)出的請求如下: https://www.google.com.hk/search?q=%E4%B8%A5&oq=%E4%B8%A5&aqs=chrome..69i57j0l5.3802j0j4&sourceid=chrome&ie=UTF-8&gws_rd=cr q=%E4%B8%A5 這個就是搜索的詞了。 6.6 重定向與負載均衡 Web內(nèi)容通常分散地分布在很多地方,這可以防止“單點故障”,萬一某個地方發(fā)生地震了,機房被毀了,那還有其他地方的機房可以提供服務。一般都會有所謂的“雙活”,“多活”,所謂狡兔三窟嘛。 這樣,用戶的請求會根據(jù)負載均衡的原則,被重定向到它應該去的地方。 HTTP重定向: 服務器收到客戶端請求后,向客戶端返回一條帶有狀態(tài)碼302重定向的報文,告訴他們應該去其他的地方試試。web站點將重定向看成一種簡單的負載均衡策略來使用,重定向服務器找到可用的負載最小的機器,由于服務器知道客戶端的地址,理論上來說,可以做到最優(yōu)的重定向選擇。 當然,缺點也是顯而易見的,由于客戶端要發(fā)送兩次請求,因此會增加耗時。 DNS重定向: DNS將幾個IP地址關聯(lián)到一個域上,采用算法決定返回的IP地址??梢允呛唵蔚妮嗈D;也可以是更高級的算法,如返回負載最輕的服務器的IP地址,稱為負載均衡算法;如果考慮地理位置,返回給客戶端最近位置的地址,稱為鄰接路由算法;還有一種是繞過出現(xiàn)故障的地址,稱為故障屏蔽算法。 DNS服務器總是會返回所有的IP地址,但是DNS客戶端一般只會使用第一個IP地址,而且會緩存下來,之后會一直用這個地址。所以,DNS輪轉通常不會平衡單個客戶端的負載。但是,由于DNS服務器對于不同的請求,總是會返回輪轉后的IP地址列表,因此,會把負載分散到多個客戶端。 6.7 HTTP連接 HTTP連接是HTTP報文傳輸?shù)年P鍵通道。 【并行連接】: 對于一個頁面上同時出現(xiàn)多個對象的時候,如果瀏覽器并行地打開多個連接,同時去獲取這些對象,多個連接的TCP握手時延可以進行重疊,速度會快起來。 如一個包含3張圖片的頁面,瀏覽器要發(fā)送4次HTTP請求來獲取頁面。1個用于頂層的HTML頁面,3個用于圖片。 如果采用串行方式,那么連接時延會進行疊加: 采用并行連接之后: 但是并行連接也不絕對提升速度,如果一個頁面有數(shù)百個內(nèi)嵌對象,那要啟動數(shù)百個連接,對服務器的性能也是非常大的挑戰(zhàn)。所以,通常瀏覽器會限制并行連接的總數(shù)據(jù)在一個較小的值,通常是4個,而且服務端可以隨意關閉客戶端超量的連接。 另一方面,如果客戶端網(wǎng)絡帶寬較小,每個連接都會去爭搶有限的帶寬,每個連接都會獲取較小的速度,即每個對象都會以較小的速度去加載。這樣,并行連接帶來的速度提升就會比較小,甚至沒有提升。 【持久連接】: 持久連接即HTTP的keep-alive機制。 我們知道HTTP請求是“請求-應答”模式,每次請求-應答都要新建一個連接,完成之后要斷開連接。HTTP是無狀態(tài)的,連接之間沒有任何關系。 HTTP是應用層協(xié)議,TCP是傳輸層協(xié)議。HTTP底層仍然采用TCP進行傳輸數(shù)據(jù)。TCP為HTTP提供了一層可靠的比特傳輸通道。HTTP一般交換的數(shù)據(jù)都不大,而每次連接都要進行TCP三次握手,很大一部分時間都消耗在這上面,有時候甚至能達到50%。如果能復用連接,就可以減少由于TCP三次握手所帶來的時延。 HTTP 1.1默認開啟keep-alive機制,從上面抓到的包也可以看到。這樣,數(shù)據(jù)傳輸完成之后保持TCP連接不斷開,之后同域名下復用連接,繼續(xù)用這個通道傳輸數(shù)據(jù)。服務器在響應一個請求后,可以保持這個連接keep-alive timeout的時間,在這個時間內(nèi)沒有請求,則關閉此連接;否則,重新開始倒計時keep-alive timeout時間。 HTTP有keep-alive機制,目的是可以在一個TCP連接上傳輸多個HTTP事務,以此提高通信效率。底層的TCP其實也有keep-alive機制,它是為了探測TCP連接的活躍性。TCP層的keepalive可以在任何一方設置,可以是一端設置、兩端同時設置或者兩端都沒有設置。新建socket的時候需要設置,從而使得協(xié)議棧調(diào)用相關函數(shù)tcp_set_keepalive,來激活連接的keep-alive屬性。 當網(wǎng)絡兩端建立了TCP連接之后,閑置(雙方?jīng)]有任何數(shù)據(jù)流發(fā)送往來)時間超過tcp_keepalive_time后,服務器內(nèi)核就會嘗試向客戶端發(fā)送偵測包,來判斷TCP連接狀況(有可能客戶端崩潰、強制關閉了應用、主機不可達等等)。如果沒有收到對方的回答(ack包),則會在 tcp_keepalive_intvl后再次嘗試發(fā)送偵測包,直到收到對方的ack,如果一直沒有收到對方的ack,一共會嘗試 tcp_keepalive_probes次,每次的間隔時間在這里分別是15s, 30s, 45s, 60s, 75s。如果嘗試tcp_keepalive_probes次后,依然沒有收到對方的ack包,則會丟棄該TCP連接。TCP連接默認閑置時間是2小時,一般設置為30分鐘足夠了。 【管道化連接】: 在keep-alive的基礎上,我們可以做地更進一步,在響應到達之前,我們將多條請求按序放入請求隊列,服務端在收到請求后,必須按照順序?qū)埱蟮捻憫?。但由于網(wǎng)絡環(huán)境非常復雜,因此即使請求是按順序發(fā)送的,也不一定是按順序到達服務端的。而且就算是服務端按序處理的,也不一定是按序返回給客戶端,所以最好是在響應中附帶一些可以標識請求的參數(shù)。 為了安全起見,管道化的連接只適合“冪等”的請求,一般我們認為:GET/HEAD/PUT/DELETE/TRACE/OPTIONS等方法都是冪等的。 7、本文小結 以上,就是所有HTTP的通信細節(jié)了,足夠在日常開發(fā) 作中使用了。更多沒有涉及的細節(jié)可以在用到的時候再去仔細研究。 文章看完了,不知道你對HTTP的理解有沒有更上一層樓?歡迎一起交流探討。 8、參考資料 [1]【http長連接】 https://www.cnblogs.com/cswuyg/p/3653263.html [2]【http/tcp keep alive】 https://segmentfault.com/a/1190000012894416 [3]【http/tcp keep alive】 http://www.nowamagic.net/academy/detail/23350305 [4]【http/tcp keep alive】 https://laravel-china.org/articl ... n-the-http-protocol [5]【tcp keep alive】 http://blog.51cto.com/zxtong/1788252 [6]【http權威指南】 https://book.douban.com/subject/10746113/ [7]【HTTP狀態(tài)碼】 https://www.cnblogs.com/starof/p/5035119.html [8]【HTTP協(xié)議】 https://www.cnblogs.com/ranyonsue/p/5984001.html [9]【HTTP狀態(tài)分類】 http://www.runoob.com/http/http-status-codes.html [10]【url編碼】 http://www.ruanyifeng.com/blog/2010/02/url_encoding.html 附錄:更多網(wǎng)絡編程文章 《 TCP/IP詳解 - 第11章·UDP:用戶數(shù)據(jù)報協(xié)議 》 《 TCP/IP詳解 - 第17章·TCP:傳輸控制協(xié)議 》 《 TCP/IP詳解 - 第18章·TCP連接的建立與終止 》 《 TCP/IP詳解 - 第21章·TCP的超時與重傳 》 《 技術往事:改變世界的TCP/IP協(xié)議(珍貴多圖、手機慎點) 》 《 通俗易懂-深入理解TCP協(xié)議(上):理論基礎 》 《 通俗易懂-深入理解TCP協(xié)議(下):RTT、滑動窗口、擁塞處理 》 《 理論經(jīng)典:TCP協(xié)議的3次握手與4次揮手過程詳解 》 《 理論聯(lián)系實際:Wireshark抓包分析TCP 3次握手、4次揮手過程 》 《 計算機網(wǎng)絡通訊協(xié)議關系圖(中文珍藏版) 》 《 UDP中一個包的大小最大能多大? 》 《 P2P技術詳解(一):NAT詳解——詳細原理、P2P簡介 》 《 P2P技術詳解(二):P2P中的NAT穿越(打洞)方案詳解 》 《 P2P技術詳解(三):P2P技術之STUN、TURN、ICE詳解 》 《 通俗易懂:快速理解P2P技術中的NAT穿透原理 》 《 高性能網(wǎng)絡編程(一):單臺服務器并發(fā)TCP連接數(shù)到底可以有多少 》 《 高性能網(wǎng)絡編程(二):上一個10年,著名的C10K并發(fā)連接問題 》 《 高性能網(wǎng)絡編程(三):下一個10年,是時候考慮C10M并發(fā)問題了 》 《 高性能網(wǎng)絡編程(四):從C10K到C10M高性能網(wǎng)絡應用的理論探索 》 《 高性能網(wǎng)絡編程(五):一文讀懂高性能網(wǎng)絡編程中的I/O模型 》 《 高性能網(wǎng)絡編程(六):一文讀懂高性能網(wǎng)絡編程中的線程模型 》 《 技術掃盲:新一代基于UDP的低延時網(wǎng)絡傳輸層協(xié)議——QUIC詳解 》 《 讓互聯(lián)網(wǎng)更快:新一代QUIC協(xié)議在騰訊的技術實踐分享 》 《 現(xiàn)代移動端網(wǎng)絡短連接的優(yōu)化手段總結:請求速度、弱網(wǎng)適應、安全保障 》 《 聊聊iOS中網(wǎng)絡編程長連接的那些事 》 《 移動端IM開發(fā)者必讀(一):通俗易懂,理解移動網(wǎng)絡的“弱”和“慢” 》 《 移動端IM開發(fā)者必讀(二):史上最全移動弱網(wǎng)絡優(yōu)化方法總結 》 《 IPv6技術詳解:基本概念、應用現(xiàn)狀、技術實踐(上篇) 》 《 IPv6技術詳解:基本概念、應用現(xiàn)狀、技術實踐(下篇) 》 《 從HTTP/0.9到HTTP/2:一文讀懂HTTP協(xié)議的歷史演變和設計思路 》 《 以網(wǎng)游服務端的網(wǎng)絡接入層設計為例,理解實時通信的技術挑戰(zhàn) 》 《 邁向高階:優(yōu)秀Android程序員必知必會的網(wǎng)絡基礎 》 《 全面了解移動端DNS域名劫持等雜癥:技術原理、問題根源、解決方案等 》 《 美圖App的移動端DNS優(yōu)化實踐:HTTPS請求耗時減小近半 》 《 Android程序員必知必會的網(wǎng)絡通信傳輸層協(xié)議——UDP和TCP 》 《 IM開發(fā)者的零基礎通信技術入門(一):通信交換技術的百年發(fā)展史(上) 》 《 IM開發(fā)者的零基礎通信技術入門(二):通信交換技術的百年發(fā)展史(下) 》 《 IM開發(fā)者的零基礎通信技術入門(三):國人通信方式的百年變遷 》 《 IM開發(fā)者的零基礎通信技術入門(四):手機的演進,史上最全移動終端發(fā)展史 》 《 IM開發(fā)者的零基礎通信技術入門(五):1G到5G,30年移動通信技術演進史 》 《 IM開發(fā)者的零基礎通信技術入門(六):移動終端的接頭人——“基站”技術 》 《 IM開發(fā)者的零基礎通信技術入門(七):移動終端的千里馬——“電磁波” 》 《 IM開發(fā)者的零基礎通信技術入門(八):零基礎,史上最強“天線”原理掃盲 》 《 IM開發(fā)者的零基礎通信技術入門(九):無線通信網(wǎng)絡的中樞——“核心網(wǎng)” 》 《 IM開發(fā)者的零基礎通信技術入門(十):零基礎,史上最強5G技術掃盲 》 《 IM開發(fā)者的零基礎通信技術入門(十一):為什么WiFi信號差?一文即懂! 》 《 IM開發(fā)者的零基礎通信技術入門(十二):上網(wǎng)卡頓?網(wǎng)絡掉線?一文即懂! 》 《 IM開發(fā)者的零基礎通信技術入門(十三):為什么手機信號差?一文即懂! 》 《 IM開發(fā)者的零基礎通信技術入門(十四):高鐵上無線上網(wǎng)有多難?一文即懂! 》 《 IM開發(fā)者的零基礎通信技術入門(十五):理解定位技術,一篇就夠 》 >> 更多同類文章 …… (本文同步發(fā)布于: http://www.52im.net/thread-2456-1-1.html )
來源:開源中國
發(fā)布時間:2019-04-13 11:27:00
HDC調(diào)試需求開發(fā)(15萬預算),能者速來!>>> 問題描述 其實問題來源是我在進行搭建簡易服務器的時候出現(xiàn)的,在調(diào)試過程中我發(fā)現(xiàn)每一次訪問url,通過 client = server.accept(); 都會接收到除了正常連接進來的外,一個沒有數(shù)據(jù)傳輸?shù)目蛻舳藄ocket,對上面接收到的socket,進行下面操作為結果為空。 client.getInputStream() 這里請求url的方式用的是postman,不是用的瀏覽器,所有可以排除掉瀏覽器對各種css,js,favicon.ico的請求, 如下圖,是我發(fā)起的一個/login請求: 這里訪問的是我上面提到的簡易服務器,服務器采用的是BIO模式實現(xiàn)的短連接,并且在檢查到`client.getInputStream()==null`后關閉了客戶機的socket。 如上圖中,深色區(qū)域內(nèi)客戶機端口號為32623的報文段,就是我指的未知的TCP連接,未標深色的端口號為:32624就是正常的訪問/login的TCP請求。 可以看到這個特殊的socket,沒有傳輸任何數(shù)據(jù),而且連接后立即關閉了 (這里我在服務端確實在判斷了其輸入流為空后對其socket進行了close操作,但是報文端顯示它卻是從客戶端先發(fā)起的,所以現(xiàn)在也不確定它是我在服務端造成立即關閉,還是客戶端造成的) 然后我考慮到是否是由于我服務器代碼的某個bug造成的,然后我測試了本機的一個JavaWeb項目,以Tomcat作為服務器,我再次進行抓包,得到如下結果: 上圖發(fā)現(xiàn),還是有這么一個特殊的TCP連接,這似乎存在著共性,并且特殊請求的端口和正常請求的端口號是相連的。 所有我考慮這難道是什么來自協(xié)議或者什么的約束? 哎,學淺! 查了一些資料,未果。 于是尋求各路大俠幫助!答疑解惑,感謝!
來源:開源中國
發(fā)布時間:2019-03-24 10:02:00
HDC調(diào)試需求開發(fā)(15萬預算),能者速來!>>> 同樣的請求 在 Wireshark的 界面 看到 4個連接 然后追蹤流,又變成了 2個 ,什么意思? 并且 用 Charles 觀察 ,有5個。。。就不說 那兩個文件 了,就第一個 .ashx 的鏈接 怎么丟了呢? Charles 是用手機請求的;ws 是 觀察的模擬器的,但我確定 點的是一個連接,是這個原因嗎?
來源:開源中國
發(fā)布時間:2016-10-27 10:41:00
暑假在家,手機被堂妹摔壞了。一個星期前寄去修,昨天被告知電路板斷線無法維修,看來與 Android 斷源了。 用了 Nokia 6030 半個多月,非智能機就是待機長。半年內(nèi)都不會買新手機了...
來源:V2EX
發(fā)布時間:2020-08-27 17:38:04
貌似差不多?16G 版本的都大概人民幣 4200 吧?有朋友讓我?guī)退I,打聽下有用這款手機的沒,購買途徑那個更優(yōu)些。
來源:V2EX
發(fā)布時間:2020-08-27 17:37:57
HDC調(diào)試需求開發(fā)(15萬預算),能者速來!>>> 我是tomcat7,通過keytool生成了keystore,自簽名,配置了8443端口,能夠https訪問,瀏覽器也提示了不安全,說明正常,但是我通過wireshark抓包并不能看到握手過程,請問各位是還要配置什么嗎?
來源:開源中國
發(fā)布時間:2018-04-17 11:30:00
HDC調(diào)試需求開發(fā)(15萬預算),能者速來!>>> 本手冊介紹: 介紹Wireshark安裝、界面、基本操作 詳細清單如下: 目錄 譯者序 1. 為什么要翻譯 2. 關于本手冊 2.1. 用什么工具編寫的 2.2. 手冊翻譯的效果 2.3. 翻譯中的問題 3. 補充說明 前言 1. 序言 2. 本書的閱讀對象 3. 感謝 4. 文檔約定 5. 如何獲得本書最新版本? 6. 反饋 1. 介紹 1.1. 什么是Wireshark 1.1.1. 主要應用 1.1.2. 特性 1.1.3. 捕捉多種網(wǎng)絡接口 1.1.4. 支持多種其它程序捕捉的文件 1.1.5. 支持多格式輸出 1.1.6. 對多種協(xié)議解碼提供支持 1.1.7. 開源軟件 1.1.8. Wireshark不能做的事 1.2. 系通需求 1.2.1. 一般說明 1.2.2. Microsoft Windows 1.2.3. Unix/Linux 1.3. 從哪里可以得到Wireshark 1.4. Wiresahrk簡史 1.5. Wireshark開發(fā)維護 1.6. 匯報問題和獲得幫助 1.6.1. 網(wǎng)站 1.6.2. 百科全書 1.6.3. FAQ 1.6.4. 郵件列表 1.6.5. 報告問題 1.6.6. 在UNIX/Linux平臺追蹤軟件錯誤 1.6.7. 在Windows平臺追蹤軟件錯誤 2. 編譯/安裝Wireshark 2.1. 須知 2.2. 獲得源 2.3. 在UNIX下安裝之前 2.4. 在UNIX下編譯Wireshark 2.5. 在UNIX下安裝二進制包 2.5.1. 在Linux或類似環(huán)境下安裝RPM包 2.5.2. 在Debian環(huán)境下安裝Deb包 2.5.3. 在Gentoo Linux環(huán)境下安裝Portage 2.5.4. 在FreeBSD環(huán)境下安裝包 2.6. 解決UNIX下安裝過程中的問題 2.7. 在Windows下編譯源 2.8. 在Windows下安裝Wireshark 2.8.1. 安裝Wireshark 2.8.2. 手動安裝WinPcap 2.8.3. 更新Wireshark 2.8.4. 更新WinPcap 2.8.5. 卸載Wireshark 2.8.6. 卸載WinPcap 3. 用戶界面 3.1. 須知 3.2. 啟動Wireshark 3.3. 主窗口 3.3.1. 主窗口概述 3.4. 主菜單 3.5. "File"菜單 3.6. "Edit"菜單 3.7. "View"菜單 3.8. "Go"菜單 3.9. "Capture"菜單 3.10. "Analyze"菜單 3.11. "Statistics"菜單 3.12. "Help"菜單 3.13. "Main"工具欄 3.14. "Filter"工具欄 3.15. "Pcaket List"面板 3.16. "Packet Details"面板 3.17. "Packet Byte"面板 3.18. 狀態(tài)欄 4. 實時捕捉數(shù)據(jù)包 4.1. 介紹 4.2. 準備工作 4.3. 開始捕捉 4.4. 捕捉接口對話框 4.5. 捕捉選項對話框 4.5.1. 捕捉楨 4.5.2. 捉數(shù)據(jù)幀為文件。 4.5.3. 停止捕捉楨 4.5.4. 顯示楨選項 4.5.5. 名稱解析設置 4.5.6. 按鈕 4.6. 捕捉文件格式、模式設置 4.7. 鏈路層包頭類型 4.8. 捕捉時過濾 4.8.1. 自動過濾遠程通信 4.9. 在捕捉過程中 4.9.1. 停止捕捉 4.9.2. 重新啟動捕捉 5. 文件輸入/輸出及打印 5.1. 說明 5.2. 打開捕捉文件 5.2.1. 打開捕捉文件對話框 5.2.2. 輸入文件格式 5.3. 保存捕捉包 5.3.1. "save Capture File As/保存文件為"對話框 5.3.2. 輸出格式 5.4. 合并捕捉文件 5.4.1. 合并文件對話框 5.5. 文件集合 5.5.1. 文件列表對話框 5.6. 導出數(shù)據(jù) 5.6.1. "Export as Plain Text File"對話框 5.6.2. "Export as PostScript File" 對話框 5.6.3. "Export as CSV (Comma Separated Values) File" 對話框 5.6.4. "Export as PSML File" 對話框 5.6.5. "Export as PDML File" 對話框 5.6.6. "Export selected packet bytes" 對話框 5.6.7. "Export Objects" 對話框 5.7. 打印包 5.7.1. 打印 對話框 5.8. 包范圍選項 5.9. 包格式選項 6. 處理已經(jīng)捕捉的包 6.1. 瀏覽您捕捉的包 6.2. 彈出菜單項 6.2.1. 包列表面板的彈出菜單 6.2.2. 包詳情面板的彈出菜單 6.3. 瀏覽時過濾包 6.4. 建立顯示過濾表達式 6.4.1. 顯示過濾字段 6.4.2. 比較值 6.4.3. 組合表達式 6.4.4. 常見的錯誤 6.5. “Filter Expression/過濾表達式”對話框 6.6. 定義,保存過濾器 6.7. 查找包 6.7.1. 查找包對話框 6.7.2. "Find Next/查找下一個"命令 6.7.3. "Find Previous/查找上一個"命令 6.8. 到指定的包 6.8.1. "GO Back"返回命令 6.8.2. "Go Forward /向前"命令 6.8.3. "Go to Packet/到指定的包"對話框 6.8.4. "Go to Corresponding Packet/到對應的包"命令 6.8.5. "Go to Firest Packet/到第一個包"命令 6.8.6. "Go to Last Packet/到最后一個包"命令 6.9. 標記包 6.10. 時間顯示格式及參考時間 6.10.1. 包參考時間 7. 高級 7.1. 說明 7.2. "Follow TCP Stream" 7.2.1. "Follow TCP Stream"對話框 7.3. 時間戳 7.3.1. Wireshark內(nèi)置 7.3.2. 捕捉文件格式 7.3.3. 準確性 7.4. 時區(qū) 7.4.1. 正確設置你的計算機的時區(qū) 7.4.2. Wireshark和時區(qū)的關系 7.5. 重組包 7.5.1. 什么是重組包 7.5.2. 如何用Wireshark重組包 7.6. 名稱解析 7.6.1. 名字解析的流弊 7.6.2. 以太網(wǎng)名字解析(mac層) 7.6.3. IP地址解析(網(wǎng)絡層) 7.6.4. IPX名稱解析(網(wǎng)絡層) 7.6.5. TCP/UDP端口名解析(傳輸層) 7.7. 校檢和 7.7.1. Wireshark校檢和驗證 7.7.2. Checksum offloading 8. 統(tǒng)計 8.1. 說明 8.2. 摘要窗口 8.3. "Protocol Hierarchy"窗口 8.4. "Endpoints" 8.4.1. 什么是Endpoint? 8.4.2. "Endpoints"窗口 8.4.3. 特定協(xié)議的"Endpoint List"窗口 8.5. 會話/conversations 8.5.1. 什么是會話/conversation? 8.5.2. "Conversations/會話" window 8.5.3. 協(xié)議指定“Conversation List/會話列表”窗口 8.6. "IO Graphs"窗口 8.7. 服務相應時間 8.7.1. "Service Response Time DCE-RPC"窗口 8.8. 協(xié)議指定統(tǒng)計窗口 9. 個性化Wireshark 9.1. 說明 9.2. 從命令行啟動Wireshark 9.3. 包色彩顯示設置 9.4. 設置協(xié)議解碼 9.4.1. "Enable Protocols"對話框 9.4.2. 用戶指定解碼器 9.4.3. 顯示用戶指定解碼器 9.5. 首選項 9.6. 用戶表表 9.7. 創(chuàng)建過濾宏 9.8. Tektronics K12xx/15 RF5 協(xié)議表 9.9. 用戶 DLTs 協(xié)議表 9.10. SNMP用戶表 插圖清單 1.1. Wireshark捕捉包并允許您檢視其內(nèi)容 3.1. 主窗口界面 3.2. 主菜單 3.3. File菜單 3.4. "Edit"菜單 3.5. "View"菜單 3.6. "GO"菜單 3.7. "Capture"菜單 3.8. "Analyze"菜單 3.9. "Statistics"菜單 3.10. 幫助菜單 3.11. 3.12. 過濾工具欄 3.13. "Packet list/包列表"面板 3.14. "Packet Details/包詳情"面板 3.15. Packet Byte/包字節(jié)面板 3.16. 帶選項的"Paket Bytes/包字節(jié)"面板 3.17. 初始狀態(tài)欄 3.18. 載入文件后的狀態(tài)欄 3.19. 已選擇協(xié)議字段的狀態(tài)欄 4.1. "Capture Interfaces"捕捉接口對話框 4.2. "Capture Option/捕捉選項"對話框 4.3. 捕捉信息對話框 5.1. Windows下的打開對話框 5.2. 新版GtK下的打開對話框 5.3. 舊版GTK下的打開對話框 5.4. Windows下的保存為對話框 5.5. 新版GtK下的保存為對話框 5.6. 舊版GTK下的保存為對話框 5.7. Windows下的"合并"對話框 5.8. 新版GtK下的合并話框 5.9. 舊版GTK下的合并對話框 5.10. 文件列表對話框 5.11. "Export as Plain Text File"對話框 5.12. "Export as PostScript File" 對話框 5.13. "Export as PSML File"對話框 5.14. "Export as PDML File"對話框 5.15. "Export Selected Packet Bytes" 對話框 5.16. "Export Objects"對話框 5.17. "Print" 對話框 5.18. "Packet Range"選項卡 5.19. "Packet Format"選項卡 6.1. Wireshark選擇了一個TCP包后的界面 6.2. 在分離窗口瀏覽包 6.3. 包列表面板彈出菜單 6.4. 包詳情面板彈出上下文菜單項 6.5. 用TCP協(xié)議過濾 6.6. 過濾表達式對話框 6.7. "捕捉過濾器"和"顯示過濾器"對話框 6.8. "Find Packet/查找包"對話框 6.9. "GO to packet/轉到指定包"對話框 6.10. 時間參考舉例 7.1. "Follow TCP Stream"對話框 8.1. "Summary" 窗口 8.2. "Protocol Hierarchy" 窗口 8.3. "Endpoints"窗口 8.4. "Conversations"對話框 8.5. "IO Graphs" 窗口 8.6. "Compute DCE-RPC statistics"窗口 8.7. The "DCE-RPC Statistic for ..." 窗口 9.1. "Coloring Rules"對話框 9.2. "Edit Color Filter" 9.3. "Choose color"對話框 9.4. 在Wireshark中使用色彩過濾 9.5. "Enabled Protocols"對話框 9.6. "Decode As" 對話框 9.7. "Decode As: Show" 對話框 9.8. preferences對話框 表格清單 3.1. 導航快捷鍵 3.2. File菜單介紹 3.3. Edit菜單項 3.4. "View"菜單項 3.5. "GO"菜單項 3.6. "Capture"菜單項 3.7. "analyze"菜單項 3.8. 3.9. 3.10. 主工具欄選項 3.11. 4.1. 捕捉文件模式選項 5.1. 特定環(huán)境下的打開文件對話框 5.2. 特定環(huán)境下的"Save Capture File As"對話框 5.3. 不同環(huán)境下的"Merge Capture File As"對話框 6.1. 包列表彈出菜單項 6.2. 包詳情面板彈出上下文菜檔項 6.3. 顯示濾鏡比較操作符 6.4. 顯示過濾的邏輯操作符 7.1. 7.2. 范例清單 2.1. 從源文件編譯 GTK+ 2.2. 編譯、安裝libpcap 2.3. 在RedHat Linux 6.2或者基于該版本得發(fā)行版下安裝需要的RPM包 2.4. 在Deban下安裝Deb 2.5. 4.1. 捕捉來自特定主機的telnet協(xié)議 4.2. 捕捉所有不是來自10.0.0.5的telnet 通信 9.1. Wireshark幫助信息
來源:開源中國
發(fā)布時間:2010-08-03 07:02:00
HDC調(diào)試需求開發(fā)(15萬預算),能者速來!>>> @Ryan-瑞恩 你好,想跟你請教個問題: Wireshare如何進行私有協(xié)議定制解碼?應該如何進行 ?
來源:開源中國
發(fā)布時間:2017-03-18 21:05:00
主界面,也就是用戶打開后加載一會出現(xiàn)的界面,或者是登錄之后顯示的界面。 我觀察了國內(nèi)很多 app 界面,基本上都是一個 Activity 包裹 5 個以內(nèi)的 Fragment,通過上下按鈕切換來切換去。這種設計風格搞起來會不會因為加載多個 fragment 的內(nèi)容會導致運行緩慢卡頓? 除了這種界面風格,還有哪些不同手機界面風格的設計?
來源:V2EX
發(fā)布時間:2020-08-27 17:37:33
HDC調(diào)試需求開發(fā)(15萬預算),能者速來!>>> 智能輔助問診機器人 - http://robot.kangfuzi.com/?winzoom=1 像爬這個網(wǎng)站,點了一通,一個 網(wǎng)絡連接 都沒看到,怎么實現(xiàn)的,該怎么爬呢?
來源:開源中國
發(fā)布時間:2017-03-03 18:53:00
最近編譯源碼 Android9.0 在 mk 里面遇到一個奇怪的注釋: IoStats are parcelable types (vs. interface types), but the build system uses an initial I as a magic marker to mean "interface", and due to this ends up refusing to compile these files as part of the build process. A clean solution to this is actively being worked on by the build team, but is not yet available, so for now we just filter the files out by hand. * car_lib_sources := $(filter-out src/android/car/storagemonitoring/IoStats.aidl,$(car_lib_sources)) car_lib_sources := $(filter-out src/android/car/storagemonitoring/IoStatsEntry.aidl,$(car_lib_sources)) public final class IoStatsEntry implements Parcelable { ...省略代碼 } public class IoStats implements Parcelable { ...省略代碼 } 為什么在編譯的時候,把這兩個 I 開頭的 aidl 文件過濾掉?這個是系統(tǒng)的規(guī)則嘛?
來源:V2EX
發(fā)布時間:2020-08-27 17:37:22
HDC調(diào)試需求開發(fā)(15萬預算),能者速來!>>> 截獲一個APP和服務器的交互,data沒有解析出來,求大神援助
來源:開源中國
發(fā)布時間:2017-02-15 16:39:00
HDC調(diào)試需求開發(fā)(15萬預算),能者速來!>>> 在使用hosts文件進行ip域名解析的時候,有的時候會碰到一個ip段對應一個域名,想求教hosts文件應該如果寫呢?(不要窮舉法) 多謝
來源:開源中國
發(fā)布時間:2016-12-13 15:12:00
國內(nèi)版的微信,登陸電腦端之后手機休眠就無法收到消息,等到再次打開微信時才會收到。在微信上確認過了沒有選擇關閉手機提示。電腦端退出似乎就正常了。 另外想問一下,微信被 FCM 喚醒之后,是不是不會自己重新休眠,除非打開手機再關閉? 系統(tǒng)是 Lineage 17.1
來源:V2EX
發(fā)布時間:2020-08-27 17:37:15
HDC調(diào)試需求開發(fā)(15萬預算),能者速來!>>> CCProxy 我在 局域網(wǎng)內(nèi) 測試可以,但是 放到 遠程的、非 一個 局域網(wǎng)的 服務器上 不行,因為 這個外網(wǎng)ip 不知道怎么設置,用 ip138 顯示的ip好像不行??? 這臺電腦 本身有沒有 固定的外網(wǎng)ip呢? 還是說 外網(wǎng) CCProxy 無法實現(xiàn),用其他的呢?
來源:開源中國
發(fā)布時間:2016-10-08 09:57:00
感覺滑行輸入看上去快一些,但是因為準確度的原因經(jīng)常刪改,反倒很費時間,而且滑行輸入感覺摩擦力很大,手指不怎么舒服如果是傳統(tǒng)的輸入方式,雖然看上去慢,但是可以通過只輸入輔音來提高輸入速度,刪改也要快不少,而且可以用多個手指輸入?;休斎刖秃茈y同時使用多個手指
來源:V2EX
發(fā)布時間:2020-08-27 17:37:04
一直對安卓的安全性很擔憂,被反編譯的可能性很高,反編譯了竟然還能重新打包!??!無語了 APP 用 360 免費加固,不知道有沒有 5%的可能性被完美反編譯。 破解者用一個正常的賬號從服務器請求到正常的會員信息,途中無論用什么加密。 因為 APP 被反編譯了,在客戶端最終會得到解密后的明文。 破解者是不是就可以用解密的明文肆無忌憚地免費用軟件,還重新打包拿去倒賣 這樣的局該如何破呢。。 好頭痛,還是異想天開了?完全沒有思路了
來源:V2EX
發(fā)布時間:2020-08-27 17:36:58
HDC調(diào)試需求開發(fā)(15萬預算),能者速來!>>> 想使用tshark來捕捉查詢sql, 搜索了一下可以這樣使用 如下所示 于是在一個終端中執(zhí)行下面的命令 tshark -i lo0 -Y "mysql.command==3" -T fields -e mysql.query Capturing on 'Loopback' 另一個終端中執(zhí)行下面的操作mysql -h127.0.0.1 -u root -p12345678 select version(); select now(); 但是tshark所在的那個終端無任何輸出。 不知為何我本地無任何輸出? 補充信息 tshark -v TShark (Wireshark) 2.0.4 (v2.0.4-0-gdd7746e from master-2.0) mysql version : 5.7.12
來源:開源中國
發(fā)布時間:2016-07-07 21:37:00
HDC調(diào)試需求開發(fā)(15萬預算),能者速來!>>> 這個是文件的詳情頁 http://guide.medlive.cn/guidelinesub/3695 這個 是 我 登陸后 下載某個文件,根據(jù) 下載鏈接 和 詳情頁、文件名 對比 得出的 下載鏈接: http://webres.medlive.cn/upload/temp/ea/2653764/c207077dfcdf0b72dc2fffd026c7a476/%E3%80%90%E5%8C%BB%E8%84%89%E9%80%9A%E3%80%912016%E5%B9%B4%E6%9B%B4%E6%96%B0%E7%89%88GOLD%2B%E6%85%A2%E6%80%A7%E9%98%BB%E5%A1%9E%E6%80%A7%E8%82%BA%E7%96%BE%E7%97%85%E8%AF%8A%E6%96%AD%E3%80%81%E6%B2%BB%E7%96%97%E5%92%8C%E9%A2%84%E9%98%B2%E7%9A%84%E5%85%A8%E7%90%83%E7%AD%96%E7%95%A5%E7%AE%80%E4%BB%8B.pdf 轉碼 后 : http://webres.medlive.cn/upload/temp/ea/2653764/c207077dfcdf0b72dc2fffd026c7a476/【醫(yī)脈通】2016年更新版GOLD%2B慢性阻塞性肺疾病診斷、治療和預防的全球策略簡介.pdf 很奇怪, 在登錄的情況下 直接 下載文件 沒問題; 使用 程序(HttpClient3) 下載 失敗,把程序 內(nèi)生成的地址 在瀏覽器 打開,返回 404,但是你等一會,再使用瀏覽器下載,又能下載了,不過 程序 還是不行。 程序 什么時候可以呢,在你 登陸的情況下,瀏覽器下載了一次文件,該文件 就能在程序得到 流了。。。 連接中 的 /temp/ea/2653764/ 的 2653764好像 是 用戶id 怎么破,怎么能 爬蟲 下載下來呢?
來源:開源中國
發(fā)布時間:2016-10-09 17:44:00
如題。之前用過 xender 和另外一個忘了名字的軟件,感覺都不好用,還會斷連。求推薦一個好用的,盡量是免費的,謝謝。
來源:V2EX
發(fā)布時間:2020-08-27 17:36:50
在其他 Android 手機上,比如華為 P30,Mate 20 和 Vivo X7,使用 48K 采樣率錄制的 PCM 數(shù)據(jù)頻率能到 24KHz, 但在 P30 Pro 上就只能錄制到 20KHz 以下的部分。如下圖: 有大佬遇到過這個問題嗎?有沒有啥解決方案?
來源:V2EX
發(fā)布時間:2020-08-27 17:36:42
HDC調(diào)試需求開發(fā)(15萬預算),能者速來!>>> 通過 設置手機 wifi 的代理 為 本機ip,端口 為 fiddler的代理 端口(默認8888) 就可以 通過 fiddler 攔截到手機上的請求了。 但是 很奇怪,有的可以 ,有的不可以,而且 我自己 測試 不可以的居多。 試了幾個 ,瀏覽器 首先不行,應用寶 可以,然后 網(wǎng)易新聞,微信,知乎 等 一個連接 也沒 攔截到。。。 為什么呢?
來源:開源中國
發(fā)布時間:2016-05-06 18:31:00
HDC調(diào)試需求開發(fā)(15萬預算),能者速來!>>> @馬丁當 你好,想跟你請教個問題: 我學程序,主要是兩個因素,一:我剛畢業(yè),處于實習期間,然后不知道找什么工作。二:我的叔叔也是做程序員的,做了幾十年。家里人覺得這行有出息,叫我來叔叔家自學,然后叔叔有時候會點撥以下,就這樣一學就兩個多月! 學Java前,學了點電腦單片機基礎,C語言,TCP/IP協(xié)議,linux系統(tǒng)。 之后一個多月學的java,學的半懂不懂的,看的都是些基礎書籍,比如:java 從入門到精通之類的。 然后現(xiàn)在叔叔叫我馬上轉到Android app開發(fā)的陣營來,現(xiàn)在也是看的基礎書籍:Android入門到精通,Android設計模式。 現(xiàn)在我每天感覺我生活在地獄當中,看著這些代碼感覺腦袋都要炸開了?。”旧碛⒄Z方面不是很好,一開始覺得好多都不懂,后來一個一個用翻譯翻出來,發(fā)現(xiàn)看來看去就這么百來個常用的,但有些依舊不是臺東。在用Android Studio軟件做小程序,遇到種種問題,讓腦袋都痛。然后因為是在叔叔家里面學,每天的任務是看書敲代碼看書敲代碼,反反復復的過了兩個多月了,還要忍受叔母的嫌棄(叔母比較小氣的那種,因為我是白吃白住的)。 現(xiàn)在學的了Activity的調(diào)用與返回結果。感覺離大神級遙遙無期,不知道什么時候才能去面試公司,正式上班。我經(jīng)常在想,是不是我自己不適合這份職業(yè)。然后現(xiàn)在已經(jīng)學了這么長時間了,如果放棄真的是太可惜了!看了很多關于新手入門的文章,都是說堅持堅持堅持,我真的堅持的太艱難了。 其實我就是想讓您給我一個看法,說說您的成長之道。希望您能幫助我,謝謝! (之所以能找到您,是因為我的Android Studio出現(xiàn)了錯誤代碼,然后在google上搜到你的文章“ Android Support Library 學習入門 ”,然后覺得你講的不錯,雖然我現(xiàn)在聽的不是太懂,哈哈)
來源:開源中國
發(fā)布時間:2016-09-11 08:43:00
最近 Play Store 上出現(xiàn)了很多好評語但是卻打了一星打 review,一直沒有想明白是為什么,直到有一天我打開了 Play Store,發(fā)現(xiàn)在小分辨率手機上評分區(qū)域和“wirte a review"靠得非常近。于是我想明白了,很多人只想想寫一個評論,但是不小心點到了一星,所以才出現(xiàn)了一星好評這種情況。 有朋友也遇到這種情況嗎?
來源:V2EX
發(fā)布時間:2020-08-27 17:36:33
把修改過的 base.apk ,base.art ,base.odex,base.vdex 替換到 app 的安裝目錄,打開 app 可以看到修改,功能也正常使用,但是重啟之后 app 沒了。。是系統(tǒng)自動刪除的嗎?這個 feature 哪里可以關掉呀
來源:V2EX
發(fā)布時間:2020-08-27 17:36:27
https://zhuanlan.zhihu.com/p/148352810 開源庫地址: https://github.com/JeremyLiao/InterfaceLoader
來源:V2EX
發(fā)布時間:2020-08-27 17:36:18
某中等公司 P6 級別,年收入大概 40 萬左右。 感覺工作生活中除了寫代碼,沒有什么朋友。 從小不合群,不喜歡無效的社交。 偶爾感覺動力十足能改變世界, 偶爾感覺個人在歷史的滾滾潮流中渺如塵埃。 談過 2 次女朋友,都沒有走到最后。 馬上快 30 歲了,焦慮。
來源:V2EX
發(fā)布時間:2020-08-27 17:36:11
HDC調(diào)試需求開發(fā)(15萬預算),能者速來!>>> .single-line { background: #525252 none; border: 1px solid #525252; border-radius: 1px; color: inherit; display: block; padding: 6px 12px; line-height: 44px; -webkit-transition: border-color 0.15s ease-in-out 0s, box-shadow 0.15s ease-in-out 0s; transition: border-color 0.15s ease-in-out 0s, box-shadow 0.15s ease-in-out 0s; /* width: 100%; */ width: 800px; font-size: 14px; }
來源:開源中國
發(fā)布時間:2019-05-31 13:19:00
大家入職都要求打印銀行流水嗎?我面試說的工資比我實際工資高 20%,不曉得有沒有問題,不過差不多也是遇到到加薪的時候跑路的。。。
來源:V2EX
發(fā)布時間:2020-08-27 17:36:03