深入WEB请求过程

xiaoxiao2021-02-28  84

1.求取原则

a:互联网上所有资源都要用一个URL来表示

b:必须基于HTTP与服务端交互

c:数据展示必须在浏览器中

2.如何发起一个请求

    浏览器根据地址栏里输入的RUL的域名DNS解析出IP地址,再根据这个IP和默认的80端口与远程服务器建立Socket链接,然后浏览器根据这个URL

组装成一个get类型的HTTP请求头,通过outputStream.write发送到目标服务器,服务器等待inputStream.read返回数据,最后断开连接。发起一个HTTP请求的过程就是建立

一个Socket通信的过程。    通过HTTPClient实现的一个简单的发送请求过程

HttpClent httpClient = createHttpClient(); PostMethod postMethod; String domainName = Switcher.domain; postMethod = new PostMehtod(domainName); postMethod.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=GBK"); for(FilterData filterData :filterDatas){ postMethod.addParameter("ip",filterData.ip); postMethod.addParameter("count",String.valueOf(filterData.count)); } try{ httpClient.executeMehtod(postMehtod); postmethod.getResponseBodyAsString(); }catch(Exception e){ logger.error(e); }

3.HTTP解析

     3.1HTTP头
     HTTP Header控制着用户浏览器的渲染行为和服务器的执行逻辑。又分为:请求头和响应头

    

    

             3.2缓存机制

              3.2.1 Cache-Conrol/Pragma               指定多有缓存机制在整个请求/响应连中必须服从的指令

              3.2.2 Expires

             格式:Expires: Sat,25 Feb 2012 12:22:17 GMT,后面跟着一个日期和时间,超过这个时间值后,缓存的内容将失效。

             3.2.3 Last-Modified/Etag

             Last-Modified字段一般用于表示一个服务器上的资源的最后修改时间;

             Etag字段是服务器端给每个页面分配的一个唯一编号,通过这个编号来区分当前这个额页面是否是新的。

4.DNS域名解析

           4.1 DNS域名解析过程

          

             4.2清除缓存的域名

             Windows下ipoconfig/flushdns              Linux下/etc/init.d/nscd restart

            java应用中JVM也会缓存DNS的解析结果,这个缓存实在InetAddress类中完成的,有两种缓存策略:一种是正确解析结果缓存,另一种是失败解析结果缓存。这两个缓存时间由两个配置项控制,配置项是在%JAVA_HOME%\lib\security\java.security文件中配置的。两个配置项分别是networkaddress.cache.ttl和networkaddress.cache.negative.ttl。它们的默认值分别 是-1(永不失效)和10(缓存10秒)。

          这里还要个别强调一点,如果我们需要用InetAddress类解析域名,必须是单例模式,不然会有严重的性能问题,如果每次都创建InetAddress实例,则每次都要进行一次完整的域名解析,非常耗时。

          5.CDN工作机制

          CDN(Content Delivery Network) 内容分部网络,是构建在现有Internet上的一种先进的流量分配网络。CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。目前CDN都已缓存网站中的静态数据为主,如CSS,JS,图片和静态页面等数据。

        6.负载均衡

         负载均衡(Load Balance) 就是Udine工作任务进行平衡,分摊到多个操作单元上执行。通常有三种负载均衡架构:链路负载均衡、集群负载均衡和操作系统负载均衡。

        链路负载均衡:通过DNS解析成不同的IP,然后用户根据这个IP来访问不同的目标服务器。

             集群负载均衡又分为硬件负载均衡和软件负载均衡。

             硬件负载均衡一般使用一台专门的硬件设备来转发请求(F5)

                  软件负载均衡直接试用廉价的PC就可以搭建

              操作系统负载均衡,就是利用操作系统级别的软中断或者硬件中断来传达负载均衡。

转载请注明原文地址: https://www.6miu.com/read-19652.html

最新回复(0)