여기서 "origin is not allow by Access-Control-Allow-Origin" 오류가 나타나는 이유는 무엇입니까?
다음의 에러가 표시됩니다.
Origin http://localhost:8080 is not allowed by Access-Control-Allow-Origin
다음 코드 포함:
var http = new getXMLHttpRequestObject();
var url = "http://gdata.youtube.com/action/GetUploadToken";
var sendXML = '<?xml version="1.0"?><entry xmlns="http://www.w3.org/2005/Atom"'+
'xmlns:media="http://search.yahoo.com/mrss/'+
'xmlns:yt="http://gdata.youtube.com/schemas/2007">'+
'<media:group><media:title type="plain">My First API</media:title>'+
'<media:description type="plain">First API</media:description>'+
'<media:category scheme="http://gdata.youtube.com/schemas/2007/categories.cat">People</media:category>'+
'<media:keywords>first, api</media:keywords></media:group></entry>';
http.open("POST", url, true);
http.setRequestHeader("Authorization", "AuthSub token=" + AccessToken);
http.setRequestHeader("X-GData-Key", "key="+ dev_key);
http.setRequestHeader("Content-Type", "application/atom+xml; charset=UTF-8");
http.onreadystatechange = function() {
if(http.readyState == 4) {
alert(http.responseXML);
}
}
http.send(sendXML);
원인은 무엇이며, 어떻게 해결할 수 있습니까?
현재 도메인 외부에서 Ajax 요청을 할 경우 Javascript가 제한됩니다.
- 예 1: 당신의 도메인은 example.com이며, test.com = > 에 요청을 할 수 없습니다.
- 예 2: 당신의 도메인은 example.com이며, inner.example.com = > 에 요청을 할 수 없습니다.
- 예 3: 당신의 도메인은 example.com:80이며, example.com:81 = >에 요청하고자 하는 경우, 할 수 없습니다.
- EX 4: 당신의 도메인은 example.com이며, example.com = >에 요청을 할 수 있습니다.
Javascript는 보안상의 이유로 "동일 원본 정책"에 의해 제한되므로 악의적인 스크립트가 원격 서버에 접속하여 중요한 데이터를 전송할 수 없습니다.
jsonp는 javascript를 사용하는 다른 방법입니다.요청을 하면 결과는 클라이언트에서 실행되는 콜백 함수에 캡슐화됩니다.새로운 스크립트 태그를 html의 선두에 링크하는 것과 같습니다(여기에서는 다른 도메인에서 스크립트를 로드할 수 있습니다).
다만, jsonp 를 사용하려면 , 서버가 올바르게 설정되어 있을 필요가 있습니다.그렇지 않으면 jsonp를 사용할 수 없으며 서버 측 프록시(PHP, ASP 등)에 의존해야 합니다.이 토픽에 관한 가이드가 많이 있습니다.구글을 검색해 주세요!
XMLHttpRequest가 도달하지 않음localhost:8080
"동일 원산지 정책" 때문입니다.
응답에 헤더를 추가하여 최신 브라우저의 요청을 허용할 수 있습니다.localhost:8080
:
Access-Control-Allow-Origin: *
HTTP 서버에 디렉티브를 추가하거나 서버측 코드(PHP, Ruby 등)를 통해 헤더를 추가함으로써 이를 수행할 수 있습니다.
크로스 오리진 에이잭스 요청에 대한 자세한 내용은 https://developer.mozilla.org/en/http_access_control를 참조하십시오.
Chrome을 사용하는 경우 간단한 회피책(개발 목적으로만)은 옵션을 사용하는 것입니다.--disable-web-security
.
솔루션에 global.asax를 추가합니다.
더하다
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
에
protected void Application_BeginRequest(object sender, EventArgs e)
{
}
apache를 사용하고 있는 경우는, 퍼블릭 루트에 .htaccess 파일을 삽입/작성해, 필요한 파일 확장자를 추가합니다.
<FilesMatch "\.(ttf|otf|eot|woff|jpg|png|jpeg|gif|js|json|html|css)$">
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
</FilesMatch>
로컬 개발의 경우 HTTP 응답 헤더를 수정하는 도구를 사용할 수 있습니다.예를 들어 Charles는 포함된 개서 도구를 사용하여 이를 수행할 수 있습니다.개서 도구
대상 도메인/위치에 대한 새 규칙을 추가합니다.
Type: Add Header
Where: Response
Replace
Name: Access-Control-Allow-Origin
Value: *
Replace All
여기서는 Apache Http를 위해 두 가지 작업을 수행해야 합니다.
1) httpd.config 파일에서 이 파일의 코멘트를 해제합니다.
LoadModule headers_module modules/mod_headers.so
2) 하단에 이 행을 추가합니다.
Header set Access-Control-Allow-Origin "*"
만약 당신이 브라우저로 구글 크롬을 사용하고 있다면, 당신은 CORS 확장자를 추가하고 활성화 할 수 있습니다, 그것은 당신의 코드에 아무것도 바꾸지 않고 구멍 문제를 해결할 것입니다.
이 질문과는 무관하지만 이 상황에서 jQuery를 사용하는 사용자는... 때 「jQuery」를 합니다.callback=?
자바 배경의 경우 자바스크립트를 위한 웹 서비스를 호출하는 서블릿을 만드는 것이 하나의 해결책일 수 있습니다.GET(Your-choice) 메서드의 아래 코드와 같은 것...
JsonElement jelement;
JsonArray jarray;
try {
URL url = new URL("http://rest."YOUR URL"#ba0482");
URLConnection connection = url.openConnection();
connection.setDoInput(true);
InputStream inStream = connection.getInputStream();
BufferedReader input = new BufferedReader(new InputStreamReader(inStream));
jelement = new JsonParser().parse(input);
jarray = jelement.getAsJsonArray();
response.setContentType("application/json");
PrintWriter out = response.getWriter();
out.print(jarray);
out.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
이제 javascript에서 서블릿 이름으로 URL을 지정하기만 하면 됩니다!!
ajax를 사용하여 php 페이지에 접속할 때 동일한 오류 메시지가 나타납니다(javascript와 php 파일은 모두 같은 서버에 있습니다).
이유는 자바스크립트에서 IP 주소를 도메인으로 지정했기 때문입니다.이로 인해 브라우저는 php 파일에 대한 호출이 다른 서버에 있다고 믿게 되었습니다.
이 에러 메시지를 간단하게 제거할 수 있습니다.a) javascript와 php 파일이 같은 서버 b에 있는지 확인합니다.JavaScript의 URL(특히 도메인)이 서버의 URL(http://www.smartana.co.uk/myServer.php) 등)을 반영하고 있는지 확인합니다.
언급URL : https://stackoverflow.com/questions/9310112/why-am-i-seeing-an-origin-is-not-allowed-by-access-control-allow-origin-error
'programing' 카테고리의 다른 글
Spring HATEOAS에서 "_embedded" 속성을 삭제하는 방법 (0) | 2023.02.18 |
---|---|
워치를 디바운스 또는 스로틀 할 수 있습니까?워치를 디바운스 또는 스로틀 할 수 있습니까?비스듬히_lodash를 사용하는 JS?비스듬히_lodash를 사용하는 JS? (0) | 2023.02.17 |
Oracle sql에서 "%Type"은 무엇을 의미합니까? (0) | 2023.02.17 |
전개 후 "Uncatched Error: [$injector:unpr]"가 각진 상태로 표시됩니다. (0) | 2023.02.17 |
AngularJS 상수 (0) | 2023.02.17 |