为什么CORS发布请求,在一种情况下工作但不在另一种情况下工作

时间:2018-05-08 00:16:03

标签: javascript html cors

我尝试将电子邮件添加到mailchimp帐户,但我收集电子邮件后还尝试使用javascript做其他一些事情,这里是我的javascript:

function addEmail(){  
  var request = new XMLHttpRequest();
  request.open('POST', 'https://EXTERNAL_URL', true);
  var data = document.getElementById("mce-EMAIL").value;
  request.send("EMAIL=" + data);
}

我获得了标准的No' Access-Control-Allow-Origin'标头出现在请求的资源上。'错误

但是当我通过HTML格式提交表单时,我没有收到错误,下面是我的HTML:

<form action="https://EXTERNAL_URL" method="POST" id="mc-embedded-subscribe-form" 
name="mc-embedded-subscribe-form">
  <div id="mc_embed_signup_scroll" class="info-title-small">
    <input type="email" name="EMAIL" id="mce-EMAIL">
    <div style="position: absolute; left: -5000px;">
      <input type="text" name="b_77582e128704b86e538075b23_47bb2d7f84" tabindex="-1">
    </div>
    <div class="clear">
      <input type="submit" value="add me" name="subscribe" id="mc-embedded-subscribe">
    </div>
  </div>
</form>

发生了什么?

1 个答案:

答案 0 :(得分:3)

same-origin policy主要关注JavaScript(或其他浏览器端编程语言)读取服务器对客户端请求的响应。您的表单提交不违反同源策略,并且不会被阻止,因为它不会处理服务器响应。

根据MDN

  
      
  • 通常允许跨源写入。示例是链接,重定向和表单提交。某些很少使用的HTTP请求需要预检。

  •   
  • 通常允许跨源嵌入。

  •   
  • 跨域读取通常不允许,但读取访问通常会通过嵌入泄漏。例如,您可以读取嵌入图像的宽度和高度,嵌入脚本的操作或嵌入资源的可用性。

  •