【问题标题】:CAUTION: provisional header are shown [duplicate]注意:显示临时标题[重复]
【发布时间】:2014-02-28 09:39:12
【问题描述】:

我无法调试一周前出现的这条消息。

我尝试恢复到旧文件,但这很奇怪,没有解决我的问题。

所以:我有两个长轮询请求。 (关闭其中一个也无济于事)。

例如这是其中之一:

public function update_private_messages_ajax_handler(){
    global $wpdb;
    global $bp;
    $chat_table = $wpdb->prefix . 'bp_dollars_chat';

    $current_user = $bp->loggedin_user->id;

    ob_start();
    header("Content-Type: application/json");
    header("Cache-Control: no-cache, must-revalidate");
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");

    $startTime = time();
    while((time()-$startTime)<=20) {
        $messages = $wpdb->get_results(
            $wpdb->prepare("(SELECT * 
                FROM $chat_table 
                WHERE to_user = %d
                AND recd = 1
                AND id > %d
                ORDER BY id DESC) ORDER BY id ASC
            ", $current_user, $_POST['last_id'])
        );
        if($messages) {
            foreach($messages as $v){
                //$v->timestring = date_i18n($this->date_format.' - '.$this->time_format, $v->unix_timestamp+$this->gmt_offset);
                $v->name = get_dollar_name($v->from_user);
                $v->avatar = get_avatar($v->from_user, 50);
                //$v->message = convert_smilies( $v->message );
            }
            $response = json_encode(array('no_participation' => $this->no_participation, 'success'=> 1, 'messages'=>$messages));

            echo $response;
            ob_flush(); flush();
            exit;
        } else {
            sleep($this->options['timeout_refresh_messages']);
        }
    }

    $response = json_encode(array('no_participation' => $this->no_participation, 'success'=> 0));

    echo $response;
    ob_flush(); flush();
    exit;
}

如您所见,我发送了缓存控制标头,所以这应该不是问题described here 我也没有安装任何 adBlocker,这是本地安装。

有一个客户端脚本

update_private_messages: function() {
    jQuery.post(quick_chat.ajaxurl, {
            action: 'quick-chat-ajax-update-pmessages',
            last_id: quick_chat.last_private_id
        },
        function(data) {
            console.log(data);
            if(data.success == 1) {
                var updates = data.messages;
                var already_notified = 0;
                var chat_history = jQuery('.popoverx.chat.in .chathistory');
                for(var i=0;typeof(updates[i])!='undefined';i++){
                    // this in case if window open and new message is for current user
                    if(quick_chat.privateOpen == true && (quick_chat.privateOhter == updates[i].from_user || quick_chat.privateOhter == updates[i].to_user )) {
                        // @TODO do I animate every time?
                        jQuery(chat_history).prepend(quick_chat.single_private_html(updates[i])).animate({scrollTop: 0}, 500);
                    } else if(updates[i].recd == 1 && updates[i].from_user != quick_chat.user_id) {
                        // not yet in unread group
                        if(quick_chat.privateUnread.indexOf(parseInt(updates[i].from_user)) == -1) {
                            quick_chat.privateUnread.push(parseInt(updates[i].from_user));
                        }
                        if(already_notified == 0 && quick_chat.last_private_id != 0 && updates[i].from_user != quick_chat.user_id) {
                            if(quick_chat.play_audio == 1) {
                                quick_chat.audio_element.play();
                            }
                            already_notified = 1;
                        }
                    }
                }
                // update label
                var unreadIcon = jQuery('#bs-navbar-right > li > a.messages');
                if(quick_chat.privateUnread.length != 0) {
                    unreadIcon.find('span').remove().end().append('<span class="label label-danger">'+ quick_chat.privateUnread.length +'</span>')
                } else {
                    unreadIcon.find('span').remove()
                }
                quick_chat.last_private_id = updates[updates.length-1].id;
            }
            quick_chat.update_private_messages();
        }, 'json'
    );
}

这正常吗?我不能成为长轮询的正常消息 - 因为它是一个待处理的请求。 它只是似乎没有记录在任何地方


注意: 我也有许多短轮询请求,这可能是超过 6 个请求相互取消的情况,但是 - 我也尝试关闭所有其他请求,除了一个(长轮询),这不是一种情况


这是一个正在运行的原始脚本,因此您可以看到消息: http://www.techytalk.info/wordpress/quick-chat/


总结一下这个问题:这正常吗? (我在使用彗星的其他网站上没有看到这个问题) - 如果没有 - 我应该在哪里寻找问题,客户端还是服务器端? Here 他们说在这种情况下根本不会发送请求,但事实并非如此,我的脚本正在运行,我无法聊天(这是一个聊天脚本)

【问题讨论】:

  • 不太清楚你的问题或疑问是什么。
  • 也许 Expires: 标头导致页面被解释为“过期”并且没有得到处理?可以尝试将到期日期更改为当前时间+3秒之类的
  • 试图这样做,但它显示相同
  • 您提供的链接中的哪个位置显示了此消息?没看到

标签: php ajax google-chrome-devtools comet long-polling


【解决方案1】:

如果您忘记在跨域调用中执行 CORS 标头,也会出现此问题。

 header("Access-Control-Allow-Origin: *");

【讨论】:

    【解决方案2】:

    这在 chrome 中是完全正常的(截至最近)。有一个讨论 here 他们讨论了更改,主要是在待处理的请求上,它错误地显示了某些标头,所以现在他们显示警告说这些是临时标头。

    来自讨论:

    网络面板:添加有关临时请求标头的警告。 (之前:在开发者工具中,未决请求的请求标头不正确)

    我不知道修复程序实际上是什么时候发布的,或者你是否一直打开 Chrome,所以它有一段时间没有更新 - 但几乎可以肯定这不是你做的 - 只是 Chrome 现在是如何工作的。

    【讨论】:

      【解决方案3】:

      在我的情况下,是因为查询返回了几个结果,这些结果重写了框架 codeigniter 中的会话变量。它在 jQuery 的请求 AJAX 中。

      已解决删除所有重复的结果。

      【讨论】:

      • 我也在使用 codeigniter 框架并遇到同样的问题。请您详细说明您的答案。
      【解决方案4】:

      您的问题可能是在 ob_start() 函数之后出现的 header()。尝试在启动缓冲区之前放置 header(),如下所示:

      header("Content-Type: application/json");
      header("Cache-Control: no-cache, must-revalidate");
      header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
      ob_start();
      

      【讨论】:

      • 对不起,这不起作用。但是你能解释一下你的答案吗?我的意思是在 ob_start 之后包含标题是错误的吗?
      • @CBeTJlu4ok 将标头放在 ob_start 之后(如果您使用 ob_start 的话)将帮助您确保在标头之前没有任何输出。如果您在标头之前向输出流回显/打印/任何其他内容,则会导致错误。
      猜你喜欢
      • 2014-03-05
      • 2014-04-01
      • 2014-02-06
      • 2019-11-08
      • 2015-06-03
      • 1970-01-01
      • 2014-02-18
      • 2017-02-19
      • 1970-01-01
      相关资源
      最近更新 更多