深入理解Javaweb——Web请求过程

一  HTTP请求的本质

发起HTTP请求即建立Socket连接,只不过outputStream.write写的二进制字节数据格式要符合HTTP,浏览器在建立Socket连接之前,必须根据地址栏里输入的URL的域名DNS解析出IP地址,在根据这个IP地址和默认的80端口与服务器建立Socket连接,然后浏览器根据这个URL组装成一个get类型的HTTP请求头,通过outputStream.write发送目标服务器,服务器等待inputStream.read返回数据,最后断开该连接。

二 常见Http状态码

200 客户端请求成功

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

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

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

404 请求的资源不在

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

说明:

1xx:指定客户端应响应的某些动作

2xx:请求成功

3xx:用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息

4xx:用于指出客户端的错误

5xx:用于指出服务器错误

三  DNS解析过程

(1)用户在浏览器键入域名,回车。

(2)浏览器检查浏览器缓存中有无此域名对应IP,有则结束。

(3)浏览器检查操作系统缓存(hosts文件)中有无此域名对应IP,有则结束。

(4)将域名发到本地DNS,查看有没有在其缓存中,有则返回IP给用户,结束。

(5)向根域名服务器请求,根域名服务器返回主域名服务器(.com,.cn等)地址。

(6)向主域名服务器请求,返回注册域名服务器地址。

(7)经过多级解析后返回IP给本地DNS。

(8)本地DNS缓存之,并返回给用户。


备注:Java可以InetAdress类进行域名解析,但必须是单例模式,否则会有严重性能问题,因为如果每次都创建新的InetAdress实例,则每次都要进行一次完整的域名解析,非常耗时

四  CDN工作机制

CDN=镜像+缓存+整体负载均衡。

目前CDN以缓存网站中静态数据为主,如CSS,JS等,用户从主站服务器请求到动态内容后,载从CDN上下载静态数据,从而加快速度。

负载均衡:由DNS的解析完成

链路负载均衡:DNS解析成不同的IP,从而访问不同服务器。

集群负载均衡:

硬件负载均衡:由专门硬件设备转发请求。贵,用不起。

软件负载均衡:网络层利用IP地址进行地址转发,应用最多。

操作系统负载均衡:多队列网卡

五 TCP三次握手

 建立起一个TCP连接需要经过“三次握手”:  

(1)第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 

(2)第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;  

(3)第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。   

握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”。

六   Socket

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,只需要关注一组简单的接口,其他协议级别的事情都交个Socket去做



















  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值