Javascript 访问控制允许源站突然停止';行不通
我们有一个只在ipad上运行的移动应用程序。在应用程序中,用户提交一个表单,应用程序将使用js/jquery调用服务器上的restful服务。服务器是Tomcat6,web应用程序使用spring+hibernate框架。在开发服务器上,我们遇到了cors问题,我在我的应用程序和jar文件中添加了web.xml中相应的过滤器。它在dev、qa和live服务器上运行良好,应用程序可以与服务器协调通信。但今天晚些时候,我刚从客户端收到一个错误报告,即除非重新安装应用程序,否则应用程序无法将数据上传到服务器,这样应用程序中保存的所有数据都将消失。我使用javascipt和应用程序内部进行了测试。奇怪的是,我总是使用脚本得到异常:Javascript 访问控制允许源站突然停止';行不通,javascript,jquery,tomcat,Javascript,Jquery,Tomcat,我们有一个只在ipad上运行的移动应用程序。在应用程序中,用户提交一个表单,应用程序将使用js/jquery调用服务器上的restful服务。服务器是Tomcat6,web应用程序使用spring+hibernate框架。在开发服务器上,我们遇到了cors问题,我在我的应用程序和jar文件中添加了web.xml中相应的过滤器。它在dev、qa和live服务器上运行良好,应用程序可以与服务器协调通信。但今天晚些时候,我刚从客户端收到一个错误报告,即除非重新安装应用程序,否则应用程序无法将数据上传到
XMLHttpRequest无法加载https://mobilesso.vw.com.cn/ssso/scc/registerSCCF. 请求的资源上不存在“Access Control Allow Origin”标头。因此,不允许访问源站“null”。
并且我始终能够通过应用程序将数据上传到服务器。我想知道为什么现在会这样。移动应用程序和网络应用程序可以正常工作一周左右,为什么从现在开始停止。以及为什么应用程序内部没有问题,但js有问题。任何建议都会有帮助
客户端测试代码如下:
<script type="text/javascript" id="address-candidate-template">
var request = null;
function getMessage()
{
alert("Begin the test");
createRequest();
var url = "my url";
request.onreadystatechange = handleResponse;
request.open("GET", url, true);
request.send(null);
}
function createRequest() {
try {
request = new XMLHttpRequest();
} catch (trymicrosoft) {
try {
request = new ActiveXObject("MsXML2.XMLHTTP");
} catch (othermicrosoft) {
try {
request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
request = null;
}
}
}
if (request == null)
alert("Error creating request object!");
}
function handleResponse() {
alert(request.readyState + " " + request.status);
if (request.readyState==4 && request.status==200)
{
var xmlDocument=request.responseXML;
var fnames = xmlDocument.getElementsByTagName("statusCode");
var v1 = fnames[0].childNodes[0].nodeValue;
fnames = xmlDocument.getElementsByTagName("statusText");
var v2 = fnames[0].childNodes[0].nodeValue;
alert("Result:\nstatusCode: " + v1 + "\nstatusText: " + v2);
}
}
</script>
<div>
<p>test the connectivity</p><input type="button" value="Get Result" onclick="getMessage()"/>
var请求=null;
函数getMessage()
{
警报(“开始测试”);
createRequest();
var url=“我的url”;
request.onreadystatechange=handleResponse;
打开(“获取”,url,true);
请求发送(空);
}
函数createRequest(){
试一试{
请求=新的XMLHttpRequest();
}捕获(trymicrosoft){
试一试{
请求=新的ActiveXObject(“MsXML2.XMLHTTP”);
}捕获(其他Microsoft){
试一试{
请求=新的ActiveXObject(“Microsoft.XMLHTTP”);
}捕获(失败){
请求=null;
}
}
}
if(请求==null)
警报(“创建请求对象时出错!”);
}
函数handleResponse(){
警报(request.readyState+“”+request.status);
if(request.readyState==4&&request.status==200)
{
var xmlDocument=request.responseXML;
var fnames=xmlDocument.getElementsByTagName(“状态代码”);
var v1=fnames[0]。子节点[0]。节点值;
fnames=xmlDocument.getElementsByTagName(“状态文本”);
var v2=fnames[0]。子节点[0]。节点值;
警报(“结果:\n状态代码:+v1+”\n状态文本:+v2);
}
}
测试连接性
我使用了以下maven依赖项:
<dependency>
<groupId>com.thetransactioncompany</groupId>
<artifactId>cors-filter</artifactId>
<version>1.9.3</version>
</dependency>
交易公司
cors过滤器
1.9.3
并设置WEB-INF/WEB.xml:
<!-- CORS Filter -->
<filter>
<filter-name>CORS</filter-name>
<filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CORS</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
科尔斯
com.thetransactioncompany.cors.CORSFilter
科尔斯
/*
“Access Control Allow Origin突然不起作用”好吧,我可以向您保证,世界上的web浏览器突然改变了他们在您的网站上使用此标题的方式。我们怎么知道为什么这个停止工作了?您没有显示任何已更改的代码,也没有向我们显示HTTP请求/响应。只有你知道这些信息。我无法访问客户端代码。我自己编写了一些测试代码,这些代码过去很成功,但现在不再成功了。请参阅更新如果您将添加一些带有请求和响应标题的网络日志,那将非常棒。例如,您可以在chrome/firefox开发工具中获得它们(最简单的方法)。至少这是您应该开始的第一步-检查实际的标题。