深入分析javaweb技术内幕笔记——深入分析Web请求过程

来源:互联网 发布:投资tw域名 编辑:程序博客网 时间:2024/06/04 23:19

一:B/S网络架构概述

B/S网络架构基于统一的应用层协议HTTP来交互数据。与大多数传统C/S互联网应用程序采用的长连接的交互模式不同,HTTP采用无状态的短连接的通信方式。通常情况下,一次请求也对应一个业务逻辑,然后这次通信连接就断开了。采用这种方式是为了能够同时服务更多的用户。现在的互联网应用每天要处理上亿个用户请求,不可能每个用户访问一次之后就一直保持这个连接。


不管网络架构如何变化,一些固定不变的原则需要遵守:

1.互联网上所有的资源都要用一个URL(统一资源定位符)来表示

2.必须基于HTTP与服务端进行交互

3.数据展示必须在浏览器中进行

二:HTTP常见请求头,响应头,状态码

请求头 说明

Accept-Charset用户指定客户端接受的字符集

Accept-Encoding用户指定可接受的内容编码。如Accept-Encoding:gzip.deflate

Accept-Language用于指定一种自然语言

Host 用户指定被请求资源的Internet主机和端口号

User-Agent 客户端将它的操作系统,浏览器和其他属性告诉服务器

Connection 当前连接是否保持


响应头 说明

Server 使用的服务器的名称

Content-Type用来指明发送给接受者的实体正文的媒体类型

Content-Encoding与请求头的Accept-Encoding相对应,告诉浏览器服务端采用的是什么压缩编码

Content-Language描述了资源所有的自然语言,与Accept-Language相对应

Content-Length指明实体正文的长度,用以字节方式存储的十进制数字来表示

Keep-Alive 保持连接的时间。如Keep-Alive:timeout=5,max=20


状态码 说明

200 客户端请求成功

302 临时跳转,跳转的地址通过Location指定

400 客户端请求有语法错误,不能被服务器识别

403 服务器收到请求,但是拒绝提供服务

404 请求的资源不存在

500 服务器发生不可预知的错误


浏览器缓存

Ctrl+F5组合刷新页面,浏览器会直接向目标URL发起请求,而不会使用浏览器缓存的数据,但如果在应用服务器的前端部署一个缓存服务器。就也会使用缓存数据

javaweb中控制缓存

response.setHeader("Cache-Control", "no-cache");  
response.setHeader("Pragma", "no-cache");  
response.setDateHeader("expires", -1); 

DNS域名解析

1.浏览器会检查浏览器的缓存中是否有该域名解析过的对应的ip地址

2.浏览器会检查操作系统中C:\Windows\System32\drivers\etc\hosts中是否有该域名对应的ip

3.如果以上两个步骤都没有找到对应的ip。操作系统会把该域名发送的在操作系统中设置的DNS服务器(LDNS即本地域名服务器)

4.如果LDNS没有命中,就直接到Root Server域名服务器请求解析

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

6.本地域名服务器再向上一步返回的gTLD服务器发起请求

7.接受请求的gTLD服务器查找并返回此域名对应的Name Server域名服务器的地址。这个Name Server通常就是你注册的域名服务器。例如你在某个域名服务器提供商申请的域名,那么这个域名解析任务就由这个域名提供商的服务器来完成

8.Name Server域名服务器会查询存储的域名和IP的映射关系,在正常情况下都根据域名得到目标IP记录,连同一个TTL值返回给DNS Server域名服务器

9.返回该域名对应的IP和TTL值。LDNS会缓存这个域名和IP的对应关系,缓存时间有TTL控制

10.把解析结果返回给用户,用户根据TTL值缓存在本地系统缓存中,域名解析过程结束





阅读全文
0 0
原创粉丝点击