关于重定向与转发

其实这个问题一直比较模糊。今天有人讨论这个东西,比较浅显的比较了一番。

我是从http这个角度来看的。

  我用来测试的PHP代码

<?php
    $key = empty($_GET['key'])?0:$_GET['key'];
    echo $key;
    if($key == 'redirect'){
        header("location:demo_1.php");
    }else{
         include('demo_1.php');
    //print_r(file_get_contents('demo_1.php'));这也是可以的 }
?>

  我们的需求是通过redirect.php 访问demo_1.php的内容

  重定向:重定向是加入客户端发送请求A页面,A页面返回请求内容  头信息中 Status Code:302 Found 这个状态码告诉浏览器,页面发生了重定向,需再次像目标路径发起请求location:demo_1.php,然后第二次发起请求,服务器返回结果。以下是测试的头部信息

Request URL:http://www.stu.com/redirect.php?key=redirect
Request Method:GET
Status Code:302 Found
Request Headersview source
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:zh-CN,zh;q=0.8
Connection:keep-alive
Host:www.stu.com
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36
Query String Parametersview sourceview URL encoded
key:redirect
Response Headersview source
Connection:Keep-Alive
Content-Length:8
Content-Type:text/html
Date:Wed, 13 Aug 2014 06:22:44 GMT
Keep-Alive:timeout=5, max=100
location:demo_1.php
Server:Apache/2.4.4 (Win64) PHP/5.4.12
X-Powered-By:PHP/5.4.12

 以上是重定向流程。

 转发:转发我在PHP 中是用的

 include('demo_1.php');
print_r(file_get_contents('demo_1.php')
这俩个方法的源码我没了解,这个从http角度来说只发送了一次请求到redirect.php 然后在redirect.php 在引入了demo_1.php 这个文件(
include('demo_1.php')) 二另外一种获取了demo_1.php的内容再输出来了。所以这俩者都没发送http请求。

区别二:
  重定向路径会发生变化,转发不会。
区别三:
  带的参数,重定向后失效,转发不会。
posted @ 2014-08-13 15:01  鱼尾纹  阅读(261)  评论(0编辑  收藏  举报