有關使用HTTP協議傳輸二進制文件


HTTP協議是基於字符(ASCII)的,當Content-Type項為text/xml,則內容是文本格式;當二進制格式時,Content-Type項為image/gif,就是了。例如,瀏覽器請求一張圖片的數據包信息:

1、請求消息:

2、響應消息:

下面是二進制的數據區

由上可知,http協議中content中可以是純二進制的。

 

通常上的理解,http協議中請求、相應都是以ascii字符方式傳輸,如果要傳輸二進制需要經過BASE64或MIME等編碼(因為HTTP協議pop3、smtp郵件協議都是針對文本的,而FTP支持傳輸二進制數據,即不需要經過編碼轉換成字符型數據)

如果直接使用http傳輸二進制(不經過base64編碼),可能會造成一下問題:

 

1) 不知道傳輸字節的具體長度,如傳輸的int類型,將int類型之間轉為char以后,丟失掉了長度的信息,如數字1234567,本來只有4個字節,但是轉化成文本的“1234567”是有7個字節。在int類型的時候固然好辦,但是一個數組的時候,經過轉化以后,在轉化回來就很麻煩了。

2) 對於一些數字,二進制傳輸Server是沒法處理的。如int 1,二進制數據是0x00000001,按字節傳輸的時候,client能夠正常發送,但是libevent收到以后,在拋給libevent_http層是,會把數據截斷,前兩位0x00是字符串的停止符。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM