Javascript 访问JAX-RS RESTful API

Javascript 访问JAX-RS RESTful API,javascript,java,rest,Javascript,Java,Rest,我正在构建一个RESTful实现,它包括服务器和一些客户端。服务器已启动并在云服务上运行 当试图通过XMLHttpRequest访问web客户机上的JavaScript资源时,我遇到以下错误 在Chrome上: > XMLHttpRequest cannot load > http://someserver.com/someresource. > No 'Access-Control-Allow-Origin' header is present on the requeste

我正在构建一个
RESTful
实现,它包括服务器和一些客户端。服务器已启动并在云服务上运行

当试图通过
XMLHttpRequest
访问web客户机上的
JavaScript
资源时,我遇到以下错误

在Chrome上:

> XMLHttpRequest cannot load
> http://someserver.com/someresource.
> No 'Access-Control-Allow-Origin' header is present on the requested
> resource. Origin 'null' is therefore not allowed access.
在Firefox上:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://someserver.com/someresource. (Reason: CORS header 'Access-Control-Allow-Origin' missing).
我读过其他的答案

req.setRequestHeader("Access-Control-Allow-Origin", "*");
但我在这方面运气不好

我想知道这个问题是否与一些需要在服务器端代码上完成的配置有关,以允许正确地接收和处理调用


您能帮我解决这个问题吗?

不要在请求对象上设置头,而是在服务器端的响应上设置头

response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Allow-Methods", "GET, PUT, POST, OPTIONS, DELETE");
response.addHeader("Access-Control-Allow-Headers", "Content-Type");
response.addHeader("Access-Control-Max-Age", "86400");
对于Jax RS:实现ContainerResponseFilter

package com.xyz.package;

import java.io.IOException;

import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.ext.Provider;

@Provider
public class CORSFilter implements ContainerResponseFilter {

   @Override
   public void filter(final ContainerRequestContext requestContext,
                      final ContainerResponseContext crc) throws IOException {
      crc.getHeaders().add("Access-Control-Allow-Origin", "*");
      crc.getHeaders().add("Access-Control-Allow-Headers", "origin, content-type, accept, authorization");
      crc.getHeaders().add("Access-Control-Allow-Credentials", "true");
      crc.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
      crc.getHeaders().add("Access-Control-Max-Age", "1209600");
   }

}

谢谢,我应该如何在服务器端实现这一点?现在我在服务器端创建响应,如下所示:
Response.ok(someJSON,MediaType.APPLICATION_JSON).header(“访问控制允许源代码”,“someserver.com/”).build()我不确定您使用的是哪个版本,对于我来说,更新的答案有效。谢谢。只添加您提到的CORSFilter类没有帮助吗?我已经添加了tomcat catalina 7.0.42 jar,并通过添加
CorsFilter org.apache.catalina.filters.CorsFilter cors.allowed.origins*
更新了我的web.xml,但仍然收到了相同的错误!嗨,只是更新一下!当web客户机被修改为jQuery而不是Javascript(服务器代码没有更改)时,服务器是可访问的,没有任何问题。