请求的资源上不存在Access-Control-Allow-Origin标头

Bhu*_*han 19 javascript java ajax jquery cors

我想访问来自相同域但具有不同端口号的信息,为了允许这一点,我添加Access-Control-Allow-Origin了响应头.

Servlet代码:(发布在www.example.com:PORT_NUMBER)

String json = new Gson().toJson(list);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.setHeader("Access-Control-Allow-Origin", "*");//cross domain request/CORS
response.getWriter().write(json);
Run Code Online (Sandbox Code Playgroud)

jQuery代码:(发布于www.example.com)

$.post('http://www.example.com:PORT_NUMBER/MYSERVLET',{MyParam: 'value'}).done(function(data)
{
    alert(data);
});
Run Code Online (Sandbox Code Playgroud)

有几次我收到这个错误(在控制台中):

XMLHttpRequest cannot load 'http://www.example.com:PORT_NUMBER/MYSERVLET'
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Run Code Online (Sandbox Code Playgroud)

此错误通常$.post在执行时第一次出现.第二次它允许.

我的问题是有缺少servletjQuery代码?

任何建议将不胜感激.

UPDATE1

我改变了:

response.setHeader("Access-Control-Allow-Origin", "*");
Run Code Online (Sandbox Code Playgroud)

至:

response.setHeader("Access-Control-Allow-Origin", "http://www.example.com");
Run Code Online (Sandbox Code Playgroud)

然后我在控制台中收到此错误:

XMLHttpRequest cannot load http://www.example.com:PORT_NUMBER/MyServletName
The 'Access-Control-Allow-Origin' whitelists only 'http://www.example.com'
Origin 'http://www.example.com' is not in the list,
and is therefore not allowed access.
Run Code Online (Sandbox Code Playgroud)

[注意:白名单和原点相同,但仍然会出错.它有时会起作用,并且有时会出现上述错误.]

如果您需要更多信息,请与我们联系.

Bhu*_*han 33

解决方案:
而不是使用setHeader我使用过的方法addHeader.

response.addHeader("Access-Control-Allow-Origin", "*");
Run Code Online (Sandbox Code Playgroud)

* 在上面的行将允许访问所有域,仅允许访问特定域:

response.addHeader("Access-Control-Allow-Origin", "http://www.example.com");
Run Code Online (Sandbox Code Playgroud)

有关IE <= 9的相关问题,请参阅此处.