首页 php教程 php手册 深入分析php 重定向(非常的有用)

深入分析php 重定向(非常的有用)

May 22, 2016 pm 06:38 PM

重定向对于我们来讲就是301了,但在php中用重定向会使用到header函数了,下文我们介绍的主要是一些状态代码与使用方法的例子。

重定向是一个看似简单,实际很复杂的问题。HTTP状态码一共才五个系列(1XX,2XX,3XX,4XX,5XX),而重定向状态码被单独作为一个系列(3XX)存在,足以说明它的重要性,但是很多人认为知道301/302的区别就算熟悉重定向了,这实在是一大谬误。本文主要介绍一下303/307。

为了方便测试,首先熟悉一下如何使用curl命令得到响应头:

-I/–head
(HTTP/FTP/FILE) Fetch the HTTP-header only! HTTP-servers feature the command HEAD which this uses to get nothing but the header of a document. When used on a FTP or FILE file, curl displays the file size and last modification time only.

例子命令:curl -I http://www.google.com/

通常PHP里的重定向是这样的:

header('Location: http://localhost/');
exit();
登录后复制

通过curl命令访问如上的代码,我们将得到如下响应头:

HTTP/1.1 302 Found
Location: http://localhost/
登录后复制

如上的重定向代码在编程里很常用,比如说添加文章成功后,跳转回列表页,不过这里的重定向状态码302却是值得商榷的。

这还得从头说起,在HTTP1.0的时代,那时候302的名字还是“Moved Temporarily”,但在实际使用上,302往往包含了两方面的意思(也就是后来的303/307),为了消除可能的混淆,在HTTP1.1中,302被重命名为“Found”,并新加了303(See Other)和307(Temporary Redirect),至于PHP之所以在重定向时缺省使用302状态码是为了兼容的目的,所以不到不得已(有时候,客户端是HTTP1.0的,只理解302),不应该使用302。

303和307都把重定向的URI置于Location头中,他们的区别在于:

303:对于POST请求,它表示请求已经被处理,客户端可以接着使用GET方法去请求Location里的URI。
307:对于POST请求,表示请求还没有被处理,客户端应该向Location里的URI重新发起POST请求。

下面看看PHP如何发送非302的重定向,以303为例:

// 第一种方法

header('Location: http://localhost/', true, 303);
登录后复制


// 第二种方法

header('HTTP/1.1 303 See Other');
header('Location: http://localhost/');
登录后复制

使用curl命令,你就会看到如下响应头:

HTTP/1.1 303 See Other
Location: http://localhost/
登录后复制

总结,本文说的主要是303/307之间的关系。之所以明确区分是为了让状态码本身能够准确的表达响应的含义,从而尽可能的避免对重定向的滥用。

永久地址:

转载随意~请带上教程地址吧^^

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)