深入分析JavaWeb技术内幕(一)—— 深入Web请求过程

一、用户如何发起一个请求?

        当用户在浏览器里输入一个URL时,浏览器首先会请求DNS将这个域名解析成对应的IP地址,再根据这个IP地址和默认的80端口与远程服务器建立Socket连接,然后浏览器根据这个URL组装成一个GET类型的HTTP请求头,通过outputStream.write发送到目标服务器,服务器等待inputStream.read返回数据,最后断开这个连接。

二、HTTP解析

1、常见的HTTP请求头

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

Accept-Encoding :用于指定可接受的内容编码

Accept-Language :用于指定一种自然语言,如Accept-Language:zh-cn

Host :用于指定被请求资源的internet主机和端口号

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

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

2、常见的HTTP响应头

Server :使用的服务器名称

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

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

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

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

Keep-Alive :保持连接的时间

3、常见的HTTP状态码

200 :客户端请求成功

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

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

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

404 :请求的资源不存在

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

4、浏览器的缓存机制

        现在的浏览器都有缓存机制,一般使用F5刷新页面都是返回浏览器缓存的数据,如果浏览页面发现异常时,使用Ctrl+F5组合键重新请求的页面就是没有缓存的最新页面,为什么使用Ctrl+F5重新请求的就是没有缓存的页面呢?这是因为首先在浏览器上使用Ctrl+F5组合键刷新页面时,浏览器会直接向目标URL发送请求,而不会使用浏览器缓存的数据,其次为了防止访问到应用服务器中部署的缓存服务器中的数据,当我们在使用Ctrl+F5组合键刷新一个页面时,会在HTTP请求头中增加一些请求项,通过它来告诉服务器我们要获取的是最新的数据,而不是缓存数据,如下图所示:

这是使用F5刷新页面的请求头,返回的是缓存数据



这是使用Ctrl+F5刷新页面的请求头,返回的是最新数据



使用Ctrl+F5刷新页面时,最重要的是在请求头中增加了两个请求项Pragma:no-cache和Cache-Control:no-cache,Cache-Control/Pragma这个HTTP Head字段用于指定所有缓存机制在整个请求/响应链中必须服从的指令,这个HTTP Head字段有一些可选值,如下所示:

Public :所有内容都将被缓存,在响应头中设置

Private :内容只缓存到私有服务器中,在响应头中设置

no-cache :所有内容都不会被缓存,在请求头和响应头中设置

no-store :所有内容都不会被缓存到缓存或Internet临时文件中,在响应头中设置

must-revalidation/proxy-revalidation :如果缓存的内容失效,请求必须发送到服务器/代理以进行重新验证,在请求头中设置

max-age=xxx :缓存的内容将在xxx秒后失效,这个选项只在HTTP1.1中可用,和Last-Modified一起使用时优先级较高,在响应头中设置


其它HTTP Head字段:

① Expires :它通常的使用格式是Expires:Fri ,24 Dec 2027 04:24:07 GMT,后面跟的是日期和时间,超过这个时间后,缓存的内容将失效,浏览器在发出请求之前会先检查这个页面的这个字段,查看页面是否已经过期,过期了就重新向服务器发起请求;

② Last-Modified/Etag :它一般用于表示一个服务器上的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值