web-dev-qa-db-ja.com

注意:暫定ヘッダーが表示されます

1週間前のように表示されたこのメッセージをデバッグできません。

古いファイルに復元しようとしましたが、これは奇妙で、問題を解決するものは何もありません。

だから:私は2つの長いポーリングリクエストがあります。 (それらの1つをオフにしても役に立ちません)。

たとえば、これはそのうちの1つです。

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;
}

ご覧のとおり、私はcache-controlヘッダーを送信したので、これは問題にはならないはずです ここで説明 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つ以上の要求が互いにキャンセルする場合かもしれませんが-1つ(長いポーリング)を除いて他のすべての要求をオフにしようとしました、そしてこれはそうではありません


メッセージを確認できるように機能する元のスクリプトは次のとおりです。 http://www.techytalk.info/wordpress/quick-chat/


この質問を要約すると、これは正常ですか? (cometが使用されている他のサイトではこの問題は見られません)-そうでない場合は-クライアント側またはサーバー側のどこで問題を探す必要がありますか? ここ そのような場合、リクエストはまったく送信されないと言われていますが、そうではありません。スクリプトは機能していて、チャットできません(これはチャットスクリプトです)

3
CBeTJlu4ok

これはchrome(最近の時点)では完全に正常です)。変更について話し合う議論がありました ここ 本質的に保留中のリクエストでは、特定のヘッダーが正しく表示されていませんでした。そのため、これらは暫定的なヘッダーであるという警告が表示されます。

議論から:

ネットワークパネル:暫定リクエストヘッダーに関する注意を追加します。 (以前:開発者ツールでは、保留中のリクエストのリクエストヘッダーが正しくありません)

修正が実際にいつリリースされたのか、またはChromeを常に開いたままにして、しばらく更新されなかったのかどうかはわかりませんが、ほぼ間違いなく、何もしていません- Chromeが今どのように機能するか。

7
dave

この問題は、クロスドメインコールでCORSヘッダーを実行するのを忘れた場合にも発生する可能性があります。

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

私の場合、クエリがフレームワークcodeigniterのセッション変数を書き換えるいくつかの結果を返すためです。それはjQueryによるリクエストAJAX.

解決されたすべての繰り返された結果を削除しました。

0
fdbazan

問題は、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();
0
Gaurav Joseph