php中的页面跳转和重定向

php中的页面跳转和重定向

ThinkPHP中跳转和重定向的区别

 

跳转:

浏览器认为: 当前URL请求成功, 重新请求新的URL.

浏览器会 记录当前的URL 和 新的URL 在请求历史记录中.

回退, 是可以回退到, 当前的URL上的. (无论 success, 和 error 都是一样)

语法实现:  在浏览器层面, 修改浏览器的location.href来实现的:location.href=href;

 

重定向:

浏览器认为, 当前的URL无效, 被重新定位到新的URL上.

浏览器不会记录当前的URL到历史记录中,

不能回退到当前的URL中.

语法实现, 都是服务器向浏览器发出重定向响应指令,

通过响应头:

header('Location:'. URL), 立即重定向到某个URL

header('Refresh: ')

 

重定向使用实例

重定向(Redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向)。

我们在网站建设中,时常会遇到需要网页重定向的情况:
1.网站调整(如改变网页 目录结构);
2.网页被移到一个新地址;
3.网页扩展名改变(如应用需要把.php改成.Html或.shtml)。
这种情况下,如果不做重定向,则用户收藏夹或搜索引擎数据库中旧地址只能让访问客户得到一个404 页面错误信息,访问流量白白丧失;再者某些注册了多个域名的网站,也需要通过重定向让访问这些域名的用户自动跳转到主 站点等。

 

 

什么时候用转发什么时候重定向

java中,如果你要跳转的那个页面需要用到你本页的参数,就用转发request.getRequestDispache("目标页面").forward(request,response),反之则可以用重定向

 

转发是在服务器内跳转的
重定向是服务器反馈客户端,由客户端重新发起其他请求

 

 

java中转发与重定向的区别

转发与重定向的区别如下:

转发是服务器行为,重定向是客户端行为

1.转发在服务器端完成的;重定向是在客户端完成的

2.转发的速度快;重定向速度慢

3.转发的是同一次请求;重定向是两次不同请求

4.转发不会执行转发后的代码;重定向会执行重定向之后的代码

5.转发地址栏没有变化;重定向地址栏有变化

6.转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成

在servlet中调用转发、重定向的语句如下:

request.getRequestDispatcher("new.jsp").forward(request, response);//转发到new.jsp

response.sendRedirect("new.jsp");//重定向到new.jsp

转发过程:客户浏览器发送http请求,web服务器接受此请求,调用内部的一个方法在容器内部完成请求处理和转发动作,将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。

重定向过程:客户浏览器发送http请求,web服务器接受后发送302状态码响应及对应新的location给客户浏览器,客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址,服务器根据此请求寻找资源并发送给客户。在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。

重定向,其实是两次request

第一次,客户端request A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。

 

 

 

php中的页面跳转和重定向的关系与区别

 

首先解释下,页面跳转与页面重定向的关系?

页面重定向一定会有页面跳转,页面跳转不一定会有页面重定向,也就是说页面重定向真包含于页面跳转,页面重定向是页面跳转的充分不必要条件。

总结下PHP下的几种页面跳转的方法

1、meta标签实现 
只需在head里加上下面这一句就行了,在当前页面停留0秒后跳转到目标页面

echo '<meta http-equiv="refresh" content="0;url=https://www.baidu.com">';

2、JavaScript实现

echo '<script>window.location.href = 'https://www.baidu.com';script>';

3、PHP页面重定向实现

header('Location: https://www.baidu.com');

使用PHP页面重定向跳转与上面两种方法有点不同的是,它的http应答状态码是指定为3xx。具体差别涉及HTTP的请求过程,这里就不细说了。

 

重定向是浏览器解析http的首部指令(比如302状态码)时实现跳转的,这个过程不会响应跳转前的页面,而普通页面跳转是在html页面(即http响应的主体)执行时进行跳转的。

 

 

 

你可能感兴趣的:(php中的页面跳转和重定向)