深入web请求过程

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

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

Connection 当前连接是否保持,如Connection:Keep-Alive


常见的HTTP响应头:

Server 使用的服务器名称,如Server.Apache/1.3.6(UNIX)

Content-Type 用来指明发送给接收者的实体正文的媒体类型,如Content-Type:text/html;charset=GBK

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

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

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

Keep-Alive 保持连接的时间,如Keep-Alive:timeout


常见的HTTP状态码

200 客户端请求成功

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

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

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

404 请求的资源不在

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


浏览器缓存机制

在我们浏览一个页面时发现有异常的情况下,通常考虑是不是浏览器做了缓存,一般的做法是按Ctrl+F5重新请求一次,重新请求的页面肯定是最新的页面。

原因: 在浏览器端,如果是按Ctrl+F5组合键刷新页面,浏览器会直接向目标URL发送请求,而不是使用浏览器缓存的数据。


文章转载于:http://blog.csdn.net/sunkobe2494/article/details/43762041?ref=myread

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值