HTTP 302 错误,因为 header()


HTTP 302 error because of a header()

如果我在任何服务器引擎中验证 html 或注册 web,我会得到 302 错误。

原因是 header() 函数。如果我把它拿走,200 OK 状态一切都很好。

所以主要问题是我需要这种重定向才能使网络是多语言的。

接下来是逻辑。当用户第一次进入网页索引时.php - require_once一个带有函数的文件:

function cookies() {
    if (!isset($_COOKIE["lang"])){
    setcookie('lang','ukr', time()+(60*60*24*31)); 
    header('Location: index.php');
}}
cookies();

因此,用户会看到一个已经使用Deafault语言提交的页面。

如果没有来自require_once文件的重定向,则不会下载来自mysql的数据,并且用户不会看到任何文本。

问题:我应该将其保留为 HTTP 302 还是重建整个站点/逻辑以在索引页面上没有任何重定向???

302不是

错误。它是"已找到"的状态代码(又名"您要求的文档在此处")。如果您添加Location标头,PHP 将自动为您插入此标头(除非手动插入状态,但您不希望在此处使用 301)

如果您告诉人们根据他们的语言偏好去获取不同的文档,这是预期的响应。

不过,从index.php重定向到index.php很奇怪。大概您应该直接返回相应的文档,而不是重定向。

我明白了。 这其实很简单。

验证器不接受饼干。所以他们陷入了一个无限循环。

您可以对此进行测试:

  1. 从您的计算机中删除所有 Cookie。
  2. 在您的浏览器中禁用 Cookie 并尝试加载您的网站。

每当您使用标头("位置:....你会得到一个302,这是一个状态而不是一个错误,它告诉浏览器该网站已经重定向了页面:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

阅读这些验证器和引擎,看看拥有302对于您要做的任何事情来说是否是一个问题,通常不应该。

一种肮脏的方法是强制标头,我个人不鼓励这样做,也不知道它真的会产生什么副作用,但这可能是欺骗这些引擎的快速解决方法:

function cookies() {
    if (!isset($_COOKIE["lang"])){
    setcookie('lang','ukr', time()+(60*60*24*31)); 
    header('Location: index.php');
    header('HTTP/1.1 200 OK'); // <--- Forcing the header status
}}
cookies();