任何人都可以解释一下浏览器和Web服务器之间的通信方式吗? 我想学习如何
在幕后工作。
答案 0 :(得分:68)
超文本传输协议(HTTP)是一种用于传输网页的协议(就像您现在正在阅读的那样)。协议实际上只是标准的做事方式。如果你要见到美国总统或一个国家的国王,那么你将需要遵循特定的程序。你不能只是走路说“嘿老兄”。将有一种特定的方式来走路,说话,标准问候以及结束对话的标准方式。 TCP / IP堆栈中的协议具有相同的用途。
TCP / IP堆栈有四层:应用程序,传输,Internet和网络。在每一层都有不同的协议,用于标准化信息流,每一个都是一个计算机程序(在您的计算机上运行),用于在信息向下移动到TCP / IP堆栈时将信息格式化为数据包。数据包是应用层数据,传输层报头(TCP或UDP)和IP层报头的组合(网络层接收数据包并将其转换为帧)。
...包含使用网络传输数据的所有应用程序。它并不关心数据如何在两点之间获得,而且它对网络状态知之甚少。应用程序将数据传递到TCP / IP堆栈中的下一层,然后继续执行其他功能,直到收到回复。应用层使用主机名(如www.dalantech.com)进行寻址。应用层协议的示例:超文本传输协议(HTTP -web浏览),简单邮件传输协议(SMTP-电子邮件),域名服务(DNS-将主机名解析为IP地址),仅举几例。
应用层的主要目的是在不同操作系统上运行的应用程序之间提供通用的命令语言和语法 - 类似于解释器。由使用网络的应用程序发送的数据被格式化为符合几个设置标准之一。由于所有网络应用程序遵循的标准,接收计算机可以理解正在发送的数据,即使它正在运行与发送方不同的操作系统。
...负责为应用程序分配源和目标端口号。传输层使用端口号进行寻址,范围从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地址。
欲了解更多信息:
答案 1 :(得分:18)
您的浏览器首先通过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以获取有关此协议的更多信息。
答案 2 :(得分:16)
问题每个方面的规格链接如下:
GET, POST verbs (among others) - HTTP规范详尽地讨论了HTTP通信的所有方面(Web服务器和浏览器之间的通信协议)。它解释了请求消息和响应消息协议。
Cookies - 通过将Set-Cookie
HTTP标头附加到HTTP响应来设置。
QueryStrings - 是第一次出现“?”后HTTP请求中网址的一部分字符。链接规范适用于URI规范的第3.4节。
会话 - HTTP是一种同步的无状态协议。可以通过以下方式创建会话或状态幻觉:(1)使用cookie将状态数据作为纯文本存储在客户端的计算机上,(2)传递URL中的数据值和请求的查询字符串,(3)提交POST具有可以指示状态的值的集合的请求,以及(4)通过由会话密钥检索的服务器端持久性机制来存储状态信息(会话密钥是从cookie,URL / Querystring或POST值中解析的)集合。
对HTTP的解释可以持续数天,但我试图提供一个简明但概念上完整的答案,并包含适当的链接以进一步阅读官方规范。
答案 3 :(得分:8)
您的浏览器位于TCP / IP之上,因为网络基于标准,通常是端口80,当您输入地址时会发生什么,例如google.com,运行浏览器的计算机,创建数据包,根据OSI标准封装在每一层,(考虑不同大小的包络,打包到下一个大小的每个包络),OSI定义7层,其中一个包含源地址和目的地址(这是以二进制编码的网站。
当它到达第一层时,在OSI术语中,它通过媒体发送器(例如电缆,DSL)传输。
如果您通过ISP连接,分层信封包将被传送到ISP(ISP的网络系统),通过以相反顺序解码来查看分层信封包,找出地址,然后ISP检查其域命名系统数据库,以查明他们是否有到该地址的路由(缓存在内存中,如果有,则将其转发到互联网网络 - 再次分层包装信封)。
如果没有,ISP会询问顶级DNS服务器说'嘿,告诉我你提供的地址路由,即。然后,顶级DNS服务器将路由传递给ISP,然后将其存储在ISP的服务器内存中。
在成功路由数据包之后,网站服务器会发送和接收分层包装信封(将路由视为到达服务器的路线的路标),然后拆开分层信封包,提取信封。源地址并说'啊哈,这对我来说,对,我知道目的地址(就是你,浏览器),然后服务器将网页打包成一个打包的分层信封并发回(通常是反向路线,但是并非总是如此)。
您的浏览器不会收到打包的信封并打开每个信封。然后,您的计算机会对数据进行解扰,您的浏览器会在屏幕上显示这些页面。
我希望这个答案足以让你理解。
答案 4 :(得分:7)
答案 5 :(得分:4)
这取决于网络服务器,但如果你想知道它从客户端看起来是什么样子,只需为firefox安装Live Headers和Firebug。随着firebug中的网络标签和实时标题打开,应该清楚两者如何相互作用。
要更深入地查看来回的实际数据,请使用wireshark。
答案 6 :(得分:3)
有一个带有趣徽标的商业产品,可让您查看名为charles的服务器和客户端之间的所有流量。
其他开源工具包括:Live HttpHeaders,Wireshark或Firebug。
答案 7 :(得分:2)
浏览器和网络服务器之间的通信发生在很多层面,几乎无法回答这个问题。 HTTP发挥作用,但没有TCP,HTTP就没有意义,没有IP就毫无意义,没有它发送的物理网络就毫无意义。然后,有POST和GET请求相似但足够不同以保证特殊的讨论。有时,HTTP请求需要进行身份验证,有时需要进行身份验证。应该提到哑剧类型。然后,如果有代理,浏览器会发送不同的请求。然后编码也起作用。所以,我想,对这类问题最简洁的答案是:浏览器向服务器询问数据,服务器将所请求的数据提供给浏览器。