XMLHttpRequest
을 사용하는 아주 간단한 예를 생각해보십시오.브라우저가 xorigin POST를 허용하지만 PUT을 허용하지 않는 이유는 무엇입니까?
다음 게시물 제대로은 http://requestb.in/yckncpyc를로드 할 수 없습니다 콘솔
. 알 겠어. 왜 내가 얻지 못하는 것은 단지XMLHttpRequest의에 대한 경고를 출력하지만 (당신은 네트워크 탭 또는
http://requestb.in/yckncpyc
에 브라우저를 지시하여 볼 수 있습니다). 아니요 요청한 리소스에 'Access-Control-Allow-Origin'헤더가 있습니다. 따라서 원본 'null'은 액세스가 허용되지 않습니다.const method = "POST" const req = new XMLHttpRequest() \t req.open(method, 'http://requestb.in/yckncpyc') req.send("foobar") console.log("sent") req.addEventListener('load', function() { console.log(req.status, req.response) })
물론
PUT
으로 사용 된 동사를 바꾸는 것이 전혀 다른 결과를 가져 오는 이유입니다. 전송 된 요청이
OPTIONS
프리 플라이트 요청하고
은 XMLHttpRequest http://requestb.in/yckncpyc를로드 할 수 없습니다 인쇄합니다. 프리 플라이트 요청에 대한 응답으로 액세스 제어 검사를 통과하지 못했습니다. 아니요 요청한 리소스에 'Access-Control-Allow-Origin'헤더가 있습니다. 따라서 원본 'null'은 액세스가 허용되지 않습니다.
const method = "PUT"
const req = new XMLHttpRequest() \t
req.open(method, 'http://requestb.in/yckncpyc')
req.send("foobar")
console.log("sent")
req.addEventListener('load', function() { console.log(req.status, req.response) })
왜 브라우저 * 다르게 이러한 치료 않습니다 ? 보안을 위해 수행되는 것처럼 보이지만 공격자가 PUT 대신 항상 POST를 사용할 수 있기 때문에 실제로는 의미가 없습니다.
여기 논리는 무엇입니까?
- 은, 크롬 52에서 사파리 9.1.2
흠 ...이 사양은 어디에 있습니까? 나는 [사양에서 이것에 대해 아무 것도 안다] (https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.6). 그리고 그 문제에 관해서,이 세상에는 그것을위한 추론이 무엇입니까? –
@GeorgeMauer 대답 확장 - [여기 주제에 관한 MDN 기사입니다.] (https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS) – Pointy
흠 ... 그래서 이것들 중 하나입니다. 것들은 사양이 아니지만 브라우저는 어쨌든 그것을합니까? –