Web页面跳转

一、服务器端跳转 vs 客户端跳转

1、服务器端跳转:

  • step1:客户端发起一次页面请求(请求页面A)
  • step2:服务器端接收到请求后再在内部发生一次页面请求(请求页面C)
  • step3:最终将页面C呈现给客户端作为响应
  • 小结:仍是请求-响应的过程,只不过服务器在做出响应之前内部发生了页面跳转,而整个过程中,客户端只发生了一次请求,且客户端感知不到跳转过程
    在这里插入图片描述
    2、客户端跳转:
    • step1:客户端发起一次请求,服务器端做出一次响应
    • step2:客户端在当前页面内发起请求,服务端再次做出响应
      在这里插入图片描述
      3、两者区别:
      • URL变化:服务器端跳转时不会改变地址栏中URL,而客户端跳转时会改变相应URL;
      • Request属性:服务器端跳转时,未超出request的属性范围,request属性能够保存到跳转页,而客户端跳转时,则超出了request的属性范围,无法进行其属性的传递;
      • JS执行:服务器端执行到发生跳转的JS语句后不再继续执行而是直接发生跳转,而客户端会执行完全部的JS语句后才发生跳转;

二、实现服务器端跳转

1、两个HTTP STATUS CODE ---- 301、302:

  • 301:永久性跳转(Permanently Moved),即从页面A跳转到页面B后再也不会回到页面A了
  • 302:暂时性跳转(Temporarily Moved),即表示页面从A跳转到B后仍会回到A,页面A和B得URL都会被缓存

2、301应用场景:
1)域名到期不想续费(或者发现了更适合网站的域名),想换个域名。
2)在搜索引擎的搜索结果中出现了不带www的域名,而带www的域名却没有收录,这个时候可以用301重定向来告诉搜索引擎我们目标的域名是哪一个。
3)空间服务器不稳定,换空间的时候。

应用场景内容摘自他人文章,自己照上述所说还还没有复现成功过

3、302应用(亲测):

  • 当访问某个需要先登录的网站时,会重定向到登录界面,这时确实会看到http返回了302状态码;
  • 当再次访问此网站时,就会发现登录页面已经被缓存了,也就不需要再次请求重定向了;
  • 注:是否执行302重定向因网站而异,只是恰好发现了某网站执行了302重定向

4、PHP实现301、302:

//实际中,下例中的url为重定向的目标页面
# 实现302:
<?php header("Location:url"); ?> 
# 实现301:
<?php header("HTTP/1.1 301 Moved Permanently"); header("Location:url"); ?>

5、尽量避免使用302,以防URL劫持:

URL劫持定义:
从网址A 做一个302 重定向到网址B 时,主机服务器的隐含意思是网址A 随时有可能改主意,重新显示本身的内容或转向其他的地方。大部分的搜索引擎在大部分情况下,当收到302 重定向时,一般只要去抓取目标网址就可以了,也就是说网址B。如果搜索引擎在遇到302 转向时,百分之百的都抓取目标网址B 的话,就不用担心网址URL 劫持了。问题就在于,有的时候搜索引擎,尤其是Google,并不能总是抓取目标网址。比如说,有的时候A 网址很短,但是它做了一个302 重定向到B 网址,而B 网址是一个很长的乱七八糟的URL 网址,甚至还有可能包含一些问号之类的参数。很自然的,A 网址更加用户友好,而B 网址既难看,又不用户友好。这时Google 很有可能会仍然显示网址A。由于搜索引擎排名算法只是程序而不是人,在遇到302 重定向的时候,并不能像人一样的去准确判定哪一个网址更适当,这就造成了网址URL 劫持的可能性。也就是说,一个不道德的人在他自己的网址A 做一个302 重定向到你的网址B,出于某种原因, Google 搜索结果所显示的仍然是网址A,但是所用的网页内容却是你的网址B 上的内容,这种情况就叫做网址URL 劫持。

三、实现客户端跳转

1、HTML实现:

<head>
 
<!-- 以下方式只是刷新不跳转到其他页面 -->
 
<meta http-equiv="refresh" content="10">
 
<!-- 以下方式定时转到其他页面 -->
 
<meta http-equiv="refresh" content="5;url=hello.html"> 
 
</head>

2、提交表单、点击链接等都属于客户端页面跳转

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值