美文网首页web前端JAVA笔记
【笔记】深入分析JavaWeb技术内幕-(一)Web请求过程与架

【笔记】深入分析JavaWeb技术内幕-(一)Web请求过程与架

作者: 程序员Anthony | 来源:发表于2017-10-26 15:02 被阅读125次

    最近在看许令波的《深入分析JavaWeb技术内幕》。整理了一下学习笔记。

    BS网络架构概述

    优点:
    • 1.客户端使用统一(此处的统一主要指实现原理统一)的浏览器,不需要特殊的网络配置。

    • 2.服务端基于统一的HTTP协议。基于此协议的服务器有很多,如Apache,IIS,Tomcat,Nginx,JBoss等。

    请求发生的完整过程:

    HTTP最大的特点就是无状态的短连接的通信方式,通常情况下一次请求就完成了一次数据交互,通常也对应一次业务逻辑。然后这次通信就断开了。

    采用这种方式是为了能够同时服务更多的用户,防止由于一个用户独占连接而造成阻塞的现象。

    下面主要介绍用户在浏览器输入网址之后发生的整个完整过程。

    • 1.用户输入URL,也就是网址。如www.google.com

    • 2.DNS域名服务器会将其转换成IP地址。

    • 3.用户端根据IP地址向服务器发起请求。

    • 4.服务器端可能会有负载均衡设备来平均分配所有的用户请求。在请求到达服务器后,会经过一些复杂的业务逻辑来处理用户请求。请求的数据可能在三个地方:
      分布式缓存系统,文件系统或者数据库中。从其中取出数据返回给浏览器。

    • 5.数据返回后,浏览器解析数据发现还有一些静态的资源(CSS,JS或者图片),然后再次发起请求。这些静态资源很有可能是在CDN上,如果在的话CDN服务器会再次处理用户的请求。

    • 6.最终在浏览器端看到完整的网页。

    以上就是大致的请求数据的过程。

    三个原则

    不管架构如何变化,有三个原则是始终不变的:

    • 1)互联网上的所有资源都要用一个URL表示。

    • 2)必须基于HTTP与服务端交互。

    • 3)数据展示必须在浏览器中进行。

    如何发起一个请求

    发起请求实质上就是建立一个Socket连接,但是这是一个特殊的Socket连接。

    端口号:80

    所以完全可以自己模拟浏览器发起一个HTTP请求。专门有个处理HTTP请求的开源工具包,叫HttpClient。

    在linux中通过curl+URL可以简单地发起一个HTTP请求。如:curl "www.google.com"

    Http解析

    HTTP请求的最重要的部分就是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 : 保持连接的时间

    通过FireFox查看请求头和响应头 通过Fiddler查看安卓手机的http数据请求
    常见的状态码:

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

    浏览器的缓存设置

    在浏览器端Ctrl+F5(command+shift+R)可以重新发起请求而不使用缓存数据。

    • 1 发出报文的请求头里面相关字段告诉服务器,不要缓存要最新的数据。这两个字段是:
      Pragma:no-cache
      Cache-Control:no-cache

    • 2 通过Expires指定过期时间。
      -3 通过Last-Modified/Etag

    DNS域名解析

    • 1.用户输入URL,浏览器检查自身有没有缓存该域名的IP地址。

    • 2.如果没有,浏览器检查操作系统缓存中是否有这个DNS解析结果。

    • 3.如果缓存中还没有,则操作系统会把这个域名发送给LDNS(Local DNS)即本地域名服务器。

    • 4.如果LDNS中还没有,则只能去Root Server域名服务器中请求解析了。这样的情况比较罕见,因为全球只有13台左右这样的服务器。

    • 5.根域名服务器会返回一个本地域名服务器所查域的主域名服务器(gTLD Server)地址。

    • 6.LDNS向gTLD发送请求。

    • 7.gTLD接受此请求,返回一个此域名对应的Name Server域名服务器的地址。这个Name Server通常就是你注册的域名服务器。

    • 8.Name Server返回该域名对应的IP和TTL值,然后Local DNS Server会缓存这个对应关系,缓存时间由TTL控制。

    • 9.解析结果返回用户。用户根据TTL值缓存此对应关系。

    清除缓存域名

    Local DNS的缓存由TTL来控制,很难人工介入。但是本地机器的缓存可以用以下命令来清除:

    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即内容分发网络(Content Dilivery Network)。通过现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络边缘,使用户可以就近取得所需要的内容,提高用户网站的响应速度。

    CDN 网络架构
    负载均衡

    对工作任务进行平衡、分摊到多个操作单元上去,共同完成任务。

    三种架构:

    • 1.链路负载均衡:由DNS解析来完成负载均衡,用户直接访问目标服务器,而不需要经过其他的代理服务器,通常访问速度会更快。
      缺点:一旦某台服务器挂掉,由于用户本地和Local DNS都有缓存,缓存没有及时更新,则造成用户无法访问这个域名。
    链路负载均衡
    • 2.集群负载均衡
      分为硬件负载均衡和软件负载均衡。
      硬件负载均衡:由一台专门的硬件设备负责转发请求,太贵一般公司用不起,但是性能很好。
    硬件负载均衡

    软件负载均衡:由多台代理服务器组成。成本非常低,网络延时较长。


    • 3.操作系统负载均衡
      利用操作系统级别的软中断或者硬件中断来完成。如设置多队列网卡实现。
    CDN动态加速

    一种优化技术,技术原理:在DNS的解析中通过动态的链路探测来寻找回源最好的一条路径,然后通过DNS的调度将所有请求调度到选定的这条路径上回源头,从而增加用户访问的效率。


    CDN动态加速

    原书链接

    以上内容只是个人笔记纪录,更多完整内容请购买作者原书籍查看。《深入分析JavaWeb技术内幕》

    相关文章

      网友评论

        本文标题:【笔记】深入分析JavaWeb技术内幕-(一)Web请求过程与架

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