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)就是通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向)。
什么时候用转发什么时候重定向
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响应的主体)执行时进行跳转的。