当图像从客户端的计算机上传到客户端(浏览器)时,它需要html中的FileReader()
API,之后会发送base64 encoded url
(比较)图像块到服务器,需要重新组装。所有这些都由开发人员照顾。
但是,当图像从服务器发送到客户端时,只有服务器内部的directory path of the image
就足够了,不需要分块和编码。
我的问题是:
1.服务器是否将图像以块的形式发送到html文件。如果没有,发送完整图像如何不是瓶装服务器的网络?大视频文件会发生什么?
2.以什么形式的二进制数据是发送给客户端的图像 - base64url / ArrayBuffer / binarystring / text / etc.
3.如果服务器确实以块的形式发送图像,那么谁在进行分块并在客户端重新组装?
感谢。
答案 0 :(得分:1)
HTML在这里并不重要。您关心的是使用的传输协议 - 最常见的是HTTP和TCP。
默认情况下,HTTP不会被分块,尽管有高级标题允许这样做 - 这些标题主要用于支持在大文件中搜索(例如PDF,视频)。从技术上讲,这不是真正的分块 - 它只是允许部分下载的基础设施(即“将数据从字节1024提供给字节2048。”)。
TCP是基于流的协议。从程序员的角度来看,这就是它的全部 - 没有分块。但从技术上讲,它将处理您的输入数据并将其作为不同的数据包发送,这些数据包在另一侧按顺序重新组装。这是一个实用性问题 - 它允许您管理数据延迟,流,数据包重传等.TCP处理连接协商期间的细节 - 流量控制,窗口大小调整,拥塞控制......
但是,这不是它的结束。所有其他层都添加了自己的位 - 他们自己的方式来打包有效负载并根据需要拆分它们自己的处理路由和过滤的方法,以及它们自己处理拥塞的方法......最后,就像HTTP原生支持下载一样,它也支持上传数据。只需发送HTTP请求(通常是POST或PUT)并以服务器理解的格式写入数据 - 从文本到base-64到原始二进制数据。您的情况下的限制因素不是服务器,浏览器或HTTP - 它是JavaScript。基本机制仍然相同 - 请求后跟响应。
现在,要解决您的问题:
img
标记中看到URL时,它将针对图像数据发起新的单独请求。它与从链接下载文件没有根本区别。至于传输本身,它的方式与原始HTML文档完全相同 - HTTP标头,然后是有效负载。[1]如今,有一些方法可以直接在HTML文本中嵌入图像,但根据图像大小,缓存要求等,它具有不同的实用性。