深入Web请求过程

1、浅谈HTTP协议

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;

}

 

1、     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

服务器发生错误

 

 

2、     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.1、跟踪域名解析过程

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

 

2.2、清除缓存域名

         在Windows下可以执行ipconfig/flushdns命令刷新缓存。

 

         如果我们需要用InetAddress解析域名。必须是单利模式,否则会有严重的性能问题,如果每次都创建Inetaddess,则每次都要进行一次完整的DNS解析,非常耗时。

2.3、几种域名解析方式

         域名解析记录主要分为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记录,为某个主机名或者域名设置说明。

3、     CND工作机制

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

通常来说CDN要达到以下几个目标

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

3.1、负载均衡

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

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

posted @ 2015-05-25 16:39  小宝陛下  阅读(178)  评论(0)    收藏  举报