2013-07-23 4 views
2

연습 할 수있는 자체 MVC 프레임 워크를 작성 중이며 요청 클래스가 있습니다. 요청 유형을 잡아서 AJAX/JSON 호출이든 HTML/XML 요청이든 관계없이 데이터를 파싱하고 싶습니다.아약스 요청을 감지합니다.

임 현재 사용 : 그것은이에 대한 응용 프로그램/JSON 반환에

$_SERVER['HTTP_ACCEPT'] 

이상

을 위해서 var_dump를 사용했을 때

$.ajax({ 
    type: 'post', 
    url: 'index', 
    dataType: 'json', 
    data: { 
     _method: 'put' 
    } 
}); 

위해서 var_dump를 ($ _ SERVER [ 'HTTP_ACCEPT']) 반환 :

string(46) "application/json, text/javascript, */*; q=0.01" 

질문 : 이 방법은 신뢰할 수 있습니까? 그것은 항상 작동합니까? 이런 식으로 아약스 호출을 탐지하는 데 보안 문제가 있습니까? 내 프레임 워크 내 모든 아약스 호출 데이터 유형을 가지고 있어야합니다

참고 : 'JSON'는하지 않는 HTML 또는 XML 같은 전화의 다른 유형.

+0

정말 AJAX 요청인지 여부 또는 요청 된 반환 형식이 무엇인지에 대해 관심이 있습니까? –

답변

9

jQuery를 사용하면 "XMLHttpRequest"로 설정 될 $_SERVER['HTTP_X_REQUESTED_WITH']을 사용할 수 있습니다. 이것은 jQuery를 사용할 때 가장 신뢰할 수있는 방법입니다.

+0

XMLHttpRequest는 아약스 호출을 의미합니까? 해당 XML 또는 JSON 형식을 어떻게 검색합니까? – GGio

+0

@GGio 당신의 필요에 따라, 당신은'Accept' 헤더를 분석하려고 할 수 있습니다. 그러나 개인적으로 나는 원하는 출력 포맷을 나타 내기 위해 querystring 매개 변수 나 파일 확장자를 사용할 것입니다. 적어도 기본적인 유스 케이스의 경우. –

+0

두 가지 질문이있는 것 같습니다. 요청이 아약스에서 왔는지 감지하는 방법과 데이터 유형을 찾는 방법입니다. 이 대답은 첫 번째 질문에 대한 답변입니다. 두 번째 질문은 신뢰성이 과대 평가되었습니다. JSON의 실제 MIME 유형과 [this one] (http())에 대한 [이 질문 (http://stackoverflow.com/questions/477816/what-is-the-correct-json-content-type?rq=1) : //stackoverflow.com/questions/1049401/how-to-select-content-type-from-http-accept-header-in-php) PHP보다 아파치로 타입 탐지를 처리 ​​할 때. –

3

콜린 모렐리 (Colin Morelli)가 귀하의 주요 질문에 답변했지만, 귀하의 후속 조치에 도움이됩니다.

XMLHttpRequest는 해당 ajax 호출을 의미합니까? 해당 XML 또는 JSON

예, 유형을 감지하는 방법은 무엇입니까? XMLHttpRequest는 요청을하는 JavaScript 객체입니다. 당신이 원하는 것을 보내도록 할 수 있기 때문에 지금은 가난한 이름입니다. 두 번째 질문에 대답하기 위해 당신은받는 페이로드에서 일종의 파싱 시도를해야 할 것입니다. XML을 스캔 할 수 있습니다. 발견되지 않으면 JSON이라고 가정하고 구문 분석을 시도합니다.

+0

왜'$ _SERVER [ 'HTTP_ACCEPT']'를 사용하는 것이 XML을 감지하는 것 같아요.'application/xml'을줍니다. – GGio

+0

그와 같은 것이 올바르게 설정되었다고 가정하는 것은 일반적으로 좋지 않습니다. 들어오는 데이터를 수동으로 테스트하여 예상 한 데이터인지 확인해야합니다. 또한 누군가가 잘못된 XML을 보내는 상황에 처하게 될 수 있으며 코드를 너무 많이 실행하기 전에이를 잡아야합니다. –

관련 문제