java web学习

web请求过程分析

2018-05-02  本文已影响0人  丶time

web请求过程分析

大致过程

首先用户输入URL网址,会请求DNS对域名进行解析成相应的IP地址,然后根据IP地址,在互联网上寻找对应的服务器,向服务器发起一个get请求,服务器返回对应的数据资源。

当然,服务器可能有很多台,负载均衡设备会平均分配所有用户的请求,请求的数据可能存储在分布式缓存中或是静态文件,或是数据库里。

当数据返回浏览器,浏览器解析数据发现还有一些静态资源,则又会发起HTTP请求,这些请求很可能在CDN上,CDN服务器又会处理这个用户的请求。!


image

HTTP请求:

HTTP请求头:

请求头 说明
Accept 浏览器可接受的MIME类型
Accept-Charset 浏览器可接受的字符集
Accept-Encoding 浏览器能够进行解码的数据编码方式
Accept-Language 浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到
Authorization 授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中
Connection 表示是否需要持久连接
Content-Length 表示请求消息正文的长度
Cookie 这是最重要的请求头信息之一
From 请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它
Host 初始URL中的主机和端口
If-Modified-Since 只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答
Pragma 指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝
Referer 包含一个URL,用户从该URL代表的页面出发访问当前请求的页面
User-Agent 浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用
UA-Pixels,UA-Color,UA-OS,UA-CPU 由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型
响应头 说明
Allow 服务器支持哪些请求方法(如GET、POST等)
Content-Encoding 文档的编码(Encode)方法
Content-Length 表示内容长度
Content-Type 表示后面的文档属于什么MIME类型
Date 当前的GMT时间
Expires 指明应该在什么时候认为文档已经过期,从而不再缓存它
Last-Modified 文档的最后改动时间
Location 表示客户应当到哪里去提取文档
Refresh 表示浏览器应该在多少时间之后刷新文档,以秒计

常用状态码

1**:请求收到,继续处理

100——客户必须继续发出请求

2**:操作成功收到,分析、接受

200——交易成功

3**:完成此请求必须进一步处理

302——在其他地址发现了请求数据

4**:请求包含一个错误语法或不能完成

400——错误请求,如语法错误

403——禁止访问

404——没有发现文件、查询或URl

5**:服务器执行一个完全有效请求失败

500 - 内部服务器错误

浏览器缓存机制

cache control

当刘拉起页面异常,通常可能是浏览器做了缓存。如果ctrl+F5重新请求页面,则请求到的是最新的页面。因为此时请求会增加Pragma:no-cache和Cache-Control :no-cache

Expires

浏览器在发出请求之前会检查这个字段,过期则会重新发起请求

Last-Modefied

表示最后修改时间,浏览器再次请求时在请求头上加上,询问当前缓存是否是最新的,是则不会传输新的数据。

DNS域名解析

步骤:(输入回车后)

  1. 浏览器检查缓存有没有域名对应的IP地址,如果IP没有发生变化,则直接访问成功。如果变化了则失败,因此缓存时间设置不能太长。
  2. 如果浏览器缓存中没有,则会查找操作系统缓存红是否有对应的解析结果。
  3. 如果还没有,操作系统把域名发送给LDNS服务器,该服务器一般都会缓存域名解析结果,缓存时间是受域名失效时间控制,缓存空间一般不是影响域名失效的主要因素。80%的域名解析在这里完成,LDNS承担了域名解析的主要工作。
  4. 如果还没有找到,就去ROOTServer域名服务器请求解析。
  5. 根域名服务器返回给本地域名服务器一个所查询主域名服务器地址(gTLD server)。gTLD是国际顶级域名服务器,全球只有13台。
  6. LDNS向gTLD服务器发送请求。
  7. gTLD查找并返回域名对应的Name Server域名服务器地址。
  8. Name Server根据映射表,得到IP记录,连同一个TTL值返回给DNS Server域名服务器。
  9. 返回该域名对应的IP地址和TTL值,LDNS缓存域名和IP,缓存时间由TTL控制。
  10. LDNS把结果返回给用户,用户根据TTL值缓存在本地缓存中。

总结:

浏览会先查找缓存,未找到则会查本地的DNS缓存和hosts文件,
未找到则会调用DNS服务,将地址给本地解析服务器,解析域名,若未找到则会向上寻找,一直到到根域名服务器
根域名服务器会顶级域名寻找顶级域名服务器,将该服务器IP发给本地DNS域名解析(根服务器在顶层,不会一层层向下寻找,向下找到一层就让本地DNS自己去找)
例如:根域名服务器找到.com域服务器地址IP,将ip发送给我们的域名解析服务器,我们的服务器再向该ip地址询问,直到找到域名对应的IP地址

几种域名解析方式

CDN架构

用户要访问某个静态文件(如CSS文件),假设这个文件域名是cdn.jianshu.com,那么首先要想LDNS发请求,经过迭代解析后会回到这域名的注册服务器去解析,这个DNS解析服务器通常会把它重新CNAME解析到另外一个域名,这个域名最终会指向CDN全局中的DNS负载均衡服务器,再由这个GTM来最终分配给访问用户最近的CDN节点。

用户拿到DNS解析结果,用户去CDN节点访问静态文件,如果节点中所请求的文件不存在, 就会回到源站去获取这个文件,再返回给用户。

负载均衡

Load Balance:对工作任务进行平衡、分摊到多个操作单元上执行,如图片服务器、应用服务器。

链路负载均衡

通过DNS解析成不同的IP,用户根据IP来访问不同的目标服务器

集群负载均衡

操作系统负载均衡

利用操作系统级别的软中断或者硬件中断达到负载均衡,如设置多队列网卡
上一篇下一篇

猜你喜欢

热点阅读