1. 程式人生 > >有關使用HTTP協議傳輸二進制文件

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

編碼 mar tex ont 文件 圖片 gif 消息 img

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是字符串的停止符。

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