B/S架构:
客户端使用统一的Browser(浏览器): 由于浏览器具有统一性,它不需要特殊的配置和网络连接,有效的屏蔽了不同服务提供商提供给客户使用服务的差异性。
服务端(Server)基于统一的HTTP: 为服务提供商简化了开发模式,使得服务器开发者可以使用相对规范的开发模式,大大节约成本
架构概述:
HTTP采用无状态的短链接通信方式,通常情况下,一次请求就完成了一次数据交互,通常也对应一个业务逻辑,然后这次通信就断开了;这能使服务器同时服务更多的客户。 但是也由于是无状态的连协议,当用户的一次访问请求结束后,后端服务器就无法知道下一次来访问的是不是上次访问的用户,这也是Session和Coockie的主要作用,保持访问用户与后端服务器的交互状态。
当一个用户在浏览器输入一个URL发送一个请求时,首先浏览器会请求DNS(域名服务器)把这个域名转换成对应的IP地址,然后根据这个IP地址在互联网上找到对应的服务器,向这个服务器发送一个get请求,再由服务器返回默认的资源给访问的用户。
流程图如下:
发送请求过程:
其实,发起一次HTTP连接的过程就是建立一个Socket通信的过程。
- 根据浏览器地址栏里输入的URL的域名DNS解析出服务器IP地址
- 再根据这个IP地址和默认的80端口与远程服务器建立Socket连接
- 然后浏览器根据这个URL组装成一个get类型的HTTP请求头然后浏览器根据这个URL组装成一个get类型的HTTP请求头
- 通过outputStream.write发送到目标服务器
- 服务器等待inputStream.read返回数据
- 最后断开连接
HTTP请求头:
HTTP请求头控制着用户浏览器的渲染行为和服务器的执行逻辑。
通常做项目经常遇到问题就是项目中某些地方图片做了更改但是浏览器上打开运行时没有刷新,这是因为浏览器有缓存机制,我们发送请求服务端可能访问到的是缓存的数据,而这时会使用Ctrl+F5组合键刷新页面,这个功能是让浏览器直接向目标URL发送请求,而不会使用浏览器缓存的数据。
这个组合键的实质是在在HTTP的请求头中加入了两个请求头:Pragma:no-cache和Cache-Control:no-cache,它告诉服务器我们要获取最新的数据而不是使用缓存。