深刻Web请求过程

一、浅谈HTTP协议html

B/S构架都是经过HTTP协议的方式来交换数据的。而其中HTTP链接本质是创建一个SOCKET链接。例如经过UrlConnction模拟一个HttpClinet链接。浏览器

public static InputStream getHTMLString(String urlString)缓存

                 throws IOException {安全

           // String urlString = "http://www.acfun.tv";服务器

           InputStream stream = null;网络

           try {负载均衡

                 URL realUrl = new URL(urlString);框架

                 // 创建链接性能

                 URLConnection connection = realUrl.openConnection();网站

                 // 填写头信息

                 connection.setRequestProperty("accept", "*/*");

                 connection.setRequestProperty("connection", "Keep-Alive");

                 connection.setRequestProperty("user-agent",

                            "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

                 connection.connect();

                 stream = connection.getInputStream();

           } catch (Exception e) {

                 System.out.println(e.getMessage());

                 // TODO: handle exception

           } finally {

                 try {

                 } catch (Exception e2) {

                      System.out.println(e2.getMessage());

                      // TODO: handle exception

                 }

           }

           return stream;

}

 

一、     HTTP解析

 

请求头

说明

Accept-Charset

用于指定客户端接收的字符集

Accept-Encoding

用于指定可接受的内容编码,如:Accept-Encoding:gzip.deflate

Accept-Language

用于指定一种天然语言,如:Accept-Language:zh-cn

Host

用于指定被请求资源的Internet主机和端口号,如:www.acfun.tv

User-Agent

客户端类型 如火狐浏览器、手机等

Connection

当前链接是否保持,如:Connection:Keep-Alive

 

 响应头

说明

Server

使用服务器名称,如Server:Apache/1.3.6(Unix)

Content-Type

用来讲明发送给接收者的实体正文的媒体类型,如Conntent-Type:text/html;charest=GBK

Content-Encoding

与请求报文头Accept-Encoding对应

Content-Language

描述了资源所使用的天然语言,与Accept-Language对应

Content-Length

指明实体正文的长度,用字节方式存储的十进制数字表示

Keep-Alive

保持链接时间,如:Keep-Alive:timeout=5,max=120

 

状态码

说明

200

客户端请求成功

302

跳转

400

客户端请求有语法错误,不能被服务器识别

404

请求资源不存在

500

服务器发生错误

 

 

二、     DNS域名解析

当一个用户在浏览器输入一个请求时,DNS解析将会有将近10个步骤,这个过程大致以下:

第一步、浏览器会检查缓存中有没有这个域名对应的IP地址,若是缓存中有,这个解析过程会结束。

第二步、若是用户的浏览器缓存中没有,浏览器会查找操做系统中是否有这个域名对应的DNS解析结果。

第三步、LDNS,也就是咱们平时设置的域名服务器(网络配置->DNS服务器地址)。若是你是在一个小区接入的互联网。那这个DNS就是提供接入互联网的供应商。如联通、电信。

第四步、若是LDNS仍然没有命中,就直接到Root Server域名服务器请求解析。

第五步、根域名服务器返回给本地域名服务器一个所查询域的主域名服务器(gTLD Servver)地址。gTLD是国际顶级域名,如:.com、.cn等。

第六步、本地域名服务器再向上一步返回gTLD服务器发送请求。

第七步、接受请求的gLTD服务器查找并返回此域名对应的Name Server域名服务器的地址,这个Name Server一般就是你注册的域名服务器。

第八步、Name Server域名服务器会查询存储域名和IP的映射关系表,在正常状况下都根据域名获得目标IP记录,连同一个TTL值返回给DNS Server域名服务器。

第九步、返回该域名对应的IP和TTL值,本地DNS会缓存这个域名和IP的对应关系,缓存时间有TTL值控制。

第十步、把解析结果返回给用户、用户根据TTL值缓存在本地系统缓存中,域名解析结束。

2.一、跟踪域名解析过程

         在Linux和Windows下均可以用nslookup命令来查询域名的解析结果。

 

2.二、清除缓存域名

         在Windows下能够执行ipconfig/flushdns命令刷新缓存。

 

         若是咱们须要用InetAddress解析域名。必须是单利模式,不然会有严重的性能问题,若是每次都建立Inetaddess,则每次都要进行一次完整的DNS解析,很是耗时。

2.三、几种域名解析方式

         域名解析记录主要分为A记录、MX记录、CNAME记录、NS记录和TXT记录。

         A记录,A表明的Address,A记录能够将多个域名解析到一个IP地址,但不能将一个域名解析到多个IP地址。

         MX记录,表示的是Mail Exchange,就是能够将某个域名下的邮件服务器指向本身的Mail Server,如taobao.com域名的A记录IP地址是115.14.24.xxx,若是将MX记录设置为115.238.25.xxx DNS会将邮件发送到115.238.25.xxx所在的服务器。而正常的请求仍然会解析到A记录的IP地址上。

CNAME记录,Canonical Name(别名解析)别名解析能够为一个域名设置多个别名。

NS记录,为某个域名指定DNS解析服务器也就是这个域名有指定IP地址的DNS服务器去解析。

TXT记录,为某个主机名或者域名设置说明。

三、     CND工做机制

CND也就是内容分布网络,目前CDN都是以缓存网站中的静态数据为主的,如CSS、JS图片和静态页面数据等。

一般来讲CDN要达到如下几个目标

可扩展、安全性、可靠性。

3.一、负载均衡

         负载均衡就是对工做任务进行平衡、分摊到多个操做单元上执行,如图片服务器、应用服务器,共同完成工做仍无。它能够提升服务器响应速度及利用效率

         一般有三种负债均衡框架,分别是链路负载均衡、集成负载均衡和操做系统负载均衡。

相关文章
相关标签/搜索