在Chrome调试器中看不到HTTP POST有效负载?


71

我已签出这个那个。但是,我的调试器如下所示。

失败例子

没有表格数据,没有原始内容

没有表格数据,没有原始内容

原始示例(*尽管路径与屏幕截图不同,但它们都无法读取发布数据)

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

注意:(6)

成功的例子

其中一些人能够工作

我发现了它们之间的差异(通过区分标题内容)

原始示例(*尽管路径与屏幕截图不同,但它们都无法读取发布数据)

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

注意:(6)

2个示例之间的标题差异

  • 成功的一种是使用Jquery绑定,而失败的一种是使用来自nodejs + browserify的HTTPS。但是,我仍在寻找一种方法来检查这是否有问题(未测试)

  • 不见了X-Requested-With: XMLHttpRequest。但是,将此标头添加回请求不能解决此问题(已测试)

  • 大写标题与小写字母标题字段(

    • content-typeContent-type。但是,这种差异并不是我在小提琴中尝试过的问题的根本原因(已测试)

    • Acceptvs accept(未经测试)

注意:(5)(7)

不过,我不知道为什么第一次ccontent-type在小字母大小写。

注意:(1)

我尝试过的

我曾在Firefox上使用firebug尝试过。它能够显示我的有效载荷。但是,它无法解析服务器的响应:'(

由于Web服务器以HTTPS协议运行,因此无法通过Wireshark捕获数据包。对调试POST请求有任何建议吗?谢谢。

链接到有关通过命令行调试HTTP请求的要点。注意:(3)

我正在使用的包装器

我已经用promise调用从nodejs包装了这个方法。以下是显示我已使用的选项的代码段。

/**
 * 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,
    };
};

完整资料在这里

笔记2)

更新资料

  • (1)我已经验证了这封信c不会影响chrome调试器。这是小提琴。我试图XMLHttpRequest用letter模仿相同的请求c。我仍然可以在调试器中检查表单数据。
  • (2)链接到完整的源代码
  • (3)链接到我的关于脚本的要点,以测试HTTP请求
  • (4)重新格式化问题以提高可读性
  • (5)示例在代码审查后没有使用相同的绑定
  • (6)添加原始标题示例
  • (7)添加比较会话

同样,这只是代码的一部分。应该有一个http.request地方?您能否显示其余代码?
geert3

stackoverflow.com/questions/6158933/...为一个完整的例子
geert3

@ geert3谢谢。对于这封信c,您可以看一下请求标头的屏幕截图。content-type而不是Content-type
Mond Wan

这个separate block问题确实没有block。屏幕快照包含Headers选项卡中的所有内容
Mond Wan

要获取源代码,请在此处拨弄
Mond Wan

Answers:


131

在所有平台上,Chrome v61和v62中存在一个回归错误,当响应(除其他外)为302时,会导致此行为。此问题已在v63稳定版中修复,已于2017年12月6日发布到所有台式机平台。

自动更新是分阶段进行的,但是进入“帮助” /“关于Google Chrome浏览器”将强制其下载更新,并为您提供一个重新启动按钮。有时,有必要杀死所有Chrome进程并手动将其重新启动以获取更新。

(现已关闭)错误报告在此处。发布公告在这里

显然,这不是最初的海报发布于2015年的原因,但搜索该问题的原因使我在这里。另请注意,这不仅是OS X的问题。


4
我可以确认这一点,它正在Ubuntu 16.04.1和Chrome 61上发生
Alfredo Osorio

2
Windows用户。Chrome 61和Chrome Beta62。都有此错误。最初,我与Play服务器进行通信以请求登录,并且我认为他们发明了一种“新方法”,虽然该方法未出现在Chrome开发者工具中,但事实证明是由于Chrome的衰退所致。
Cihad Turhan

6
Windows和版本62仍然存在问题
NeutronCode '17

不知道为什么使用较旧的浏览器是“安全的”。
查理·达萨斯

2
我在Mac上使用Chrome 65 Beta。我正在查看状态为200的响应,并且看不到任何请求有效负载部分。我在Windows上使用Chrome 63查看了同一页面,并看到了有效负载。这个问题真的解决了吗?
乍得朱利安诺

17

如果您的应用程序返回302状态代码,而Chrome Devtools中没有有效载荷数据,则可能是您遇到了Chrome错误

如果您正在开发中,或者这是一个不会破坏任何内容的URL,那么一种快速,非常实际的解决方法是修改服务器端代码以发送200,例如,在PHP中,您可以添加:

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

发出200状态代码。这可以解决“ 302错误”-直到得到解决。

ps Per @ leo-hendry,截至2017年12月,Canary确实已修复,但如果您没有其他原因运行Canary,并排运行其他浏览器将不值得,因为主线版本应该很快出来。


确实是个错误!返回302和位置时,表单数据未显示(使用61.0.3163.100版进行了测试)
conceptdeluxe

1
不。它返回200。但是无论如何,我已经在下面的替代方法中解决了它。谢谢
Mond Wan

也适用于Windows用户。
AKCD

感谢@AKCD更新了答案,以包括所有平台。
查理·达萨斯

5

如果是错误,则Mac和Windows上的行为可能会有所不同。

以下屏幕截图来自Windows上的Chrome 63。您可以按预期看到请求有效负载部分。

好的例子

这是我在Mac上运行的Chrome 65 Beta上看到的内容。请注意,缺少请求有效负载部分。

不好的例子

我是否正确地假设该错误未修复,或者还有其他应检查的内容?


视窗; 谷歌浏览器66.0.3359.139。<form enctype =“ multipart / form-data”>以及上传文件。在Chrome调试器->网络中,我只能看到常规,响应标头,请求标头,而看不到任何表单数据。在Firefox中,我可以看到带有HTTP请求标头的完整POST原始请求有效内容+带有上传文件的ALLLLLLL数据。
vlakov

我无法在Chrome(在Mac上)的最新版本中看到它。但是上周我可以!不知道发生了什么事。
geodesic

3

我只是注意到,如果您在Chrome调试器的过滤器中选择“文档”(位于All,Xhr,Css,JS ...旁边),则看不到POST数据。如果选择“全部”,它会显示。


1
谢谢。但是无论我使用什么过滤器,我仍然无法读取POST数据:'(
Mond Wan

6
POST请求显示在“所有”或“其他”过滤器中。我认为Chrome仅在响应状态代码为200 Ok时显示表单数据,如果其他内容(例如302 Found)将不会显示。
aeroson's

@aeroson真的等吗?为什么?我该怎么办才能解决这个问题?
infogulch

2
@infogulch实际上似乎是Chrome中的一个错误:bugs.chromium.org/p/chromium/issues/…–
aeroson

2

Chrome控制台(Chrome 69)可能出现相同的问题

formdata和有效负载选项卡均未显示。在我的场景中,我将带有enctype“ multipart / form-data”的表单过帐到iframe(通过https将图像文件提交到相同的来源)。它按预期工作,但当根本不显示chrome时,我不知道如何正确调试数据。我可以将数据转储到PHP中,但这没有必要太复杂,并且完全失去了使用控制台的意义。我已经通读了上面建议的解决方案,但是并没有摆脱这个问题。(响应代码是200 btw,而不是302)。

Formdata和有效载荷丢失

$_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
    )
)

3
在这里也一样-Chrome 69中已返回DevTools消失的POST错误!
Awerealis

1
可能是因为我刚开始对此投票而被修正。噢,stackoverflow ...感叹
Chris S.19年

@克里斯 写下答案或评论后,您是否再次对其进行了测试?因为我仍然在使用最新版本的Opera(基于Chromium的当前版本)遇到相同的问题。我没有看到任何POST正文,即使响应代码为200,并且它是纯HTML格式,没有任何JS或奇特的东西。
ThorstenSchöning,

0

您的代码看起来还可以。您是否检查了Chrome控制台中的错误?如果您有权访问服务器(并假设它httpd在Linux上),则可以制作一个小的CGI Shell脚本来检查头文件和数据:

#!/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

找不到错误。然而,我发现,铬能够显示Form data是否Content-typeC代替c。(代码相同,但有所不同c:'()
蒙德·蒙

顺便说一句,感谢您的脚本。但是我认为我的问题不是来自服务器端的,因为Firefox可以显示我的输入正确并且Chrome显示我来自服务器的输出正确。
蒙德·蒙(Mond Wan)2015年

在上面的注释中,您说它与一起使用C,而不与一起使用c。在原始问题(更新)中,您说I have verified the letter c does not affect chrome debugger。我很困惑。-另一个想法:perpahs您的chrome扩展程序/插件之一在搞乱吗?尝试禁用所有扩展。
geert3'3

我已经更新了问题。它解释了这两个陈述的含义。谢谢
Mond Wan 2015年

另外,我尝试禁用在扩展页面上看到的所有扩展。没有运气。它不能解决我的问题
蒙德·蒙(Mond Wan)2015年

-3

尽管这不是原始问题的答案,但我的替代方法是用form-dataes6-promiseisomorphic-fetch的组合替换原始实现

所有软件包都可以从npm下载。

它的魅力十足。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.