从HTML页面启动CORS请求

时间:2018-04-05 14:38:47

标签: javascript html5 cors

所以我一直在尝试使用JavaScript为客户端实现CORS。我遇到了一个奇怪的问题,我根本不明白。请保留我私密的服务器名称,请原谅我。

因此,如果我将代码作为脚本运行到浏览器中并观察控制台(在firefox和chrome上测试),它就能工作。但是,一旦我将代码合并到用户驱动的按钮中,它就不会发出请求。在firefox中,我可以看到连接不安全,因此它不会发送它。

所以这里只是使用javascript代码的例子:

        for(int i=0; i<fileslist.length; i++){  
          String file_name = fileslist[i].getName()
          String file_timestamp = fileslist[i].getTimestamp().getTime()
          return '|' + file_name+ '|' + '/' +file_name+'|' + '{' +file_timestamp+ '}' + '\n'      
         }     
        ftpClient.disconnect()
      }

这是使用javascript按钮的示例

  
<script language="javascript">
var request = new XMLHttpRequest();

request.open('POST', 'https://api.somewhere.com');

request.setRequestHeader('Content-Type', 'application/json');
request.setRequestHeader('Authorization', 'Basic 123456ABCDE');
request.setRequestHeader('Access-Control-Allow-Origin', 'https://api.somewhere.com');

request.onreadystatechange = function () {
  if (this.readyState === 4) {
    console.log('Status:', this.status);
    console.log('Headers:', this.getAllResponseHeaders());
    console.log('Body:', this.responseText);
  }
};

var body = {
  'testBody': "somedata"
};

request.send(JSON.stringify(body));

</script>

2 个答案:

答案 0 :(得分:1)

'Access-Control-Allow-Origin'不是请求标头,而是响应标头。 如果原点未更改或删除此标题,则无法执行任何操作。

也许其余的代码都没问题,请查看Chrome浏览器的日志,例如,如果存在授权问题,它会显示“警告标记”。

答案 1 :(得分:0)

  

在firefox中,我可以看到连接不安全,因此无法发送。

如果由于您正在混合HTTP和HTTPS而拒绝发送请求,那么您无法使用CORS修复此问题。您需要匹配您的安全级别。

旁白:

  

从HTML页面发起CORS请求

客户端上的CORS几乎完全由浏览器透明处理。您没有做任何特殊的事情来发送CORS请求。

request.setRequestHeader('Access-Control-Allow-Origin', 'https://api.somewhere.com');

这是一个响应标头,而不是请求标头,它在请求中没有位置。