我有一个RESTful Web服务,它将返回字符串,它是用Java(JAX-WS)编写的。我的问题是,当我使用以下网址向该Web服务发送请求时:
http://localhost:8080/project/webservices/getlist/getListCustomers
在控制台中,它显示以下错误消息:
XMLHttpRequest无法加载url Access-Control-Allow-Origin不允许起源localhost
我该如何处理这个问题?
Java代码:
@GET
@Path("/getsample")
public Response getMsg() {
String output = "Jersey say : " ;
return Response.status(200).entity(output).build();
}
在这里阅读有关您的问题CORS的信息:http : //enable-
cors.org/
检查此方法是否对您的getMsg()方法有帮助:
return Response.ok(output).header("Access-Control-Allow-Origin", "*").build();
如果上述方法不起作用,请尝试将Jersey过滤器添加到您的服务中。创建过滤器类:
package your.package;
public class CORSFilter implements ContainerResponseFilter {
@Override
public ContainerResponse filter(ContainerRequest creq, ContainerResponse cresp) {
cresp.getHttpHeaders().putSingle("Access-Control-Allow-Origin", "*");
cresp.getHttpHeaders().putSingle("Access-Control-Allow-Credentials", "true");
cresp.getHttpHeaders().putSingle("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, OPTIONS, HEAD");
cresp.getHttpHeaders().putSingle("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With");
return cresp;
}
}
并稍后注册win web.xml:
<servlet>
<servlet-name>CORS Filter</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
<param-value>your.package.CORSFilter</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>CORS Filter</servlet-name>
<url-pattern>/webservices/*</url-pattern>
</servlet-mapping>
另一个解决方案是在资源中使用此代码来提供OPTIONS
浏览器。将其放在您拥有@GET的班级中。
@OPTIONS
@Path("/getsample")
public Response getOptions() {
return Response.ok()
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "POST, GET, PUT, UPDATE, OPTIONS")
.header("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With").build();
}
如果没有这项工作,请尝试将"*"
提供的“ Access-Control-Allow-
Origin”标头与您访问此资源的自定义域交换。Ig如果您http://localhost::8080
使用这样的名称("Access-Control- Allow-Origin", "http://localhost:8080")
而不是星号来调用它"*"
。
Response.AddHeader(“Access-Control-Allow-Origin”,“*”)是如何实现的;行设置多个标题时,包括,但没有当我删除它?
null 服务器的响应如下: XMLHttpRequest无法加载http://nqatalog.negroesquisso.pt/login.php。Access-Control-Allow-Origin不允许Origin 。 如何解决此问题?
问题内容: 我是Ajax的新手,只是受过此跨域调用的任务。我们的网页上有一个文本框,用户可用来执行公司名称搜索。通过单击文本框旁边的按钮,将请求Ajax调用。不幸的是,Web服务位于单独的域中,因此自然会引起问题。 以下是我使这项工作的最佳尝试。我还要注意,此调用的目的是以XML格式返回结果,该结果将在请求的一部分中进行解析。 这又是错误消息: 对于解决方法,我不知所措,将不胜感激任何想法。 问题
问题内容: 我正在使用Sencha Touch 2应用程序(包装在PhoneGap中)到远程PHP服务器。 服务器的响应如下: XMLHttpRequest无法加载http://nqatalog.negroesquisso.pt/login.php。原产地不被访问控制允许来源允许的。 我该如何解决这个问题? 问题答案: 不久前,我写了一篇有关此问题的文章Cross Domain AJAX 。 如果
我试图使用原始JSON发出一个POST请求来松弛API,但我一直得到以下错误
问题内容: 显然,我完全误解了它的语义。我想到了这样的事情: 客户端从http:// siteA- origin 下载javascript代码MyCode.js 。 MyCode.js的响应标头包含 Access-Control-Allow-Origin:http:// siteB ,我认为这意味着MyCode.js被允许对站点B进行跨域引用。 客户端触发了MyCode.js的某些功能,该功能继而