web浏览器与web服务器之间的一次http请求与响应过程需要完成如下几个步骤。
- 浏览器根据所使用的http协议,解析出url对应的域名。
- 通过dns域名解析器,查询出url对应的ip地址。
- 通过url解析出对应的端口号,如果是80端口,默认可以省略。
- 浏览器发起并建立对应的ip端口的连接。
- 浏览器像服务器发送请求。
- 服务器响应浏览器的请求,浏览器读取响应,渲染网页。
- 浏览器关闭与服务器的连接。
通过httpclient发送http请求
随着http协议的广泛应用,它已经不仅仅局限于原来的浏览器/服务器即bs模式。很多情况下我们需要自己实现向服务端发送请求,以及解析服务端响应的这个过程。如果通过socket api来实现这一切,会带来相当大的工作量,并且这种工作是重复且没有价值的,还可能导致一些不可预估的风险,比如底层的流处理,并发控制等。httpClient为这一系列问题提供了成熟的解决方案。
使用http协议的优势
-
基于tcp协议实现的rpc,由于处于协议栈的下层,能够更灵活地对协议字段进行定制,减少网络传输字节数,降低网络开销,提高性能,实现更大的吞吐量和并发数。但是需要更多地关注底层复杂的细节,实现的代价更高,且由于所定义协议自身的局限性,难以得到平台厂商和开源社区的支持,较难实现跨平台的调用。
-
随着互联网特别是移动互联网的星期,应用程序对跨平台的要求越来越高,如果基于tcp协议来实现rpc,不同平台的移动终端需要开发不同工具包来发送和请求,而json和xml作为通用的格式标准,开源的解析工具已经相当成熟,在其上进行二次开发屏蔽了很多底层繁琐的细节,非常便捷和简单。
-
随着请求规模的扩展,基于tcp协议rpc的实现,程序需要考虑多线程并发、锁、I/O等复杂的底层实现细节,对大流量高并发的压力下,任意一个细小的错误,都会被无限放大。对于很多基于http协议的实现来说,很多成熟的web容器已经帮其处理好了这些事情,如tomcat,jboss,apache等,开发人员可以将更多的精力集中在业务实现上,而非处理底层细节。
网友评论