Http服务器如何在HTTP response中传送二进制图片

本文介绍了二进制文件的基本概念及其在网络传输中的表现形式,重点讲解了文件魔数的作用及常见类型的魔数示例,并通过Fiddler工具演示了HTTP响应中二进制数据的具体结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要想知道如何传送这些二进制,先来点二进制文件的背景知识

 

 —文件魔数 magic number:

操作系统的文件,其起始的几个字节的内容是固定的。根据这几个字节的内容就可以确定文件类型,因此这几个字节的内容被称为魔数 (magic number), 对于GIF,JPG这种二进制跨系统都是支持的(linux/Windows),对于.exe .bin这类操作系统相关的就不一样了。

 

如何查看? 用UltraEdit直接以二进制方式打开这些文件。

常见魔数

—JPEG (jpg),文件头:FFD8FF 

—PNG (png),文件头:89504E47 

—GIF (gif),文件头:47494638

—ZIP Archive (zip),文件头:504B0304

 —Java Class ,  文件头:CAFEBABE

 

 我们使用Fiddler截获浏览器的HTTP响应,可以看到请求的是一个PNG图片:

GET /**/bg-header.png

为了方便查看,将响应头调成16进制模式。

 绿色的字都是标准的HTTP响应头(response head),然后根据HTTP/1.1标准,响应头之后跟上0D0A, 0D0A

这个就是系统的换行符, 是windows标准的\r\n,响应头跟image的实际二进制数据间有一个空行,然后跟上实际的数据,可以看到蓝色里圈住的文件魔数是89504E47,正是PNG的文件头。为了验证这个二进制的有效性,用工具提供的更能save bytes,将二进制内容存储到本地:



 



 可以看到本地文件正是这样保存的,一个图片。这样,一个http的图片内容就这样存到了本地浏览器缓存,并由浏览器使用。

  • 大小: 386.5 KB
  • 大小: 14.9 KB
  • 大小: 14.4 KB
### 使用MATLAB通过HTTP协议向局域网服务器传送文件 为了实现从MATLAB到局域网服务器的文件输,可以利用MATLAB内置的支持HTTP请求的功能。具体来说,`webwrite`函数能够用于发送POST请求并上文件至指定URL。 下面是一个简单的例子来展示这一过程: #### 准备工作 确保目标服务器已配置好接收HTTP POST请求,并能处理multipart/form-data类型的表单数据,这是用来上文件的标准方式之一。 #### 创建MATLAB脚本或函数 创建一个新的MATLAB脚本来执行文件上操作。此代码片段假设有一个名为`example.txt`的本地文件需要被传送到位于同一网络内的Web服务端点。 ```matlab % 定义要上的目标URL以及源文件路径 url = 'http://your-lan-server/upload'; % 替换成实际的服务地址 filePath = fullfile(pwd, 'example.txt'); % 打开文件准备读取其内容作为二进制流 fid = fopen(filePath,'r'); fileContent = fread(fid,inf); fclose(fid); % 构建多部分消息体以适应HTTP标准中的文件上需求 fields = struct('uploadFile', {java.io.ByteArrayInputStream(uint8(fileContent))}); options = weboptions('MediaType','multipart/form-data'); % 发送带有附件的数据包给远程主机 response = webwrite(url, fields, options); disp(['Server Response: ', char(response)]); ``` 这段程序首先定义了目的地URL和待上文件的位置;接着打开该文件并将其中的内容转换成字节数组形式以便于在网络间递;最后构建了一个适合HTTP multipart/form-data编码的消息主体并通过调用`webwrite()`方法将其提交给了远端服务器[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值