HTTP POST Payload im Chrome Debugger nicht sichtbar?

71

Ich habe dies und das überprüft . Mein Debugger sieht jedoch wie folgt aus.

Fehlerbeispiel

Keine Formulardaten, kein Rohinhalt.

Keine Formulardaten, kein Rohinhalt

Rohbeispiel (* Obwohl sich der Pfad von der Bildschirmaufnahme unterscheidet, können beide keine Post-Daten lesen.)

POST https://192.168.0.7/cgi-bin/icul/;stok=554652ca111799826a1fbdafba9d3ac1/remote_command HTTP/1.1
Host: 192.168.0.7
Connection: keep-alive
Content-Length: 419
accept: application/json, text/javascript, */*; q=0.01
Origin: https://192.168.0.7
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36
content-type: application/x-www-form-urlencoded; charset=UTF-8
Referer: https://192.168.0.7/cgi-bin/icul/;stok=554652ca111799826a1fbdafba9d3ac1/smartmomentl/access-point/network
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8,zh-TW;q=0.6,zh;q=0.4
Cookie: sysauth=f15eff5e9ebb8f152e163f8bc00505c6

command=import&args=%7B%22--json%22%3Atrue%2C%22--force%22%3Atrue%2C%22--mocks%22%3A%22%7B%5C%22DEL%5C%22%3A%7B%7D%2C%5C%22SET%5C%22%3A%7B%5C%22dhcp%5C%22%3A%7B%5C%22lan%5C%22%3A%7B%5C%22.section%5C%22%3A%5C%22dhcp%5C%22%2C%5C%22interface%5C%22%3A%5C%22lan%5C%22%2C%5C%22ignore%5C%22%3A%5C%220%5C%22%2C%5C%22leasetime%5C%22%3A%5C%2212h%5C%22%2C%5C%22range%5C%22%3A%5C%22172.16.0.100-172.16.0.200%5C%22%7D%7D%7D%7D%22%7D

HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Status: 200 OK
Content-Type: text/html; charset=utf-8
Cache-Control: no-cache
Expires: 0
Transfer-Encoding: chunked
Date: Thu, 01 Jan 1970 00:09:27 GMT
Server: lighttpd/1.4.30

31
{ "ctx": "No such command", "exitStatus": false }
0

HINWEIS: (6)

Erfolgreiches Beispiel

Einige von ihnen können arbeiten

Unterschiede zwischen ihnen habe ich entdeckt (durch Differenzieren des Header-Inhalts)

Rohbeispiel (* Obwohl sich der Pfad von der Bildschirmaufnahme unterscheidet, können beide keine Post-Daten lesen.)

POST https://192.168.0.7/cgi-bin/icul/;stok=92dea2b939b9fceb44ac84ac859de7f4/;stok=92dea2b939b9fceb44ac84ac859de7f4/remote_command HTTP/1.1
Host: 192.168.0.7
Connection: keep-alive
Content-Length: 53
Accept: application/json, text/javascript, */*; q=0.01
Origin: https://192.168.0.7
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: https://192.168.0.7/cgi-bin/icul/;stok=92dea2b939b9fceb44ac84ac859de7f4/remote_command/command_reboot
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8,zh-TW;q=0.6,zh;q=0.4
Cookie: sysauth=683308794904e0bedaaead33acb15c7e

command=command_reboot&args=%7B%22--json%22%3Atrue%7D

HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Status: 200 OK
Content-Type: text/html; charset=utf-8
Cache-Control: no-cache
Expires: 0
Transfer-Encoding: chunked
Date: Thu, 01 Jan 1970 00:02:46 GMT
Server: lighttpd/1.4.30

34
{ "ctx": "\u0022success\u0022", "exitStatus": true }
0

HINWEIS: (6)

Header Unterschied zwischen 2 Beispielen

  • Erfolgreich ist die Verwendung der JQuery-Bindung, während Fehler bei der Verwendung von HTTPS von nodejs + browserify auftritt. Ich finde jedoch immer noch einen Weg, um zu überprüfen, ob dies ein Problem ist oder nicht (nicht getestet)

  • Vermisst X-Requested-With: XMLHttpRequest. Das Hinzufügen dieses Headers zur Anforderung behebt dieses Problem jedoch nicht (getestet)

  • Großbuchstabe vs Feld für kleinere Buchstabenüberschriften (

    • content-typeund Content-type. Dieser Unterschied ist jedoch nicht die Hauptursache für mein Problem, wie es hier in der Geige versucht wurde (getestet)

    • Acceptvs accept(nicht getestet)

HINWEIS: (5) (7)

Trotzdem bin ich mir nicht sicher, warum der erste cin content-typeKleinbuchstaben ist.

ANMERKUNG 1)

Was ich versucht habe

Ich habe Firefox mit Firebug ausprobiert. Es kann meine Nutzlast anzeigen. Die Antwort vom Server kann jedoch nicht analysiert werden: '(

Da der Webserver im HTTPS-Protokoll ausgeführt wird, kann ich keine Pakete per Wireshark erfassen. Irgendwelche Vorschläge zum Debuggen von POST-Anfragen? Vielen Dank.

Link zu einer Übersicht über das Debuggen von HTTP-Anforderungen über die Befehlszeile. NOTIZ 3)

Wrapper, den ich benutze

Ich habe diese Methode von nodejs mit einem Versprechen aufgerufen . Unten ist ein Ausschnitt, der eine Option zeigt, die ich verwendet habe.

/**
 * Wraps HTTPS module from nodejs with Promise
 * @module common/http_request
 */

var createRequestSetting = function (host, path, data, cookies) {
    return {
        method: 'POST',
        port:443,
        host: host,
        path: path,
        headers: {
            Accept: 'application/json, text/javascript, */*; q=0.01',
            'Content-Type':
                'application/x-www-form-urlencoded; charset=UTF-8',
            'Content-Length': Buffer.byteLength(data),
            'Cookie': cookies,
        },
        rejectUnauthorized: false,
    };
};

Vollständige Quelle hier

ANMERKUNG 2)

Aktualisieren

  • (1) Ich habe überprüft, dass der Buchstabe ckeinen Einfluss auf den Chrome-Debugger hat. Hier ist die Geige . Ich habe versucht, dieselbe Anfrage XMLHttpRequestmit einem Brief nachzuahmen c. Ich kann weiterhin Formulardaten im Debugger überprüfen.
  • (2) Link zum vollständigen Quellcode
  • (3) Link zu einem Kern von mir über Skripte zum Testen von HTTP (s) -Anfragen
  • (4) Formatieren Sie die Frage zur Lesbarkeit neu
  • (5) Beispiele verwenden nach der Codeüberprüfung nicht dieselbe Bindung
  • (6) Fügen Sie ein Beispiel für einen Rohheader hinzu
  • (7) Fügen Sie eine Vergleichssitzung hinzu
Mond Wan
quelle
Auch dies ist nur ein Teil des Codes. Es sollte http.requestirgendwo einen geben? Können Sie den Rest des Codes anzeigen?
geert3
Siehe stackoverflow.com/questions/6158933/... für ein komplettes Beispiel
geert3
@ geert3 Danke. Für den Brief ckönnen Sie sich den Screenshot des Anforderungsheaders ansehen. content-typestattContent-type
Mond Wan
Für die separate blockFrage gibt es wirklich keine solche block. Der Screenshot enthält alles in HeadersTab
Mond Wan
Für Quellcode hier
fummeln

Antworten:

131

In Chrome v61 und v62 gab es auf allen Plattformen einen Regressionsfehler, der dieses Verhalten verursachte, wenn die Antwort (unter anderem) 302 war. Dieser Fehler wurde in v63stable behoben, der am 6. Dezember 2017 für alle Desktop-Plattformen veröffentlicht wurde.

Automatische Updates werden schrittweise durchgeführt. Wenn Sie jedoch zu "Hilfe" / "Über Google Chrome" gehen, wird das Update erzwungen und Sie erhalten eine Schaltfläche zum Neustart. Gelegentlich ist es erforderlich, den gesamten Chrome-Prozess abzubrechen und manuell neu zu starten, um das Update zu erhalten.

Der (jetzt geschlossene) Fehlerbericht ist hier . Die Release-Ankündigung ist hier .

Dies ist natürlich nicht die Ursache für die Ausgabe des Originalplakats im Jahr 2015, aber die Suche nach der Ausgabe hat mich hierher geführt. Beachten Sie auch, dass dies nicht nur ein OS X-Problem ist.

Leo Hendry
quelle
4
Ich kann dies bestätigen, es passiert auf Ubuntu 16.04.1 und Chrome 61
Alfredo Osorio
2
Windows-Benutzer. Chrome 61 und Chrome Beta 62. Beide haben diesen Fehler. Zuerst habe ich mit dem Play-Server über eine Anmeldeanforderung kommuniziert und dachte, es gibt eine "neue Methode", die sie erfunden haben und die nicht in den Chrome Dev Tools angezeigt wird, die sich jedoch aufgrund der Rezession von Chrome herausstellt.
Cihad Turhan
6
Dies ist immer noch ein Problem mit Windows und Version 62
NeutronCode
Ich bin mir nicht sicher, warum die Verwendung eines älteren Browsers "sicher" ist.
Charlie Dalsass
2
Ich verwende Chrome 65 Beta auf einem Mac. Ich sehe eine Antwort mit dem Status 200 und sehe keinen Abschnitt mit den Nutzdaten für Anforderungen. Ich habe dieselbe Seite mit Chrome 63 unter Windows angezeigt und sehe die Nutzdaten. Ist dieses Problem wirklich behoben?
Chad Juliano
17

Wenn Ihre Anwendung einen 302-Statuscode und keine Nutzdaten in Chrome Devtools zurückgibt, ist dies möglicherweise der Fall dieser Chrome-Fehler auf .

Wenn Sie sich in der Entwicklung befinden oder dies eine URL ist, die nichts kaputt macht, besteht eine schnelle, sehr praktische Problemumgehung darin, Ihren serverseitigen Code so zu ändern, dass eine 200 gesendet wird, beispielsweise in PHP, das Sie möglicherweise hinzufügen:

die("premature exit - send a 200");

das sendet einen 200 Statuscode. Dies umgeht den "302-Fehler" - bis er behoben ist.

ps Per @ leo-hendry unten, Canary hat das Update ab Dezember 2017, aber wenn Sie keinen anderen Grund haben, Canary auszuführen, lohnt es sich nicht, einen anderen Browser nebeneinander auszuführen, da dies die Hauptversion ist sollte bald herauskommen.

Charlie Dalsass
quelle
In der Tat ein Fehler! Bei der Rückgabe von 302 und einem Speicherort werden die Formulardaten nicht angezeigt (getestet mit Version 61.0.3163.100)
conceptdeluxe
1
Nein, es gibt eine 200 zurück. Aber trotzdem habe ich es durch eine Alternative unten gelöst. Vielen Dank
Mond Wan
gilt auch für Windows-Benutzer.
AKCD
Dank @AKCD wurde die Antwort aktualisiert, um alle Plattformen einzuschließen.
Charlie Dalsass
5

Wenn dies ein Fehler ist, verhält es sich unter Mac und Windows möglicherweise anders.

Der folgende Screenshot stammt aus Chrome 63 unter Windows. Sie können den Abschnitt mit den Anforderungsnutzdaten wie erwartet anzeigen.

Gutes Beispiel

Folgendes sehe ich in Chrome 65 Beta, das auf einem Mac ausgeführt wird. Beachten Sie, dass der Abschnitt mit den Anforderungsnutzdaten fehlt.

Schlechtes Beispiel

Kann ich zu Recht davon ausgehen, dass der Fehler nicht behoben ist, oder sollte ich noch etwas überprüfen?

Chad Juliano
quelle
Windows; Google Chrome 66.0.3359.139. <form enctype = "multipart / form-data"> beim Hochladen einer Datei. In Chrome Debugger-> Netzwerk werden nur Allgemein, Antwortheader, Anforderungsheader und keine Formulardaten angezeigt. In Firefox kann ich die gesamte POST-Rohanforderungsnutzlast mit http-Anforderungsheadern + ALLLLLLL-Daten mit hochgeladener Datei sehen.
Vlakov
Ich kann es in den neuesten Versionen von Chrome (auf Mac) nicht sehen. Aber letzte Woche konnte ich! Ich weiß nicht, was los ist.
Geoidesic
3

Ich habe gerade bemerkt, dass Sie keine POST-Daten sehen können, wenn Sie "Doc" aus den Filtern im Chrome-Debugger auswählen (neben "Alle", "Xhr", "CSS", "JS"). Es wird angezeigt, wenn Sie "Alle" auswählen.

geert3
quelle
1
Vielen Dank. Aber ich kann POST-Daten immer noch nicht lesen, egal welchen Filter ich verwendet habe: '(
Mond Wan
6
POST-Anfragen werden im Filter "Alle" oder "Andere" angezeigt. Ich denke, Chrome zeigt Formulardaten nur an, wenn der Antwortstatuscode 200 OK lautet. Wenn es sich um etwas anderes handelt (z. B. 302 Gefunden), werden diese nicht angezeigt.
Aeroson
@aeroson wirklich warten? Warum? Was kann ich tun, um das zu umgehen?
Infogulch
2
@infogulch es ist eigentlich ein Fehler in Chrome, wie es scheint: bugs.chromium.org/p/chromium/issues/…
Aeroson
2

Ich habe wahrscheinlich das gleiche Problem mit der Chrome-Konsole (Chrome 69)

Weder die Formulardaten noch die Registerkarte Payload werden angezeigt. In meinem Szenario poste ich ein Formular mit dem Enctype "multipart / form-data" an einen Iframe (Übermittlung einer Bilddatei über https an denselben Ursprung). Es funktioniert wie erwartet, aber ich weiß nicht, wie ich die Daten in Chrome richtig debuggen soll, wenn sie überhaupt nicht angezeigt werden. Ich könnte die Daten in PHP sichern, aber das ist unnötig kompliziert und es fehlt völlig der Sinn der Verwendung der Konsole. Ich habe die oben vorgeschlagenen Lösungen gelesen, aber es ist mir nicht gelungen, dieses Problem zu beseitigen. (Der Antwortcode ist übrigens 200, nicht 302).

Formdaten und Nutzdaten fehlen

$_POST = Array
(
    [xajax] => 1
    [app] => products
    [cmd] => upload
    [cat] => 575
)

$_FILES = Array
(
    [upfile] => Array
    (
        [name] => Aufkleber_Trollface.jpg
        [type] => image/jpeg
        [tmp_name] => /tmp/phpHwYkKD
        [error] => 0
        [size] => 25692
    )
)
Chris S.
quelle
3
Ja, hier auch - der verschwundene POST-Fehler von DevTools ist in Chrome 69 zurückgekehrt !!
Awerealis
1
Wahrscheinlich wurde es behoben, als ich gerade anfing, dafür Abstimmungen zu bekommen. Oooh, Stackoverflow ... seufz
Chris S.
@ ChrisS. Haben Sie es nach dem Schreiben Ihrer Antwort oder Ihres Kommentars erneut getestet? Weil ich immer noch auf das gleiche Problem mit aktuellen Versionen von Opera stoße, die auf etwas aktuellen Versionen von Chromium basieren. Ich sehe keinen POST-Text, obwohl der Antwortcode 200 ist und es sich um ein einfaches HTML-Formular ohne JS oder ausgefallene Dinge handelt.
Thorsten Schöning
0

Ihr Code sieht in Ordnung aus. Haben Sie die Chrome-Konsole auf Fehler überprüft? Wenn Sie Zugriff auf den Server haben (und davon ausgehen, dass er httpdunter Linux ausgeführt wird), können Sie ein kleines CGI-Shell-Skript erstellen, um die Header und Daten an diesem Ende zu überprüfen:

#!/bin/bash

echo "Content-type: text/plain"
echo ""    
echo "Hello World. These are my environment variables:"
/usr/bin/env
if [ "$REQUEST_METHOD" = "POST" ]; then
    if [ "$CONTENT_LENGTH" -gt 0 ]; then
        echo "And this is my POST data:"
        /bin/cat
    fi
fi
exit 0
geert3
quelle
Keine Fehler gefunden. Ich fand jedoch, dass Chrom zeigen kann, Form dataob Content-typees Cstatt ist c. (gleiche Codes, aber unterschiedlich c: '()
Mond Wan
Übrigens, danke für das Drehbuch. Ich glaube jedoch, dass mein Problem nicht von der Serverseite stammt, da Firefoxich zeigen kann, dass meine Eingabe korrekt ist und Chromemeine Ausgabe vom Server korrekt ist.
Mond Wan
Im obigen Kommentar sagen Sie, dass es mit funktioniert C, nicht mit c. In der ursprünglichen Frage (Update) sagen Sie I have verified the letter c does not affect chrome debugger. Ich bin verwirrt. - Ein anderer Gedanke: Perpahs spielt eine Ihrer Chrome-Erweiterungen / Plugins herum? Versuchen Sie, alle Erweiterungen zu deaktivieren.
Geert3
Ich habe die Frage aktualisiert. es erklärt, was diese 2 Aussagen bedeuten. Vielen Dank
Mond Wan
Außerdem habe ich versucht, alle Erweiterungen zu deaktivieren, die ich auf der Erweiterungsseite gesehen habe. Kein Glück. Es behebt mein Problem nicht
Mond Wan
-3

Obwohl dies nicht die Antwort auf die ursprüngliche Frage ist, ersetzt meine Alternative die ursprüngliche Implementierung durch die Kombination aus Formulardaten , es6-Versprechen und isomorphem Abruf zu

Alle Pakete können von npm heruntergeladen werden.

Es funktioniert charmant.

Mond Wan
quelle