【问题标题】:Chrome not submitting POST request to serverChrome 未向服务器提交 POST 请求
【发布时间】:2019-08-26 17:59:25
【问题描述】:

Chrome 无法通过我们在公司内部使用的各种 PHP 应用程序提交 POST/GET 表单请求时遇到问题。这似乎是从 Chrome 76 开始的。奇怪的是 Firefox 或 IE 不会出现此问题。

提交表单时的预期行为是在等待来自服务器的响应时在 Dev Network 控制台中看到请求。但是在 Chrome 中,请求永远不会在网络控制台中发送或看到。标签中的 Chrome 进度轮永远逆时针旋转。

我检查了服务器上的 Apache 请求日志,但它从来没有收到发送给它的请求,所以我认为它是客户端的东西,即 Chrome。

如果我尝试使用 Postman 手动提交表单,那么它将起作用并发送预期的响应。

我曾尝试使用 JavaScript 提交表单,但我看到了相同的行为。我已经尝试更改表单的 enctype 以及调整元标记标题,但没有任何变化。

标题

<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<meta name="csrf-token" content="xxxx">

表格

<form method="POST" action="https://homestead.test/login">
  <input type="hidden" name="_token" value="xxxx">
  <div class="form-group row">
    <label for="username" class="col-md-4 col-form-label text-md-right">Username</label>
    <div class="col-md-6">
      <input id="username" type="text" class="form-control" name="username" value="" required autofocus>
    </div>
  </div>
  <div class="form-group row">
    <label for="password" class="col-md-4 col-form-label text-md-right">Password</label>
    <div class="col-md-6">
      <input id="password" type="password" class="form-control" name="password" required>
    </div>
  </div>
  <div class="form-group row">
    <div class="col-md-6 offset-md-4">
      <div class="form-check">
        <input class="form-check-input" type="checkbox" name="remember" id="remember" >
        <label class="form-check-label" for="remember">Remember Me</label>
      </div>
    </div>
  </div>

  <div class="form-group row mb-0">
    <div class="col-md-8 offset-md-4">
      <button type="submit" class="btn btn-primary">Login</button>
    </div>
  </div>
</form>

有没有办法在客户端更好地调试表单提交?在发送其他浏览器不执行且失败的 HTTP 请求之前,Chrome 是否会进行一些检查?如果设置错误,有没有办法完全重新加载/重置 Chrome?隐身模式应该在没有任何扩展的情况下加载,并且它的行为相同,所以我不认为它是导致问题的恶意扩展。

【问题讨论】:

    标签: php html forms post


    【解决方案1】:

    您的 php 服务器中,在 您的头文件

    上添加以下行
     header('Access-Control-Allow-Origin: *'); 
    

    应该在您希望接收帖子请求的所有页面中

        header('Access-Control-Allow-Origin: *'); 
        header("Access-Control-Allow-Credentials: true");
        header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
        header('Access-Control-Max-Age: 1000');
        header('Access-Control-Allow-Headers: Content-Type, Content-Range, Content-Disposition, Content-Description');
    

    当您将帖子数据从本地服务器发送到远程服务器时,您需要在远程服务器上启用 CORS - 跨域资源共享

    此代码应该适用于大多数情况,测试并告诉我它是否已解决。

    【讨论】:

    • 设置这些标头并在 Apache 中添加了 mod_headers CORS 配置设置,但仍然没有变化
    • 试试 method="GET" 可能是 post 方法的 chrome 问题
    • 你能检查一下控制台并告诉我它显示给你什么吗?
    • GET 方法也不起作用。当尝试通过 JavaScript 提交表单时,我正在打印到控制台,我看到 $('#loginForm').submit(); 之前和之后的打印语句但请求永远不会被发送。没有错误被打印出来
    • 我想是的。我已更新到版本 76.0.3809.132(64 位)并且问题已经消失
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 2011-09-10
    • 1970-01-01
    • 2016-07-03
    相关资源
    最近更新 更多