浏览器和Web服务器之间的通信是如何进行的?

41

有谁能解释一下浏览器和 Web 服务器之间的通信是如何进行的吗?

  • GET,POST 动词(等等)
  • cookies(cookie)
  • sessions(会话)
  • query strings(查询字符串)

这些操作是如何在幕后工作的。


4
有整本教科书和大学课程专门讲授这个主题。如果你想要一个简明但深入的回答,恐怕你是在徒劳地寻找。 - Matthew Jones
1
如果你想得到一个具体的答案,你需要问一个具体的问题。老实说,对于你的问题来说,适当的答案是:“(可能是)通过TCP的http(s)”。 - William Pursell
什么答案被认为是非技术性的? - Amarghosh
8个回答

70

超文本传输协议(HTTP)是用于传输网页(比如你正在阅读的这个页面)的协议。协议其实就是一种标准做事的方式。如果你要见美国总统或某个国家的国王,你必须遵循特定的程序。你不能随便走上去说“嘿,酷哥”。走路、说话、打招呼和结束谈话都有特定方式。在TCP/IP协议栈中,协议的作用也是如此。

TCP/IP协议栈有四层:应用层、传输层、网络层和物理层。每一层都有不同的协议,用于规范信息的流动,并且每个协议都是计算机程序(运行在你的计算机上),在信息沿着TCP/IP协议栈向下移动时用于将信息格式化为一个数据包。数据包是应用层数据、传输层头部(TCP或UDP)和IP层头部(网络层接收数据包并将其转换成帧)的组合。

应用层

…包括所有使用网络传传输数据的应用程序。它并不关心数据在两个点之间的传输方式,也几乎不知道网络的状态。应用程序将数据传递到TCP/IP栈的下一层,然后继续执行其他函数,直到接收到回复。应用层使用主机名(比如www.dalantech.com)进行寻址。应用层协议的例子包括超文本传输协议(HTTP-网页浏览)、简单邮件传输协议(SMTP-电子邮件)、域名服务(DNS-将主机名解析为IP地址)等等。

应用层的主要目的是在运行在不同操作系统上的应用程序之间提供通用的命令语言和语法-有点像一个解释器。使用网络的应用程序发送的数据按照若干个设置的标准进行格式化。即使接收计算机与发送方运行的操作系统不同,由于所有网络应用程序都遵循的标准,接收计算机也能够理解正在发送的数据。

传输层

该系统负责为应用程序分配源和目标端口号。端口号由传输层用于寻址,范围从1到65,535。0到1023的端口号称为“知名端口”。256以下的数字保留用于在应用层运行的公共(标准)服务。以下是一些例子:SMTP使用25端口,DNS使用53端口(用于域名解析的udp和区域传输的tcp),HTTP使用80端口。从256到1023的端口号由IANA分配给公司出售的应用程序。

1024到65,535的端口号用于客户端应用程序 -例如您正在使用的浏览器来阅读本页面。Windows仅分配最多5000个端口号,对于基于Windows的PC来说这已经足够了。每个应用程序都有一个唯一的端口号,由传输层分配,因此当传输层接收到数据时,它知道要将数据提供给哪个应用程序。例如,当您运行多个浏览器窗口时。每个窗口是您用于浏览Web的程序的不同实例,每个实例都有一个不同的端口号分配给它,这样您可以在一个浏览器窗口中访问www.dalantech.com,在另一个浏览器窗口中则不会加载此网站。像使用选项卡窗口的FireFox等应用程序只是为每个标签分配唯一的端口号。

互联网层

将网络连接在一起的“粘合剂”。它允许数据的发送、接收和路由。

网络层

由您的网络接口卡(NIC)和与之连接的电缆组成。它是用于传输和接收数据的物理介质。网络层使用前面讨论过的媒体访问控制(MAC)地址进行寻址。MAC地址在接口制造时固定,无法更改。有一些例外,比如允许您克隆PC中NIC的MAC地址的DSL路由器。

欲了解更多信息:


65535 = 2 ^ 16 - 1 是最后一个端口。 - Second Person Shooter
1
很好的描述。不过你的层名称可能有问题。你所称之为网络层,在TCP/IP中被称为链路层(Data Link Layer和Physical Layer的组合,即OSI模型中的数据链路层)。这是软件(例如设备驱动程序)和硬件(例如网卡+电缆)的结合。而你所称之为互联网层通常被称为网络层,是TCP/IP中的IP部分。 - Andrew W. Phillips
"更多信息链接已失效。" - kleinfreund

18

您的浏览器首先通过DNS将servername解析为IP地址。然后它会打开一个到web服务器的TCP连接并尝试通过HTTP进行通信。通常情况下,这是在TCP端口80上进行的,但您可以指定不同的端口号 (http://server:portnumber)。

HTTP的形式如下:

一旦连接成功,它会发送请求,看起来像:

GET /site HTTP/1.0
Header1: bla
Header2: blub
{emptyline}
例如,头部可以是AuthorizationRange。点击这里了解更多信息。
然后服务器会以这种方式响应:
200 OK
Header3: foo
Header4: bar

content following here...
例如,标题可以是DateContent-Type。有关更多信息,请参见此处
请查看维基百科HTTP页面以获取有关该协议的更多信息。

1
这是我喜欢的答案。谢谢。我该如何阅读这些回复? - Edward
+1 你能解释一下header1、header2等是什么吗?我知道这是一个很老的帖子,但我还是想了解一下 :)。 - Vivek Sadh

16

每个问题方面的规格链接如下:

  • GET、POST动词(以及其他) - HTTP规范详尽地讨论了HTTP通信的所有方面(即Web服务器和浏览器之间的通信协议)。它解释了请求消息和响应消息的协议。

  • Cookie - 通过将Set-Cookie HTTP头部附加到HTTP响应中来设置。

  • 查询字符串 - 是HTTP请求URL中跟随第一次出现的“?”字符的那部分。链接的规范是URI规范的第3.4节。

  • 会话 - HTTP是同步、无状态协议。会话,或状态的幻觉,可以通过以下方式创建:(1)使用cookie将状态数据作为纯文本存储在客户端计算机上,(2)在请求的URL和查询字符串中传递数据值,(3)提交带有可能表示状态的值集合的POST请求,以及(4)通过服务器端持久性机制存储状态信息,并由会话键(会话键从cookie、URL/查询字符串或POST值集合中解析得出)检索。

对HTTP的解释可以持续数日,但我已经尝试提供简洁但概念上完整的答案,并包括进一步阅读官方规范的适当链接。


8
您的浏览器基于TCP/IP协议,因为Web是基于标准的,通常使用端口80,当您输入地址(例如google.com)时,运行浏览器的计算机会创建数据包,并根据OSI标准封装每个层的数据包(想象一下不同大小的信封,装在下一个大小的信封中),OSI定义了7层,在其中一个信封中包含源地址和目标地址(即网站)以二进制编码方式表示。
当它到达第一层时,在OSI术语中,它被传输到媒体发射器(例如电缆,DSL)。
如果您通过ISP连接,则分层的信封包被传输到ISP,ISP的网络系统通过反向解码逐层解析分层的信封包以查找地址,然后ISP检查其域名系统数据库以查找是否有到该地址的路由(如果有,则在内存中缓存),然后将其转发到Internet网络上 - 再次是分层的信封包。
如果没有,ISP会询问顶级DNS服务器以说“嘿,按照您提供的地址获取我的路线”,然后顶级DNS服务器将路线传递给ISP,然后存储在ISP的服务器内存中。
成功路由数据包后,网站服务器接收并发送分层的信封包(将其想象为指示方向到达服务器的路标),然后解包分层的信封包,提取源地址,并说“啊哈,这是给我的,我知道目标地址(也就是您,浏览器)”,然后服务器将网页打包成一组分层的信封并发送回去(通常是反向路线,但不总是这种情况)。
您的浏览器接收到分组的信封,并解包每个信封。然后您的计算机对数据进行解密,浏览器在屏幕上呈现页面。
希望这个答案对您有足够的理解。


4
这取决于Web服务器,但如果您想知道客户端的情况,只需在Firefox中安装Live HeadersFirebug。使用Firebug中的网络选项卡和打开的Live Headers,就可以清楚地了解两者之间的交互方式。
要更深入地查看实际来往数据,请使用wireshark

3

有一款商业产品,其标志很有趣,名为 charles,可以让您查看服务器和客户端之间的所有流量。

其他开源工具包括:Live HttpHeadersWireshark 或者 Firebug


2
浏览器和Web服务器之间的通信涉及许多层次,几乎不可能回答这个问题。HTTP发挥了作用,但是没有TCP就没有意义,没有IP就没有意义,没有物理网络就无法传送。此外,还有POST与GET请求的区别,虽然相似但足以引起特殊讨论。有时需要对HTTP请求进行验证,有时则不需要。应该提到Mime类型。如果存在代理,则浏览器会发送不同的请求。同时编码也扮演着一定角色。所以,我想,这种问题的最简明答案是:浏览器向服务器请求数据,服务器将请求的数据返回给浏览器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接