2017-07-24 25 views
0

我有以下代码中使用sendBeacon方法发送异步HTTP请求,由于安全问题,任何解决方法,sendBeacon API不能临时工作?

var data = { 
name: 'test', 
uniqueId: Math.random() 
}; 
var blob = new Blob([JSON.stringify(data)], {type : 'application/json'}); 
navigator.sendBeacon('http://example.in/data/post', blob); 

此代码已很长时间工作得很好。目前,由于铬合金https://bugs.chromium.org/p/chromium/issues/detail?id=490015中的安全问题,我们看到错误“'在'导航器'上执行'sendBeacon'失败:sendBeacon()与Blob的类型不是CORS安全列表的MIME类型在实验上是不允许的,详见http://crbug.com/490015

是否有任何解决方法通过使用相同的sendBeacon API修改请求标头来发送JSON数据,直到问题得到解决?对于依赖于此API的网站继续使用,直到做出修复,这将非常有用。有关使用XHR发布数据的建议没有用。

回答

1

的用于sendBeacon的Content-Type头只允许值现在是:

  • 应用程序/ x-WWW窗体-urlencoded
  • 的multipart/form-data的
  • 文本/无格式

我在我们的项目中遇到过类似的问题,最后我以“text/plain; charset = UTF-8'并在服务器端读取json内容的流。

客户:

const blob = new Blob([JSON.stringify(myData)], { type: 'text/plain; charset=UTF-8' }); 
navigator.sendBeacon(appData.ReleaseSessionUrl, blob); 

服务器:

using (var reader = new StreamReader(this.Request.InputStream)) 
{ 
    var jsonData = reader.ReadToEnd(); 
    var sessionData = JsonConvert.DeserializeObject<MyDataType>(jsonData); 
} 

不知道这是否可以帮助你。

https://github.com/GoogleCloudPlatform/stackdriver-errors-js/issues/10

+0

虽然没有直接回答我的用例,但它很有帮助。 – webblover

相关问题