深入web请求过程:如何发起请求,HTTP协议解析,DNS域名解析

B/S架构两方面好处:客户端使用统一的浏览器Browser;服务端基于统一的HTTP协议。

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


如何发起一个请求

当一个用户在浏览器里输入www.pingan.com这个URL时:

1.请求DNS把这个域名解析成对应的IP地址。

2.根据IP地址在互联网上找到对应的服务器,向这个服务器发起一个get请求。

3.由这个服务器决定返回默认的数据资源给访问的用户。

在服务器端实际上还有很复杂的业务逻辑:

服务器可能有很多台,到底指定哪台服务器来处理请求,需要一个负载均衡设备来平均分配所有用户的请求。

请求的数据是存储在分布式缓存中还是一个静态文件中,或是在数据库里。

当数据返回浏览器时,浏览器解析数据发现还有一些静态资源(如CSS、JS或者图片)时又会发起另外的HTTP请求,而这些请求很可能会在CDN上,那么CDN服务器上又会处理这个用户的请求。


不管网络架构如何变化,始终有一些固定不变的原则

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

必须基于HTTP协议与服务端交互。

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


如何发起一个HTTP请求和如何建立一个Socket连接区别不大,只不过outputStream.write写的二进制字节数据格式要符合HTTP协议。

浏览器在建立Socket连接之前,必须根据地址栏里输入的URL的域名DNS解析出IP地址,再根据这个IP地址和默认80端口与远程服务器建立socket连接,然后浏览器根据这个URL组装成一个get类型的HTTP请求头,通过outputStream.write发送到目标服务器,服务器等待inputStream.read返回数据,最后断开这个连接。


不同浏览器在如何使用这个已经建立好的连接,以及根据什么规则来管理连接,有各种不同的实现方法。

一句话:发起一个HTTP请求的过程就是建立一个socket通信的过程。


HTTP协议解析

要理解HTTP协议,最重要的就是要熟悉HTTP协议中的HTTP Header, HTTP Header控制着互联网上成千上万的用户的数据的传输。

最关键的是,它控制着用户浏览器的渲染行为和服务器的执行逻辑。


常见的HTTP请求头:

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

Accept-Encoding 指定可接受的内容编码,如Accept-Encoding:gzip.defate

Accept-Language 指定一种自然语言,如Accept-Language;zh-cn

Host 用于指定被请求资源的Internet主机和端口号,如Host:www.pingan.com

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值