이것은 기괴한 일입니다. 왜 이런 일이 일어 났는지 누군가가 알 수 있었는지 궁금합니다.localhost에서 실행 중일 때 JSONP 콜백이 실행되지 않습니다.
기본적으로 나는 다른 사이트에서 사용할 수있는 JSON 웹 서비스를 구현할 수 있도록 JSONP을 테스트하려고 노력하고 있습니다. 저는 localhost, 특히 Visual Studio 2008 및 Visual Studio 2008의 내장 웹 서버 개발을하고 있습니다.
그래서 jQuery를 승/JSONP 테스트 실행으로, 나는 다음을 구현 :
$().ready(function() {
debugger;
try {
$.getJSON("<%= new Uri(Request.Url, "/").ToString() %>XssTest?callback=?", function(data) {
alert(data.abc);
});
} catch (err) {
alert(err);
}
});
그리고 서버
.. 나는에 중단 점을 설정 그래서 일이 끝입니다<%= Request["callback"] %>({abc : 'def'})
서버와 나는 첫 번째 "디버거"에서 중단 점을 얻습니다. 서버 측뿐만 아니라 클라이언트 측 스크립트의 명령. JSONP URL은 실제로 페이지가로드 된 후에 호출됩니다. 그것은 위대한 일입니다.
내가 갖고있는 문제는 콜백이 실행되지 않는다는 것입니다. 필자는 Firefox 3.5뿐만 아니라 IE8에서도 이것을 테스트했습니다. 어느 쪽도 콜백을 호출하지 않습니다. 캐치 (오류)도 발생하지 않았습니다. 전혀 아무 일도 없었어!
내가 일주일 동안이 붙어, 심지어 서버가 형식을 반환 할 수 있는지 지정된 포트에 텔넷에서 수동으로 키 입력 HTTP 요청을 테스트하고 있었다 ...
callbackfn({abc : 'def'})
.. 그리고 그건.
는 그 다음 내가 로컬 호스트에서 호스트 이름을 변경하는 경우 globalizer으로 localhost로 무엇 떠올랐다 ('.'), 즉,이 DNS이다 예, 어떤 호스트 이름에 점을 추가하는 것은, 법적 대신 http://localhost:41559/의 http://localhost.:41559/을 (어떤 global::
는 C# 네임 스페이스에있다). 그리고 그것은 효과가있었습니다! 인터넷 익스플로러와 파이어 폭스 3.5는 방금 점을 추가했을 때 마침내 경고 메시지를 보였다.
그래서 여기에 무슨 일이 일어나는지 궁금합니다. 왜 늦은 스크립트 태그 생성이 일반 호스트가 아닌 인터넷 호스트 이름으로 작동합니까? 아니면 올바른 질문입니까?
분명히 보안상의 이유로 구현되었지만 보안을 위해 무엇을하려고합니까 ?? 그리고 점으로 작동 시키면이 보안 기능에 보안 허점이 드러났습니까?
그건 그렇고, 내 호스트 파일은 다른 호스트 용으로 바뀌지 만 localhost에는 특별한 일이 없습니다. 기본 127.0.0.1/:: 1은 아직 대체되지 않고 계속 유지됩니다.
FOLLOW-UP : 내 hosts 파일에 다음 ..
127.0.0.1 local.mysite.com
를 내 Global.asax에 다음 코드를 추가 :
protected void Application_BeginRequest(object sender, EventArgs e)
{
if (Request.Headers["Host"].Split(':')[0] == "localhost")
{
Response.Redirect(
Request.Url.Scheme
+ "://"
+ "local.mysite.com"
+ ":" + Request.Url.Port.ToString()
+ Request.Url.PathAndQuery
, true);
}
}
나는 추가하여 지역 개발을 목적으로 지난 있어요
방화 광과 같은 도구를 사용하여 JSONP에 대한 "스크립트"요청이 수행되는지 확인하고 실제로 어떤 데이터가 다시 나타나는지 확인하는 것이 좋습니다. –
데이터가 유효합니다. 설명했듯이 해결 방법은 localhost (스크립트 및 데이터가 동일하게 유지 된 상태)에서 벗어나서 "고정"하지만 상황을 완전히 설명하지는 않았습니다. –
그래, 그 이유는 내가 고정되지 않은 버전에 대한 사건을 기록하는 것이 좋습니다. –