美文网首页
第一章 深入Web请求过程

第一章 深入Web请求过程

作者: 01_小小鱼_01 | 来源:发表于2018-03-16 23:24 被阅读33次

随着Web 2.0的来临,互联网架构已经从传统的C/S架构转变为B/S(浏览器/服务器)架构。

从用户在浏览器输入www.taobao.com这个URL开始会经历那些过程的呢

  • DNS域名服务器会将其转换成IP地址。
  • 用户端根据IP地址向服务器发起请求。
  • 服务器端可能会有负载均衡设备来平均分配所有的用户请求。在请求到达服务器后,会经过一些复杂的业务逻辑来处理用户请求。请求的数据可能在三个地方:分布式缓存系统,文件系统或者数据库中。从其中取出数据返回给浏览器。
  • 数据返回后,浏览器解析数据发现还有一些静态的资源(CSS,JS或者图片),然后再次发起请求。这些静态资源很有可能是在CDN上,如果在的话CDN服务器会再次处理用户的请求。
  • 最终在浏览器端看到完整的网页。

如何发起请求
Linux命令

bogon:~ yudesong$ curl "http://item.taobao.com/item.htm?id=1264" > /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   278  100   278    0     0   1976      0 --:--:-- --:--:-- --:--:--  1985

bogon:~ yudesong$ curl "https://detail.tmall.com/item.htm?id=35057524460&spm=a21bz.7725275.1998564545.1.5e2b551dwiAuE0&umpChannel=qianggou&u_channel=qianggou" -I
HTTP/1.1 302 Found
Server: Tengine
Date: Fri, 16 Mar 2018 14:59:14 GMT
Content-Type: text/html
Content-Length: 258
Connection: keep-alive
at_bucketid: sbucket_-1
X-Bucket-Id: -1
Location: https://login.taobao.com/jump?target=https%3a%2f%2fdetail.tmall.com%2fitem.htm%3fid%3d35057524460%26spm%3da21bz.7725275.1998564545.1.5e2b551dwiAuE0%26umpChannel%3dqianggou%26u_channel%3dqianggou%26tbpm%3d1
Via: cache3.cn19[,0]
Timing-Allow-Origin: *
EagleId: 7c5f9dcb15212123547974875e
Cache-Control: 

Java代码示例

public class GetSample{
  public static void main(String[] args) {
  //构造HttpClient的实例
  HttpClient httpClient = new HttpClient();
  //创建GET方法的实例
  GetMethod getMethod = new GetMethod("http://www.ibm.com");
  //使用系统提供的默认的恢复策略
  getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
    new DefaultHttpMethodRetryHandler());
  try {
   //执行getMethod
   int statusCode = httpClient.executeMethod(getMethod);
   if (statusCode != HttpStatus.SC_OK) {
    System.err.println("Method failed: "
      + getMethod.getStatusLine());
   }
   //读取内容 
   byte[] responseBody = getMethod.getResponseBody();
   //处理内容
   System.out.println(new String(responseBody));
  } catch (HttpException e) {
   //发生致命的异常,可能是协议不对或者返回的内容有问题
   System.out.println("Please check your provided http address!");
   e.printStackTrace();
  } catch (IOException e) {
   //发生网络异常
   e.printStackTrace();
  } finally {
   //释放连接
   getMethod.releaseConnection();
  }
 }
}

HTTP解析
HTTP请求头

Accept-Charset    用于指定客户端接受的字符集
Accept-Encoding   可接受的内容编码
Accept-Language   自然语言 比如zh-cn
Host              指定被请求资源的Internet主机和端口号
User-Agent        客户端将它的操作系统、浏览器和其他属性告诉服务器
Connection        当前连接是否保持。

HTTP响应头:

Server            使用的服务器名称
Content-type      指明发送给接受者的实体正文的媒体类型,如Content_Type:text/html;charset = GBK
Content-Encoding: 告诉浏览器服务端采用的压缩编码
Content-Language: 描述了资源所用的自然语言
Content-Length  : 指明实体正文的长度
Keep-Alive      : 保持连接的时间

常见的状态码

404 请求资源不存在
200 客户端请求成功
400 客户端请求有语法错误
500 服务端发生不可预期的错误

浏览器的缓存设置
在浏览器端Ctrl+F5可以重新发起请求而不使用缓存数据。发出报文的请求头里面相关字段告诉服务器,不要缓存要最新的数据。
这两个字段是:Pragma:no-cache Cache-Control:no-cache

DNS域名解析过程

  • 用户输入URL,浏览器检查自身有没有缓存该域名的IP地址。
  • 如果没有,浏览器检查操作系统缓存中是否有这个DNS解析结果。
  • 如果缓存中还没有,则操作系统会把这个域名发送给LDNS(Local DNS)即本地域名服务器。
  • 如果LDNS中还没有,则只能去Root Server域名服务器中请求解析了。这样的情况比较罕见,因为全球只有13台左右这样的服务器。
  • 根域名服务器会返回一个本地域名服务器所查域的主域名服务器(gTLD Server)地址。
  • LDNS向gTLD发送请求。
  • gTLD接受此请求,返回一个此域名对应的Name Server域名服务器的地址。这个Name Server通常就是你注册的域名服务器。
  • Name Server返回该域名对应的IP和TTL值,然后Local DNS Server会缓存这个对应关系,缓存时间由TTL控制。
  • 解析结果返回用户。用户根据TTL值缓存此对应关系。

跟踪域名解析过程

[bogon:~ yudesong$ nslookup
> www.taobao.com
Server:     192.168.188.1
Address:    192.168.188.1#53

Non-authoritative answer:
www.taobao.com  canonical name = www.taobao.com.danuoyi.tbcache.com.
Name:   www.taobao.com.danuoyi.tbcache.com
Address: 157.255.139.123
Name:   www.taobao.com.danuoyi.tbcache.com
Address: 163.177.20.223

bogon:~ yudesong$ dig www.baidu.com +trace

; <<>> DiG 9.8.3-P1 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13933
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.baidu.com.         IN  A

;; ANSWER SECTION:
www.baidu.com.      509 IN  CNAME   www.a.shifen.com.
www.a.shifen.com.   182 IN  A   163.177.151.110
www.a.shifen.com.   182 IN  A   163.177.151.109

;; Query time: 10 msec
;; SERVER: 192.168.188.1#53(192.168.188.1)
;; WHEN: Fri Mar 16 23:10:30 2018
;; MSG SIZE  rcvd: 90

清除域名信息

Windows: ipconfig /flushdns
Linux:   /etc/init.d/nscd restart

几种域名的解析方式
域名解析记录主要分为:A 记录、MX记录、CNAME 记录、NS记录和 TXT记录

  • A记录:A 代表的是Address,用来指定域名对应的IP地址。域名可以多对一但是不能一对多。
  • MX记录:Mail Exchange,就是讲某个域名下的邮件服务器指向自己的Mail Server。
  • CNAME记录:别名解析。将一个域名设置一个或者多个别名。
  • NS记录:为某个域名指定DNS解析服务器。
  • TXT记录:为某个主机名或者域名设置文字说明

CDN
内容分发网络CDN

负载均衡
关于负载均衡的一切:总结与思考
负载均衡算法及手段
负载均衡集合
更多内容
1. 关于java dns cache (域名缓存时间)

相关文章

  • 深入Web请求过程

    很多事情看起来都很简单,但是却从来没去剖析背后的本质,没有去深入的了解。导致我们在生活中或者工作上总是会被同样的问...

  • 深入 Web 请求过程

    B/S 架构的好处 客户端使用同一的浏览器。浏览器具有统一性,不需要特殊的配置和网络连接,屏蔽了服务的差异性。 浏...

  • 深入分析JAVA_WEB技术内幕

    第一章 深入WEB请求过程 1.1 B/S网络架构概述 1.2 如何发起一个请求 1.3 HTTP解析 常见的HT...

  • Java Web

    ref: 深入分析Java Web技术内幕 总结:Spring事务配置 Ch 1 深入Web请求过程 CDNCon...

  • (一)深入web请求过程

    随着Web2.0时代的到来,互联网的网络架构已从传统的C/S架构转变为更加方便快捷的B/S架构。这种转变不是没有原...

  • 第一章 深入Web请求过程

    随着Web 2.0的来临,互联网架构已经从传统的C/S架构转变为B/S(浏览器/服务器)架构。 从用户在浏览器输入...

  • 《深入分析Java Web》

    第一章 深入Web请求过程 用户在浏览器输入一个网址,整个过程是URL通过DNS域名解析成IP地址,然后向这个IP...

  • 深入Web请求

    从C/S发展到B/S的好处 1.客户端使用统一的浏览器(Browser)。2.服务端(Server)基于统一的HT...

  • Web请求过程

    B/S网络架构 HTTP B/S架构的核心是HTTP协议 DNS域名解析 CDN架构 CDN动态加...

  • WEB请求过程

    一、一个例子 当用户在浏览器中输入www.xxx.com这个URL时,首先,DNS会把这个域名解析成IP地址,然后...

网友评论

      本文标题:第一章 深入Web请求过程

      本文链接:https://www.haomeiwen.com/subject/tcqdqftx.html