私も同じ問題について非常に怒っていました。次のように、sslページからajaxリクエストを送信していました。
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' ||
$_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
<script type="text/javascript">
$.ajax({
url: "<?php echo $protocol.$_SERVER['HTTP_HOST'].$this->url(array("action"=>"autocomplete", "controller"=>"ajax", "module"=>"default"));?>",
data: { term: $("#keyword").val()},
dataType: "json",
type: "POST",
success: function(data){
response(data);
}
});
</script>
問題は、要求ヘッダーはリファラー ページが ssl ページであることを示していますが、応答ヘッダーは上記の Rob のコード printscreen のように「http」ページの場所を示していることです。
SSLページからajaxリクエストを行うたびに、同じページ、つまりsslページの応答が返され、非sslページからajaxリクエストを行うと、応答によって同じページが返されることがわかりました。非 SSL ページ。これは ajax リクエストとレスポンスのデフォルト ルールです。
httpsからの送信中にhttpからの応答を強制する私のコード側に間違いなく問題があるに違いないと思います。まさに、私の疑いは正しかった。実際には、https ではなく http ページへの応答に強制的にリダイレクトするデフォルトのコードがありました。以前のコードを共有しています:
class Custom_Customplugins extends Zend_Controller_Plugin_Abstract
{
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$action = $request->getActionName();
$controller = $request->getControllerName();
$module = $request->getModuleName();
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$host = $_SERVER['HTTP_HOST'];
if($host != "www.xyz.com")
{
if($protocol == "http://")
{
}
}
else
{
$r = new Zend_Controller_Action_Helper_Redirector();
$u = new Zend_Controller_Action_Helper_Url();
if(
($action == "index" && $controller == "index" && $module == "default")
|| ($action == "login" && $controller == "index" && $module == "default")
|| ($action == "businessownerregistration" && $controller == "index" && $module == "default")
|| ($action == "customerregistration" && $controller == "index" && $module == "default")
|| ($action == "index" && $controller == "changepwd" && $module == "admin")
|| ($action == "index" && $controller == "businessowner" && $module == "businessowner")
|| ($action == "changepwd" && $controller == "serviceprovider" && $module == "businessowner")
|| ($action == "index" && $controller == "customer" && $module == "default")
)
{
if($protocol == "http://")
{
$r->gotoUrl('https://'.$host.$u->url(array("action"=>$action, "controller"=>$controller, "module"=>$module)))->redirectAndExit();
}
}
else
{
if($protocol == "https://")
{
$r->gotoUrl('http://'.$host.$u->url(array("action"=>$action, "controller"=>$controller, "module"=>$module)))->redirectAndExit();
}
}
}
}
}
修正後のコードは次のとおりです。
<?php
class Custom_Customplugins extends Zend_Controller_Plugin_Abstract
{
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$action = $request->getActionName();
$controller = $request->getControllerName();
$module = $request->getModuleName();
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$host = $_SERVER['HTTP_HOST'];
if($host != "www.xyz.com")
{
if($protocol == "http://")
{
}
}
else
{
$r = new Zend_Controller_Action_Helper_Redirector();
$u = new Zend_Controller_Action_Helper_Url();
if(
($action == "index" && $controller == "index" && $module == "default")
|| ($action == "login" && $controller == "index" && $module == "default")
|| ($action == "businessownerregistration" && $controller == "index" && $module == "default")
|| ($action == "customerregistration" && $controller == "index" && $module == "default")
|| ($action == "index" && $controller == "changepwd" && $module == "admin")
|| ($action == "index" && $controller == "businessowner" && $module == "businessowner")
|| ($action == "changepwd" && $controller == "serviceprovider" && $module == "businessowner")
|| ($action == "index" && $controller == "customer" && $module == "default")
)
{
if($protocol == "http://")
{
$r->gotoUrl('https://'.$host.$u->url(array("action"=>$action, "controller"=>$controller, "module"=>$module)))->redirectAndExit();
}
}
else if(
($action == "autocomplete" && $controller == "ajax" && $module == "default")
|| ($action == "refreshcaptcha" && $controller == "index" && $module == "default")
)
{
}
else
{
if($protocol == "https://")
{
$r->gotoUrl('http://'.$host.$u->url(array("action"=>$action, "controller"=>$controller, "module"=>$module)))->redirectAndExit();
}
}
}
}
}
?>
そして今、私のhttpsページは正常に機能しています