HTTP POST payload not visible in Chrome debugger?
我已经检查了这个和那个。但是,我的调试器如下所示。
失败的例子
。
没有表单数据,没有原始内容
原始示例(*虽然路径与屏幕捕获不同,但它们都无法读取发布数据)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 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)
成功的例子
我发现它们之间的差异(通过区分标题内容)
原始示例(*虽然路径与屏幕捕获不同,但它们都无法读取发布数据)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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)
两个例子之间的标题差异
-
成功的一个是使用Jquery绑定,而失败一个使用来自nodejs + browserify的HTTPS。但是,我仍然在寻找一种方法来检查这是否是一个问题(未经测试)
-
缺少
X-Requested-With: XMLHttpRequest 。但是,将此标头添加回请求并不能解决此问题(已测试) -
Capital header vs Smaller letter header field(
-
content-type 和content-type 。然而,这种差异并不是我在这里尝试过的问题的根本原因(经过测试) -
Accept vsAccept (未测试)
-
注:(5)(7)
不过,我不知道为什么
注意:(1)
我试过了什么
我用firebug尝试过Firefox。它能够显示我的有效载荷。但是,它无法解析来自服务器的响应:'(
由于Web服务器使用HTTPS协议运行,因此无法通过wireshark捕获数据包。有关调试POST请求的任何建议吗?感谢。 S>
链接到通过命令行调试HTTP(s)请求的要点。注意:(3)
我正在使用的包装
我已经使用promise调用从nodejs包装此方法。下面是一个片段显示我使用过的选项。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /** * 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调试器。这是小提琴。我试图用字母c 的XMLHttpRequest 模仿相同的请求。我仍然可以在调试器中检查表单数据。 - (2)链接到完整的源代码
- (3)链接到我的关于测试HTTP(s)请求的脚本的要点
- (4)重新格式化问题以便于阅读
- (5)代码检查后,示例未使用相同的绑定
- (6)添加原始标题示例
- (7)添加比较会话
Chrome v61和v62在所有平台上都存在回归错误,当响应(以及其他)为302时,导致此行为导致此行为。这已在v63 stable中修复,该版本于2017年12月6日发布到所有桌面平台。
自动更新是分阶段的,但转到"帮助"/"关于谷歌浏览器"将强制它下载更新并给你一个重启按钮。有时,有必要终止所有Chrome进程并手动重新启动以获取更新。
(现已关闭)错误报告在这里。发布公告就在这里。
显然,这不是2015年原始海报问题的原因,但搜索问题引发了我的兴趣。另请注意,这不仅仅是OS X问题。
如果您的应用程序返回302状态代码,并且Chrome Devtools中没有有效负载数据,那么您可能会遇到此Chrome错误。
如果您正在开发中,或者这是一个不会破坏任何内容的URL,那么快速,非常实用的解决方法是修改服务器端代码以发送200,例如在PHP中您可以添加:
它发出200状态代码。这适用于"302 bug" - 直到它被修复。
附: Per @ leo-hendry下面,Canary确实有截至2017年12月的修复,但是如果你没有其他理由来运行Canary,那么并行运行另一个浏览器将不值得,因为主线版应该很快就会出来。
我刚刚注意到,如果您从Chrome调试器中的过滤器中选择"Doc"(在All,Xhr,Css,JS ...旁边),则无法看到POST数据。如果您选择"全部",它会显示。
如果这是一个错误,它可能在Mac与Windows上表现不同。
以下屏幕截图来自Windows上的Chrome 63。您可以按预期查看请求有效内容部分。
以下是我在Mac上运行的Chrome 65 Beta上看到的内容。请注意,请求有效负载部分丢失。
我是否正确地假设错误没有修复或者我应该检查其他什么?
我可能在Chrome控制台(Chrome 69)遇到了同样的问题
formdata和有效负载选项卡都没有显示。
在我的场景中,我将带有enctype"multipart / form-data"的表单发布到iframe(通过https将图像文件提交到同一个源)。它按预期工作,但我不知道如何在Chrome完全没有显示时正确调试数据。我可以在PHP中转储数据,但这是不必要的复杂,完全没有使用控制台。我已经阅读了上面提出的建议解决方案,但我没有设法摆脱这个问题。 (响应代码是200 btw,而不是302)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | $_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 ) ) |
你的代码看起来不错。您是否检查过Chrome控制台是否有错误?
如果您有权访问服务器(假设它在Linux上是
1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/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,es6-promise和isomorphic-fetch的组合替换原始实现。
所有包都可以从npm下载。
它很有魅力。