任何人都可以解释在浏览器和Web服务器之间进行通信的方式吗?我想学习如何
在幕后工作。
超文本传输协议(HTTP)是一种用于传输网页的协议(就像您现在正在阅读的那样)。协议实际上只是标准的做事方式。如果你要见到美国总统或一个国家的国王,那么你将需要遵循特定的程序。你不能只是走路说“嘿老兄”。将有一种特定的方式来走路,说话,标准问候以及结束对话的标准方式。 TCP / IP堆栈中的协议用于相同的目的。
TCP / IP堆栈有四层:应用程序,传输,Internet和网络。在每一层都有不同的协议用于标准化信息流,每个协议都是一个计算机程序(在您的计算机上运行),用于在信息向下移动到TCP / IP堆栈时将信息格式化为数据包。数据包是应用层数据,传输层报头(TCP或UDP)和IP层报头(网络层接收数据包并将其转换为帧)的组合。
...包含使用网络传输数据的所有应用程序。它并不关心数据如何在两点之间获得,而且它对网络状态知之甚少。应用程序将数据传递到TCP / IP堆栈中的下一层,然后继续执行其他功能,直到收到回复。应用层使用主机名(如www.dalantech.com)进行寻址。应用层协议的示例:超文本传输协议(HTTP -web浏览),简单邮件传输协议(SMTP-电子邮件),域名服务(DNS-将主机名解析为IP地址),仅举几例。
Application Layer的主要目的是在不同操作系统上运行的应用程序之间提供通用的命令语言和语法 - 类似于解释器。由使用网络的应用程序发送的数据被格式化为符合几个设置标准之一。由于所有网络应用程序遵循的标准,接收计算机可以理解正在发送的数据,即使它正在运行与发送方不同的操作系统。
...负责为应用程序分配源和目标端口号。传输层使用端口号进行寻址,范围从1到65,535。从0到1023的端口号称为“众所周知的端口”。低于256的数字保留用于在应用层运行的公共(标准)服务。以下是一些:SMTP为25,DNS为53(域解析为udp,区域传输为tcp),HTTP为80。 IANA为其销售的应用程序分配了256到1023的端口号。
1024到65,535之间的端口号用于客户端应用程序 - 例如,您用来阅读此页面的Web浏览器。 Windows只会为基于Windows的PC分配最多5000个端口号的端口号。每个应用程序都有一个由传输层分配给它的唯一端口号,以便当传输层接收数据时,它知道将数据提供给哪个应用程序。例如,当您运行多个浏览器窗口时。每个窗口都是您用于浏览网页的程序的单独实例,每个窗口都分配了一个不同的端口号,因此您可以在一个浏览器窗口中访问www.dalantech.com,此网站不会加载到另一个窗口中浏览器窗口。使用选项卡式窗口的FireFox等应用程序只需为每个选项卡分配一个唯一的端口号
......是将网络结合在一起的“胶水”。它允许发送,接收和路由数据。
...由您的网络接口卡(NIC)和连接到它的电缆组成。它是用于传输和接收数据的物理介质。网络层使用前面讨论的媒体访问控制(MAC)地址进行寻址。 MAC地址在制造接口时是固定的,不能更改。有一些例外,例如DSL路由器允许您克隆PC中NIC的MAC地址。
欲了解更多信息:
您的浏览器首先通过DNS将服务器名解析为IP。然后它打开与Web服务器的TCP连接,并尝试通过HTTP进行通信。通常是在TCP端口80上,但您可以指定另一个(http://server:portnumber
)。
HTTP看起来像这样:
连接后,它会发送请求,如下所示:
GET /site HTTP/1.0
Header1: bla
Header2: blub
{emptyline}
例如,标题可能是Authorization
或Range
。有关更多信息,请参阅here。
然后服务器响应如下:
200 OK
Header3: foo
Header4: bar
content following here...
例如,标题可能是Date
或Content-Type
。有关更多信息,请参阅here。
请查看Wikipedia for HTTP以获取有关此协议的更多信息。
问题各方面的规格链接如下:
Set-Cookie
HTTP标头附加到HTTP响应来设置。对HTTP的解释可以持续数天,但我试图提供简明但概念上完整的答案,并包括适当的链接以进一步阅读官方规范。
您的浏览器位于TCP / IP之上,因为Web基于标准,通常是端口80,当您输入地址时会发生什么,例如google.com,运行浏览器的计算机,创建的数据包根据OSI标准封装在每一层的数据(考虑到不同大小的包络,打包到下一个大小的每个包络中),OSI定义了7层,其中一个包含源地址和目的地址(即网站)以二进制编码。
当它到达第一层时,在OSI术语中,它通过媒体发射器(例如电缆,DSL)传输。
如果你通过ISP连接,分层信封包被传送到ISP,ISP的网络系统,通过相反的顺序解码透过分层信封包查找地址,然后ISP检查他们的域名系统数据库找出他们是否有到该地址的路径(缓存在内存中,如果有,它会通过互联网网络转发 - 再次分层包装信封)。
如果没有,ISP会询问顶级DNS服务器说'嘿,告诉我你提供的地址路由,即。然后,顶级DNS服务器将路由传递给ISP,然后将其存储在ISP的服务器内存中。
在成功路由数据包之后,网站服务器发送和接收分层包装信封(将路由视为到达服务器的路线的路标),这反过来解开分层信封包,提取源地址和说'啊哈,这对我来说,对,我知道目的地地址(就是你,浏览器),然后服务器将网页打包成一个打包的分层信封并发回(通常是反向路线,但并不总是案件)。
您的浏览器不会收到打包的信封并解压缩每个信封。然后,您的计算机会对数据进行解扰,您的浏览器会在屏幕上显示这些页面。
我希望这个答案足以让你理解。
这取决于Web服务器,但如果你想知道它从客户端看起来是什么样的,只需为firefox安装Live Headers和Firebug。随着firebug中的网络标签和实时标题打开,应该清楚两者如何相互作用。
要更深入地查看来回的实际数据,请使用wireshark。
有一个带有趣徽标的商业产品,可以让您看到服务器和客户端之间的所有流量,名为charles。
另一个开源工具包括:Live HttpHeaders,Wireshark或Firebug。
浏览器和网络服务器之间的通信发生在很多层面,几乎无法回答这个问题。 HTTP发挥作用,但没有TCP,HTTP就没有意义,没有IP就毫无意义,没有它发送的物理网络就毫无意义。然后,有POST和GET请求相似但足够不同以保证特殊的讨论。有时,HTTP请求需要进行身份验证,有时需要进行身份验证。应该提到哑剧类型。然后,如果有代理,浏览器会发送不同的请求。然后编码也起作用。所以,我想,对这类问题最简洁的答案是:浏览器向服务器询问数据,服务器将所请求的数据提供给浏览器。