一、B/S架构
客户端使用统一的浏览器,简化了前端和后端的开发难度。底层都是基于HTTP协议,常见的Http服务器有Apache,IIS,Tomcat,JBoss等。
二、关于HTTP请求
- 如何发起一个HTTP请求?
和建立Socket连接一样,OutputStream.wirte写的二进制字节流肯定要符合HTTP格式规范,通常用户输入一个URL就好,经过一系列复杂的过程,服务器把相应的资源通过InputStream.read返回数据给客户端。
2.HTTP Header
常见的请求头
请求头 | 说明 |
Accept-Charset | 指定客户端接受的字符集 |
Accpet-Encoding | 指定内容接受的编码 |
Accept-Language | 指定一种自然语言如zh-cn |
Host | 指定请求资源的Internet主机和端口号 |
User-Agent | 将操作系统浏览器其他信息告知服务器 |
Connection | 当前连接是否保持 |
常见的相应头
相应头 | 说明 |
Server | 使用的服务器名称 |
Content-Type | 用来指定发给接受者实体正文的媒体类型 |
Content-Encoding | 告诉服务端采用那种压缩编码 |
Content-Language | 请求资源所用的语言 |
Content-Length | 实体正文的长度 |
Keep-Alive | 保持连接的时间 |
常见的Http状态码200请求成功,302临时跳转,400客户端请求语法错误,403服务器收到请求但拒绝提供服务,404请求的资源不存在,500服务器异常 .
三.DNS域名解析
- 当浏览器输入一个网址的时候,首先浏览器会检查自身缓存中有没有这个域名对应的Ip,如果缓存中有,解析过程结束,当然这个缓存是有大小和时间限制的,TTL设置太短作用不太大,因为每次都要重新解析,太长会导致服务器那边域名IP映射发生变化用户访问不了网站.
- 浏览器缓存中没有,浏览器会看当前操作系统中有没有改域名对应的DNS解析缓存,命中过程结束
- LDNS,也就是本地区的域名服务器,可以通过Ipconfig命令来查看
- 会连接到Root Server域名服务器请求解析
- 根域名服务器会返回给本地域名服务器一个所查询的主域名服务器(如gTLD)
- LDNS 向上一个返回的gTLD服务器发送请求
- 接受请求的gTLD服务器查找相应的Name Server域名服务器的地址,通常是向某个域名提供商申请的域名,接着解析任务就交给了域名提供商的服务器
- 会寻找域名IP映射,正常情况下都会找到目标Ip带上一个TTL值返回给DNS Server域名服务器
- 返回域名和对应的IP,TTL;LDNS 会进行缓存,
- 解析结果返回给用户,用户根据TTL缓存到本地系统,至此解析过程结束.