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

Mon*_*Wan 65 post google-chrome http-post google-chrome-devtools

我已经检查了这个那个.但是,我的调试器如下所示.

失败的例子

没有表单数据,没有原始内容.

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

原始示例(*虽然路径与屏幕捕获不同,但它们都无法读取发布数据)

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
Run Code Online (Sandbox Code Playgroud)

注意:(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
Run Code Online (Sandbox Code Playgroud)

注意:(6)

两个例子之间的标题差异

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

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

  • Capital header vs Smaller letter header field(

    • content-typeContent-type.然而,这种差异并不是我在这里尝试过的问题的根本原因(经过测试)

    • Acceptvs accept(未测试)

注:(5)(7)

尽管如此,为什么第一个我不知道ccontent-type是在小字母大小写.

注意:(1)

我试过了什么

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

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

链接到通过命令行调试HTTP(s)请求的要点.注意:(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,
    };
};
Run Code Online (Sandbox Code Playgroud)

完全来源于此

笔记2)

更新

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

Leo*_*dry 129

Chrome v61和v62在所有平台上都存在回归错误,当响应(以及其他)为302时,导致此行为导致此行为.这已在v63 stable中修复,该版本于2017年12月6日发布到所有桌面平台.

自动更新是分阶段的,但转到"帮助"/"关于谷歌浏览器"将强制它下载更新并给你一个重启按钮.有时,有必要终止所有Chrome进程并手动重新启动以获取更新.

(现已关闭)错误报告在这里.发布公告就在这里.

显然,这不是2015年原始海报问题的原因,但搜索问题引发了我的兴趣.另请注意,这不仅仅是OS X问题.

  • 这仍然是Windows和版本62的问题 (6认同)
  • 我可以证实这一点,它发生在Ubuntu 16.04.1和Chrome 61上 (4认同)
  • Windows用户.Chrome 61和Chrome Beta 62.两者都有此错误.起初我正在与Play服务器进行通信以获取登录请求,我认为他们发明了一种"新方法",这种方法并没有出现在Chrome开发工具上,但由于Chrome的衰退,它已经证明了这一点. (2认同)
  • 我在Mac上使用Chrome 65 Beta。我正在查看状态为200的响应,并且看不到任何请求有效负载部分。我在Windows上使用Chrome 63查看了同一页面,并看到了有效负载。这个问题真的解决了吗? (2认同)

Cha*_*ass 16

如果您的应用程序返回302状态代码,并且Chrome Devtools中没有有效负载数据,那么您可能会遇到此Chrome错误.

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

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

它发出200状态代码.这适用于"302 bug" - 直到它被修复.

PS每@下面LEO-亨德利,加那利确实有修正为2017年12月,但如果你没有一个理由来运行金丝雀,运行另一个浏览器并排方将不值得,作为主线版本应该很快就会出来.


Cha*_*ano 5

如果这是一个错误,它在 Mac 和 Windows 上的行为可能会有所不同。

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

好的例子

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

坏例子

我是否正确地假设错误未修复或者我应该检查其他什么?


gee*_*rt3 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
Run Code Online (Sandbox Code Playgroud)