学习笔记:网络技术Ch2.Web Architectures
(来源:notes of course Web Technology.Ch2.Web Architectures)

这一章主要讲一下Web的各个结构,先来看一个简单的Client-Server的网络结构。

发生了什么?
- 用户在地址栏输入了http://www.vub.ac.be
- Domain Name Service(DNS)将域名转化为IP address(134.184.129.2)
- 用户和服务器之间创建了一个TCP连接
- 在TCP连接中,用户发送了一个HTTP Request
- 用户在浏览器中看到服务器发送的HTTP Response
在这里出现了许多结构部分,Client、Server、DNS、IP address、TCP Connection、HTTP。
Server(服务器):
- 用于建立连接
- 接收和处理HTTP Request
- 拾取资源
- 制作发送HTTP Response
- 用户登录的操作
最常用的服务器:nginx、Apache HTTP Server
除此之后,其实有一些物件内置了服务器:打印机、wifi路由器
Uniform Resource Identifier(URI):
- 用于认证(identify)资源
- 有两种常见的URL和URN

HTTP Protocol(HTTP协议):
- 是一个你问我答的模型
- 必须先问(request),才能有回答(response)
- Stateless(connectionless)
- HTTPS是进化版,可以用于加密连接
HTTP的信息构成:
Start line,header field(CRLF),blank line,(message body)

接下来看一下HTTP Request和HTTP Response的start line的组成:


然后,HTTP无论request还是response,有一个相同的Header fields(general headers),然后是各自的request headers,response headers,entity headers,extension headers。
常用的Header:

比较特别的是:
If-Modified-Since:
大家都知道客户端浏览器是有缓存的,里面存放之前访问过的一些网页文件。
例如IE,会把缓存文件存到“C:\Documents and Settings\zh2000g\Local Settings\Temporary Internet Files”
这样类似的目录里。
其实缓存里存储的不只是网页文件,还有服务器发过来的该文件的最后服务器修改时间。If-Modified-Since是标准的HTTP请求头标签,在发送HTTP请求时,把浏览器端缓存页面的最后修改时间一起发到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行比较。如果时间一致,那么返回HTTP状态码304(不返回文件内容),客户端接到之后,就直接把本地缓存文件显示到浏览器中。如果时间不一致,就返回HTTP状态码200和新的文件内容,客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示到浏览器中。
以上大致介绍了一个简单的网络结构,下面可以对该结构进行一些构件的增加以增强某些特性:
Proxies(代理):

听名字大概就知道什么意思,是用户和服务器之间的中间人,在服务器端看,这家伙就是一个用户,而在用户端看来,这个家伙就是服务器。
- 可以用来检测两边都发了些啥消息(monitorring)
- 检测到了敏感消息,可以过滤(filtering)
- 当然,也可以用来掩盖用户端信息,用于匿名访问(anonymous browsing)
Caches(缓存):

算是一种特殊的proxy,他会和服务器沟通,把常用的网站保存下来,这样以后用户访问,就可以不走那么远的路去服务器。
HTTP协议中可以控制用不用caches:

还记得那个If-Modified-Since的Header吗?
在这里就有用了,本地缓存就是靠这个header返回的内容决定是否更新的!
Tunnel:

这个在高级信息网络里面有提到,建立在协议之上的协议,例如VPN:
实质上是对原来的东西加密,使得他不被下方的协议看到内容,也就是像有一个隧道一样。
Gateways(网关):

就是一个转发器,可以把数据从HTTP变成FTP,但无法改写。
前面提到,HTTP是一个stateless的协议,通常来说,是无法让两端建立会话的(session),但是劳动人民仍然想到了方法使得双方可以有state:
- 用IP地址来认人:但是IP地址通常底下有很多设备
- 用login–>HTTP authenticate header
- 每个人访问之后,重写URL:太麻烦。。
- cookies—好方法
Cookies:
可以理解为,每次user发送HTTP时,往里面加个礼物送给服务器,服务器见到礼物了,就认识这个人了。
