所以我有一台服务器到服务器应用程序。服务器1上的PHP脚本,域1在页面中设置自定义标头(授权:承载123456789)。服务器2上的脚本域2使用get_headers()来读取标头。
当文件本地提供时,一切正常。但是当服务器1上的脚本包含在Joomla模块中时,get_headers()不会检索自定义标头。
在这两种情况下,开发人员工具都会显示自定义标头,但也会显示一些与get_headers()返回的标头不同的标头。
如果加载了Joomla,下面的代码使用JFactory来设置标题,但使用header()是相同的结果。 Joomla只是没有通过自定义标题。
我不明白。任何人都知道这里发生了什么?它不是SEF或htaccess问题。
<?php
// Server 1
if(!class_exists("JFactory")){ // no Joomla
header('Authorization: Bearer 123456789');
} else { // Joomla framework loaded
$app = JFactory::getApplication();
$app->setHeader('Authorization: ', 'Bearer 123456789');
$app->sendHeaders();
}
服务器2上的代码:
<?php
// Server 2
$headers = get_headers("http://server1.com/");
foreach($headers as $header) {
echo $header ."<br/>";
}
本机提供时get_headers()的输出:
HTTP/1.1 200 OK
Date: Thu, 19 Jan 2017 12:44:35 GMT
Server: Apache
Authorization: Bearer 123456789
Content-Length: 0
Connection: close
Content-Type: text/html
Joomla提供的get_headers()输出:
HTTP/1.1 200 OK
Date: Thu, 19 Jan 2017 12:45:49 GMT
Server: Apache
Set-Cookie: 3c460b3da9ecb202e794816b4144c6ff=ja7mn4b4njov98lsv76kk8pvu2; path=/; HttpOnly
Vary: Accept-Encoding
Content-Length: 1264
Connection: close
Content-Type: text/html
开发人员工具显示的本机标题:
Authorization: Bearer 123456789
Date: Thu, 19 Jan 2017 13:07:32 GMT
Server: Apache
Connection: Keep-Alive
Keep-Alive: timeout=5, max=100
Content-Length: 0
Content-Type: text/html
200 OK
开发人员工具显示的Joomla标题:
Pragma: no-cache
Date: Thu, 19 Jan 2017 12:19:24 GMT
Last-Modified: Thu, 19 Jan 2017 12:19:25 GMT
Server: Apache
Authorization: : Bearer 123456789
Vary: Accept-Encoding
Content-Type: text/html; charset=utf-8
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection: Keep-Alive
Keep-Alive: timeout=5, max=100
Content-Length: 76888
Expires: Wed, 17 Aug 2005 00:00:00 GMT
答案 0 :(得分:0)
从setheader调用中删除双点:
$app = JFactory::getApplication();
$app->setHeader('Authorization', 'Bearer 123456789');
$app->sendHeaders();
答案 1 :(得分:0)
感谢Yoleth的建议。我测试了这个并获得了相同的结果。
但是我发现了这个问题。设置标题的Joomla站点使用名为Site Lock的组件。这类似于将网站放弃,但为开发人员提供了一些不错的功能。
基本上,Site Lock阻止了页面的提供,只是从锁定页面返回标题(应该如此)。我不知道为什么我之前没有看到它。有时只是看不到森林的树木!