有谁能解释一下浏览器和 Web 服务器之间的通信是如何进行的吗?
- GET,POST 动词(等等)
- cookies(cookie)
- sessions(会话)
- query strings(查询字符串)
这些操作是如何在幕后工作的。
有谁能解释一下浏览器和 Web 服务器之间的通信是如何进行的吗?
这些操作是如何在幕后工作的。
超文本传输协议(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路由器。
欲了解更多信息:
您的浏览器首先通过DNS将servername解析为IP地址。然后它会打开一个到web服务器的TCP连接并尝试通过HTTP进行通信。通常情况下,这是在TCP端口80上进行的,但您可以指定不同的端口号 (http://server:portnumber
)。
HTTP的形式如下:
一旦连接成功,它会发送请求,看起来像:
GET /site HTTP/1.0
Header1: bla
Header2: blub
{emptyline}
例如,头部可以是Authorization
或Range
。点击这里了解更多信息。200 OK
Header3: foo
Header4: bar
content following here...
例如,标题可以是Date
或Content-Type
。有关更多信息,请参见此处。每个问题方面的规格链接如下:
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的解释可以持续数日,但我已经尝试提供简洁但概念上完整的答案,并包括进一步阅读官方规范的适当链接。
有一款商业产品,其标志很有趣,名为 charles,可以让您查看服务器和客户端之间的所有流量。
其他开源工具包括:Live HttpHeaders、Wireshark 或者 Firebug。