문제

최근에 JSONP와 ASP.NET MVC를 사용하여 크로스 도메인 JavaScript를 수행했습니다.

특정 컨트롤러 동작은 사후 요청에만 응답합니다. 이는 디자인에 의한 것입니다.

IE8에서는 (Fiddler2를 통해) 응답이 정확하다는 것을 알 수 있으며 JSONP JavaScript와 함께 HTTP 200 응답을 반환합니다.

Firefox, Safari 및 Chrome에서는 적절한 HTTP 200 코드 및 JSONP 컨텐츠를 통해 응답이 여전히 반환되고 있습니다. 유일한 차이점은 jQuery에서 사용하는 XMLHTTPREQUEST 객체가 상태 코드를 0으로 설정하고 응답 텍스트를 비어 있다는 것입니다.

원래, 나는 이것이 Cor HTTP Preflighting (HTTP Access Control) 때문이라고 생각했는데, 여기서 텍스트/일반 이외의 내용 헤더 또는 컨텐츠 유형은 추가 HTTP 요청 (옵션 포함) 동사가 서버로 전송됩니다. Fiddler2에서 옵션 요청이 HTTP 404에 응답하고 있음을 알 수 있습니다.

웹 서버는 IIS7이지만 프로덕션 웹 서버는 IIS6 상자가됩니다). IIS7에서는 핸들러에 나열된 표준 OptionSTERBHANDLER를 볼 수 있지만 실제로 이것이 실제로 무엇이든하고 있다고 확신하지는 않습니다 (사실, 옵션 버전 핸들러에 대한 문서조차 찾을 수 없습니다).

이를 위해 jQuery 라이브러리를 수정하여 사용자 정의 헤더를 설정하지 않고 컨텐츠 유형을 Application/JSON 대신 텍스트/일반으로 변경했으며 Firefox는 옵션 요청과 일반 게시물을 우회하기 시작합니다.

Fiddler2가 성공적인 HTTP 200 응답이 컨텐츠를 반환하고 있음을 보여 주지만 여전히 문제는 여전히 빈 응답에 있습니다 (XMLHTTPREQUEST 객체에 따르면).

도움이 있습니까?

도움이 되었습니까?

해결책

게시물을 사용하여 jQuery와 함께 크로스 도메인 호출을 사용할 수 없습니다 (호출을 위해 스크립트 태그를 렌더링하기 때문에 의미가 있습니다). 문제를 정렬하기 위해 전환하면 이제 모든 것이 올바르게 돌아오고 있습니다.

jQuery 소스를 걸어 걸어서 그것을 알아 내야했지만 답장을 보내 주셔서 감사합니다.

매트

다른 팁

사용해보십시오 개똥 벌레 Firefox에서 실제 요청이 전송되는 것을 보았습니다. HTTP 요청 및 응답을 보려면 NET 탭을 확인하십시오. 어쩌면 무언가가 잘못 구성되었을까요? 나도 사용합니다 JSONVIEW Firefox에서 ApplCaiton/JSON Mimietype를 설정하는 JSON 데이터를보십시오. 안타깝게도 JSONP를 처리하지는 않지만 가깝습니다.

클라이언트 측의 모든 명백한 오류 외에도 Gecko Engine을 찾기 때문입니다. Access-Control-Allow-Origin The Header에서 servlet. 그것이 그것을 찾지 못하면, 그것은 의사 소통을 중단하고 당신은 status=0 그리고 statusText=null. 또한, moz-nullprincipal XML 파싱 오류에서. 이 모든 것들은 매우 오해의 소지가 있습니다. 이 문제를 해결하는 데 필요한 것은 다음과 같습니다.

response.setHeader("Access-Control-Allow-Origin","*");

에서 servlet 코드와 삶은 좋을 것입니다 :-)

실제로는 그렇지 않습니다. Firefox는 다음과 같은 옵션 헤더를 보냅니다.

Firefox의 클라이언트가 설정 한 내용은 다음과 같습니다.

OPTIONS /MvcApplication/Json/Test1 HTTP/1.1
Host: acoheni580
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Origin: http://localhost
Access-Control-Request-Method: POST

MVC는 속성을 사용할 때 포스트 헤더 만 찾고 있기 때문에이를 처리하는 방법을 모릅니다. [HttpPost]

수동으로 허용합니다.

//[HttpPost]
[AcceptVerbs(new string[] {"POST","OPTIONS"})]
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top