요청한 리소스에 Access-Control-Allow-Origin 헤더가 없습니다.
동일한 도메인에서 정보에 액세스하지만 포트 번호가 다른 정보에 액세스하려면 다음을 추가합니다.Access-Control-Allow-Origin응답 헤더와 함께.
서블릿 코드: (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);
jQuery code: (www.example.com 에 있음)
$.post('http://www.example.com:PORT_NUMBER/MYSERVLET',{MyParam: 'value'}).done(function(data)
{
alert(data);
});
콘솔에서 여러 번 다음 오류가 발생합니다.
XMLHttpRequest cannot load 'http://www.example.com:PORT_NUMBER/MYSERVLET'
No 'Access-Control-Allow-Origin' header is present on the requested resource.
이 오류는 대부분 처음에 발생합니다.$.post실행됩니다.두번째는 허락합니다.
제 질문은 그 안에 없는 것이냐는 것입니다.servlet아니면jQuery암호?
어떤 제안이든 감사히 받겠습니다.
업데이트 1
변경했습니다:
response.setHeader("Access-Control-Allow-Origin", "*");
받는 사람:
response.setHeader("Access-Control-Allow-Origin", "http://www.example.com");
그러면 콘솔에서 다음 오류가 발생합니다.
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.
[참고: 화이트리스트와 오리진은 동일하지만 여전히 오류가 발생합니다.때로는 작동하고 때로는 위의 오류를 제공합니다.]
정보가 더 필요하시면 말씀해주세요.
해결책:
사용하는 대신setHeader내가 사용해왔던 방법addHeader.
response.addHeader("Access-Control-Allow-Origin", "*");
*위 줄에서 모든 도메인에 대한 액세스를 허용합니다. 특정 도메인에 대한 액세스만 허용하는 경우:
response.addHeader("Access-Control-Allow-Origin", "http://www.example.com");
IE<=9와 관련된 문제는 여기를 참조하시기 바랍니다.
에서 'json' dataType이 없습니다.$.post()방법:
$.post('http://www.example.com:PORT_NUMBER/MYSERVLET',{MyParam: 'value'})
.done(function(data){
alert(data);
}, "json");
//-^^^^^^-------here
업데이트:
이것으로 시도해 보십시오.
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
다음과 같은 솔루션을 spring.io 에서 찾을 수 있습니다.
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
서블릿에서 모든 http 메서드(POST, GET, DELETE, PUT 등)에 대한 헤더를 추가할 수 있도록 서블릿의 서비스 메서드를 재정의하기만 하면 됩니다.
@Override
protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
if(("http://www.example.com").equals(req.getHeader("origin"))){
res.setHeader("Access-Control-Allow-Origin", req.getHeader("origin"));
res.setHeader("Access-Control-Allow-Headers", "Authorization");
}
super.service(req, res);
}
언급URL : https://stackoverflow.com/questions/20881532/no-access-control-allow-origin-header-is-present-on-the-requested-resource
'programing' 카테고리의 다른 글
| colors.xml 파일에서 새 색상 항목을 만들 수 없습니다. (0) | 2023.09.21 |
|---|---|
| SVG 텍스트에서 자동 줄 바꿈 (0) | 2023.09.21 |
| Angular UI Bootstrap에서 modal과 non-modal 형태에 동일한 컨트롤러를 사용하는 방법? (0) | 2023.09.21 |
| XML에서 &을(를) 탈출하려면 어떻게 해야 합니까? (0) | 2023.09.21 |
| PHPSTorm IDE의 비효율적인 jQuery 사용 주의 (0) | 2023.09.21 |