form提交默认content-type是multipart/form-data

<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>native-formdata2</title>
</head>
<body>
  <form name="test">
      <p>名称: <input type="text" autocomplete="off" name="CustomerName" style="width: 300px" /></p>
      <p>电话: <input type="text" autocomplete="off" name="CustomerTel" style="width: 300px" /></p>
      <p><input id="btn" type="submit" value="提交" /></p>
  </form>
  <script>
    var form = document.querySelector('form');
    var btn = document.querySelector('input[type="submit"]');

    // 注意这里是对form绑定submit事件,而不是submit按钮
    // 如果用click事件,则应该是绑定在submit按钮上的
    form.addEventListener('submit', function(e){
      
      var data = new FormData(form);
      var xhr = new XMLHttpRequest();
      xhr.open('post', 'http://10.10.10.10:3000');
      xhr.send(data);
      e.preventDefault();
    })
  </script>
</body>
</html>

上面是我自己写的案例,简单说明一下'http://10.10.10.10:3000'服务器地址是我自己杜撰的,本来写这个案例是想验证form的post请求默认content-type是application/x-www-form-urlencoded,但是我运行上面的代码为什么默认是multipart/form-data

下面是我输入框都输入12时发送请求的头部信息

Request URL:http://10.10.10.10:3000/
Referrer Policy:no-referrer-when-downgrade

Request Headers

Provisional headers are shown
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryxzu3u4M23GW3UlGC
Origin:null
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36

Request Payload

------WebKitFormBoundaryxzu3u4M23GW3UlGC
Content-Disposition: form-data; name="CustomerName"

12
------WebKitFormBoundaryxzu3u4M23GW3UlGC
Content-Disposition: form-data; name="CustomerTel"

12
------WebKitFormBoundaryxzu3u4M23GW3UlGC--
阅读 7.8k
1 个回答

这很正常,这是由于你提交的是FormData对象,不设置头的话XMLHttpRequest 会调用FormData接口,默认将你的请求头设置为multipart/form-data,相当于form表单提交设置form设置enctype="multipart/form-data",而表单默认post 提交是enctype="application/x-www-form-urlencoded",这两个都是表单的MIME编码

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题