** 我们在浏览器地址栏, 输入了 www.sina.com.cn 后回车, 网页就显示出来了. 那具体它为什么会显示出来的? **
我们先来一个简单版的解答
输入网址, 回车后:
- 你的浏览器知道你要请求 www.sina.com.cn 这个网页
- 浏览器把你的这个请求, 按照约定的格式封装成一个数据包
- 浏览器把数据包通过网络发给了服务器.
- 服务器接收到了这个包, 七转八折告诉了服务器上运行的PHP程序
- PHP程序运行后, 再按照之前约定的格式封装成数据包, 通过网络给到了浏览器.
- 浏览器接收到这些数据, 解析出来, 网页就显示出来啦.
嗯, 再问几个问题?
我输入了一个网址, 浏览器如何知道发到哪个服务器去?
每一个域名, 都可以解析出来一个IP, 这个过程叫DNS解析.
在浏览器输入网址后, 其实浏览器先去DNS服务器问了这个域名的IP, 然后再发包. (IP就像门牌号, 可以定位到服务器)
BTW, 这时候如果查询到的 IP 出错了, 请求就发到别的服务器去啦. 想想看, 这种情况是不是很危险? 万一别的服务器回了一个依然可用的页面, 浏览网页的人不知道, 输入了用户名密码, 信息就会被盗取了.
怎么防止这种情况呢? 我们后面会专门抽出一个章节, 关于网络安全, 来讲这部分.
** 我们经常说 Web服务要开80端口, 是个什么东东? **
服务器理解成房子, 端口就可以理解成家里的门.
两台机器通信, 需要互相打开一扇门, 然后通过门来传递信息.
服务器上有防火墙, 可以关掉所有门. 如果你的服务器提供 Web服务, 就打开80这扇门. 打开后, 浏览器发送数据到你服务器的这扇门(80端口), 完成正常通信.
当然, 80不是一定的, 你也可以在服务器开启81, 82, 8080等端口来提供Web服务. 而这个时候你输入的网址就必须是 xxx.com:81 yyy:com:82 zzz.com:8080 才能正常访问.
如果开启的是80就不必加后面的[:端口]的部分啦, 当然加上也没问题. 对于浏览器而言 xxx.com:80 等于 xxx.com
聪明的菜菜同学有木有发现, 服务器开了一扇门: 80端口, 为了通信, 浏览器是不是也应该开门呢? 其实浏览器已经偷偷开了, 他本地开了一个1024-65534的随机端口来通信.
关于这部分的网络通信细节, 说来话长, 总之先有这样一个概念在就好啦.