Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript HTTP中的数据传输_Javascript_Html_Sockets_Http_Server Side - Fatal编程技术网

Javascript HTTP中的数据传输

Javascript HTTP中的数据传输,javascript,html,sockets,http,server-side,Javascript,Html,Sockets,Http,Server Side,我试图了解HTTP服务器和客户端内部如何传输数据的基本知识。我读过很多关于HTTP如何工作的文章,但我没有找到任何能回答我的一些问题的文章。 我想去通过加载一个网页的过程,因为我了解它,如果你让我注意到我错了,我将不胜感激 当我访问一个站点时,我的浏览器会向服务器请求一个HTML文件,因为我的浏览器会创建一个套接字,将其绑定到我的ip地址,并将其连接到我访问的站点服务器的侦听套接字。为了将浏览器的套接字连接到服务器,我需要一个端口号和主机名,端口号是80,因为这是HTTP,主机名是通过DNS解析

我试图了解HTTP服务器和客户端内部如何传输数据的基本知识。我读过很多关于HTTP如何工作的文章,但我没有找到任何能回答我的一些问题的文章。 我想去通过加载一个网页的过程,因为我了解它,如果你让我注意到我错了,我将不胜感激

  • 当我访问一个站点时,我的浏览器会向服务器请求一个HTML文件,因为我的浏览器会创建一个套接字,将其绑定到我的ip地址,并将其连接到我访问的站点服务器的侦听套接字。为了将浏览器的套接字连接到服务器,我需要一个端口号和主机名,端口号是80,因为这是HTTP,主机名是通过DNS解析获得的。既然套接字之间有了连接,我的浏览器就会发送GET请求。该请求是一个ASCII文件,其内容与HTTP请求相对应。我的浏览器将ASCII原始字节写入套接字,并将其写入服务器的套接字

  • 服务器将我请求的HTML文件写回套接字。服务器发送的HTML只是一个ASCII文件,服务器将逐字节写入套接字

  • 我的浏览器接收ASCII文件并对其进行解析。这里假设它找到一个图像标记。浏览器会发送该图像文件的HTTP请求。有件事我不明白。服务器如何响应?据我所知,服务器必须发回一个ASCII文件,该文件由一组头、一个CRLF和消息体组成。在这种情况下,假设我的浏览器要求使用.jpeg,服务器是否将标题作为ASCII明文写入套接字,然后将图像的原始字节写入套接字

  • 如果HTML文件有多个图像,我们是否为每个图像(每个请求)打开一个套接字

  • 假设我的浏览器现在找到一个javascript标记。当服务器响应我对该脚本的请求时,服务器是否将脚本源的ASCII字节写入套接字?js库会发生什么?服务器是否必须发送每个源代码的所有源代码

  • 在将数据写入套接字时:写入(2)是否是在套接字之间进行所有写入的正确方法

  • 关于大文件的传输:如果我点击网站上的一个按钮,让我下载一个大的PDF文件,服务器是如何完成的?我假设服务器试图将其分块传输。就我所知,有一种分块编码的选择。这是路吗?如果是,文件是否划分为块,并将这些块附加到ASCII响应中,然后逐字节写入套接字

  • 最后,视频是如何传输的?我知道视频编码和传输需要整本书的详细解释,但如果你能谈谈视频传输的一般性(例如在youtube上),我将不胜感激


    如果您能在套接字级别就HTTP发表任何意见,我们将不胜感激。谢谢。

    我下面的所有答案都与HTTP/1.1有关,而不是与HTTP/2有关:

    3.-我的浏览器接收ASCII文件并对其进行解析。这里假设它找到一个图像标记。浏览器会发送该图像文件的HTTP请求。有件事我不明白。服务器如何响应?据我所知,服务器必须发回一个ASCII文件,该文件由一组头、一个CRLF和消息体组成。在这种情况下,假设我的浏览器要求使用.jpeg,服务器是否将标题作为ASCII明文写入套接字,然后将图像的原始字节写入套接字

    是的,通常是这样。它可能是以不同的格式编码的(gzip、brotli),或者如果未设置
    内容长度
    ,它可能被分块

    4.-如果HTML文件有多个图像,我们是否为每个图像(每个请求)打开一个套接字

    在HTTP/1中,现代浏览器将为每台主机打开多达6个套接字,但不会更多。如果发送到同一主机的请求超过6个,它将等待,直到收到其他响应

    5.-让我们假设我的浏览器现在找到一个javascript标记。当服务器响应我对该脚本的请求时,服务器是否将脚本源的ASCII字节写入套接字?js库会发生什么?服务器是否必须发送每个源代码的所有源代码

    通常是的,每个javascript文件需要1个http请求。有些服务器端工具将javascript源及其依赖项组合在一个javascript“文件”中。请注意,javascript源通常是UTF-8,而不是ASCII

    6.-关于向套接字写入数据:写入(2)是在套接字之间进行所有写入的正确方法吗

    不知道!不是C类的人

    7.-关于大文件的传输:如果我点击网站上的一个按钮,让我下载一个大的PDF文件,服务器是如何完成的?我假设服务器试图将其分块传输。就我所知,有一种分块编码的选择。这是路吗?如果是,文件是否划分为块,并将这些块附加到ASCII响应中,然后逐字节写入套接字

    否,
    chunked
    用于内容长度事先未知的HTTP响应。您所说的“拆分”是在IP/TCP级别上完成的,而不是在HTTP协议级别。从HTTP的角度来看,它只是一个连续的流

    最后,视频是如何传输的?我知道视频编码和传输需要整本书来详细解释,但如果你能谈谈视频传输的一般性(例如在youtube上),我将不胜感激


    太宽了,我回答不了。

    HTTP、套接字、流媒体和包传输是不同的主题

    HTTP是请求或发送dat的通信协议