Google chrome HTTP POST负载在Chrome调试器中不可见?
我已经结帐离开了。但是,我的调试器如下所示 失败例子 没有表单数据,没有原始内容 原始示例(*虽然路径与屏幕截图不同,但两者都无法读取post数据) 注:(6) 成功范例 我发现了它们之间的差异(通过区分标题内容) 原始示例(*虽然路径与屏幕截图不同,但两者都无法读取post数据) 注:(6) 两个示例之间的标题差异Google chrome HTTP POST负载在Chrome调试器中不可见?,google-chrome,post,http-post,google-chrome-devtools,Google Chrome,Post,Http Post,Google Chrome Devtools,我已经结帐离开了。但是,我的调试器如下所示 失败例子 没有表单数据,没有原始内容 原始示例(*虽然路径与屏幕截图不同,但两者都无法读取post数据) 注:(6) 成功范例 我发现了它们之间的差异(通过区分标题内容) 原始示例(*虽然路径与屏幕截图不同,但两者都无法读取post数据) 注:(6) 两个示例之间的标题差异 成功的一个正在使用,而失败的一个正在使用+browserify。但是,我仍在寻找一种方法来检查这是否是一个问题(未测试) 缺少X-request-With:XMLHttpR
- 成功的一个正在使用,而失败的一个正在使用+browserify。但是,我仍在寻找一种方法来检查这是否是一个问题(未测试)
- 缺少
。但是,将此标头添加回请求并不能解决此问题(已测试)X-request-With:XMLHttpRequest
- 大写字母标题与小写字母标题字段(
和内容类型
。但是,这种差异不是我在中尝试的问题的根本原因(已测试)内容类型
vsAccept
(未测试)Accept
content type
中的第一个c
是小写字母
注:(1)
我试过的
我在Firefox上试用过firebug。它可以显示我的负载。但是,它无法解析来自服务器的响应:'(
由于web服务器运行的是HTTPS协议,我无法通过wireshark捕获数据包。对调试POST请求有何建议?谢谢
通过命令行链接到关于调试HTTP(s)请求的链接。注意:(3)
我用的包装纸
我有一个承诺电话包装。下面是一个片段显示我使用的选项
/**
* 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) 我已经验证了字母
不会影响chrome调试器。下面是。我尝试用字母c
模拟c
的相同请求。我仍然可以在调试器中检查表单数据XMLHttpRequest
- (2) 链接到完整的源代码
- (3) 指向关于测试HTTP(s)请求的脚本的链接
- (4) 重新设置问题的可读性
- (5) 示例在代码检查后未使用相同的绑定
- (6) 添加原始标题示例
- (7) 添加一个比较会话
httpd
),您可以制作一个小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
我刚刚注意到,如果您在Chrome调试器中的过滤器中选择“Doc”(在All、Xhr、Css、JS…旁边),您将无法看到POST数据。如果您选择“All”,则会显示.虽然这不是原始问题的答案,但我的替代方案是将原始实现替换为表单数据、es6 promise和同构获取 所有软件包都可以从npm下载
它工作得很好。如果您的应用程序返回302状态代码,并且Chrome Devtools中没有有效负载数据,则可能是错误的 如果您正在开发或这是一个不会破坏任何内容的URL,一个快速、非常实用的解决方法是修改服务器端代码以发送200,例如在PHP中,您可以添加:
die(“过早退出-发送200”);
它会发出一个200状态码。这可以解决“302错误”——直到它被修复
p、 根据下面的@leo hendry,截至2017年12月,Canary已经有了修复程序,但是如果你没有其他理由运行Canary,那么并排运行另一个浏览器是不值得的,因为主线版本应该很快就会发布。在所有平台上,Chrome v61和v62都有一个回归错误,导致了这种行为se(除其他外)是302。这在v63 stable中得到了修复,该版本于2017年12月6日发布到所有桌面平台 自动更新是分阶段进行的,但转到“帮助”/“关于Google Chrome”将强制它下载更新,并给你一个重新启动的按钮。有时需要关闭所有Chrome进程并手动重新启动以获得更新 (现已关闭)错误报告为。发布公告为
显然,这不是2015年原始海报问题的原因,但搜索该问题让我走到了这里。还要注意,这不仅仅是OS X问题。如果这是一个bug,它在Mac和Windows上的表现可能会有所不同 下面的屏幕截图来自Windows上的Chrome63。您可以按预期看到请求负载部分 下面是我在Mac上运行的Chrome 65 Beta上看到的内容。请注意,请求负载部分缺失
我是否正确地假设错误没有被修复,或者我应该检查其他东西?我可能在Chrome控制台(Chrome 69)上遇到了同样的问题 formdata和payload选项卡均未显示。 在我的场景中,我将enctype为“multipart/formdata”的表单发布到iframe(通过https将图像文件提交到同一来源)。它可以按预期工作,但我不知道如何在chrome中正确调试数据,因为它根本没有显示。我可以在PHP中转储数据,但这是不必要的,非常复杂,完全没有使用控制台的意义。我已经通读了上面建议的解决方案,但我没有设法解决这个问题。(响应代码是200 btw,而不是302)
我有另一个问题,当我的POST参数丢失时,甚至在后端和Chrome标题中,都是由于代码中的一个非常简单的错误 我只是错误地将params对象声明为普通数组:
var params = [];
而不是:
var params = {};
然后分配给它参数,结果是,我没有得到错误,但它不起作用:
params['param1'] = 'param1';
params['param2'] = 'param2';
$.post(url, params, function(data) {...
通过这种方式,数据得到了更新
var params = [];
var params = {};
params['param1'] = 'param1';
params['param2'] = 'param2';
$.post(url, params, function(data) {...