深入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、负载均衡
负载均衡就是对工作任务进行平衡、分摊到多个操作单元上执行,如图片服务器、应用服务器,共同完成工作仍无。它可以提高服务器响应速度及利用效率
通常有三种负债均衡框架,分别是链路负载均衡、集成负载均衡和操作系统负载均衡。
浙公网安备 33010602011771号