前端页面使用的Ueditor,有一个很奇怪的问题,前端的Ajax提交代码如下:
function checkSensitiveWord(backUrl) {
//var data = $("#article_form").serializeArray();
/* if(phone!="" && phone!=null){
backUrl ="/phone"+backUrl;
} */
$('#article_form').ajaxSubmit({
url:"/article/sensitive",
//data:data,
type:'POST',
cache:false,
async:false,
dataType:'json',
success:function(data) {
if (data.isError === "1") {
layer.msg(data.msg, {icon : 2, time : 2000});
} else if (data.isError === "0") { // 不存在敏感词,直接提交
layer.alert(data.msg, function(index){
linkbt(backUrl);
layer.close(index);
});
} else { // 存在敏感词
layer.open({
area: ['450px', '220px'],
content: data.msg,
btn: ['替换并保存', '不替换并保存', '取消保存'],
btn1: function(index, layero){
$('#filterWord').val("1");
layer.closeAll();
saveArticle(backUrl);
},
btn2: function(index, layero){
$('#filterWord').val("0");
layer.closeAll();
saveArticle(backUrl);
},
btn3: function(index, layero){
layer.closeAll();
return false;
},
cancel: function(){
//右上角关闭回调
layer.closeAll();
return false;
}
});
}
},
error : function() {
layer.alert('操作失败,请刷新页面后重试!', {icon : 2, time : 5000});
return false;
}
});
}
发现在Ueditor里头插入YouKu分享的视频iframe并且带有src属性的时候就会出现
Provisional headers are shown
这个提示,导致服务端接收不到这个请求(必现)已经确认的问题如下:
1、Ueditor的XSS的已经放开iframe以及相关的src等属性;
2、当在iframe中不写src属性的时候可以正常提交到服务器并且收到服务器应答;
3、当把iframe标签改为div标签且带上src属性的时候可以正常提交并收到应答;
4、在IE下以及在Chrome下尝试以上情况都必现,故可以排除是插件的问题,在别人的电脑也一样必现。
5、在Nginx的accesslog中在请求正常的情况下可以看到sensitive的请求,但是在出现“Provisional headers are shown”的时候不能看到sensitive的log.
6、这个ajax请求改为异步请求也是不能解决这个问题;
7、将form序列化之后直接通过ajax请求而不使用ajaxSubmit请求提交也是同样的问题。
8、假如正常提交的情况下接口返回非常快(1s以内)。
请求会经过一个nginx的反代,但是检查nginx的配置,没有什么其他的安全设置。
现在这个问题完全没有头绪,不知道问题出在哪里,已经快颠覆了自己对代码的认识。
请各位遇到相似问题的童鞋予以指点,谢谢。