$_SERVER[``를 사용 가능HTTP_X_REQUESTED_WITH']가 PHP에 존재합니까?
Stack Overflow에 포함된 모든 인터넷에서는 요청이 AJAX인지 여부를 확인하는 좋은 방법은 다음을 수행하는 것이라고 말합니다.
if (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' ) {...}
하지만, 나는 볼 수 없다.$_SERVER['HTTP_X_REQUESTED_WITH']
공식 PHP 문서에서
그리고 다음 작업을 수행하려고 하면:
echo $_SERVER['HTTP_X_REQUESTED_WITH'];
아무것도 출력되지 않습니다.
내가 뭘 잘못하고 있나요?왜냐하면 저는 정말 이 모든 것들을$_SERVER['HTTP_X_REQUESTED_WITH']
가능하다면요.
의 변수$_SERVER
PHP의 일부가 아니기 때문에 PHP 문서에서는 찾을 수 없습니다.스크립팅 언어로 전달되는 웹 서버에 의해 준비됩니다.
제가 알기로는X-Requested-With
는 모든 것이 아닌 대부분의 주요 프레임워크의 Ajax 함수에 의해 전송됩니다(예를 들어 Dojo는 불과 2년 전에 #5801을 추가했습니다).따라서 @bobince의 코멘트를 고려하여 요청이 AJAX 요청인지 아닌지를 판단하는 것은 일반적으로 100% 신뢰할 수 있는 방법이 아니라고 해도 무방합니다.
100% 안전한 유일한 방법은 요구와 함께 사전 정의된 플래그(GET 변수 등)를 전송하고 수신 페이지에 해당 플래그가 존재하는지 확인하는 것입니다.
cURL을 사용하면 어떤 헤더도 쉽게 스푸핑할 수 있다는 것을 잊지 마세요.
curl_setopt($ch,CURLOPT_HTTPHEADER,array("X-Requested-With : XMLHttpRequest"));
$_SERVER
로 시작하는 키HTTP_
HTTP 요청 헤더에서 생성됩니다.이 경우,X-Requested-With
header를 클릭합니다.
이 헤더는 모든 AJAX 라이브러리에서 표준화가 진행 중입니다.
이것은 php 문서 자체가 아니라 이 헤더를 설정한 다른 AJAX 라이브러리에 문서화되어 있습니다.공통 라이브러리는 다음과 같은 헤더를 전송합니다.jQuery, Mojo, 프로토타입...
일반적으로 이러한 라이브러리는 다음을 사용하여 헤더를 설정합니다.
xhrobj.setRequestHeader("X-Requested-With", "XMLHttpRequest");
다음은 사용 예제를 사용한 빠른 함수입니다.
function isXmlHttpRequest()
{
$header = isset($_SERVER['HTTP_X_REQUESTED_WITH']) ? $_SERVER['HTTP_X_REQUESTED_WITH'] : null;
return ($header === 'XMLHttpRequest');
}
// example - checking our active call
if(!isXmlHttpRequest())
{
echo 'Not an ajax request';
}
else
{
echo 'is an ajax request';
}
echo $_SERVER['HTTP_X_REQUESTED_WITH'];
그런 암호로 뭘 기대했어?AJAX 요청을 사용하지 않고 브라우저에서 직접 실행한다고 가정합니다.그럼 왜 이 헤더가 설정되었을까요?
생명, 우주, 그리고 모든 것에 대한 궁극의 질문에 대한 답은 HTTP 순이퍼입니다!$_SERVER 변수를 인쇄하는 것을 잊으십시오.
Firebug에는 Fiddler HTTP 프록시 또는 LiveHTTP Headers Mozilla 플러그인을 사용할 수 있습니다.링크를 만드는 것은 지루하지만 쉽게 검색된다.
따라서 HTTP 스니퍼를 사용하면 임의의 HTTP 헤더를 확보할 수 있습니다.
서버에 대한 모든 HTTP 요청은 이미 "직접"이므로 XHR을 사용하여 "직접 액세스"를 방지할 수 없습니다.
특별히 ajax request object(jQuery와 같은 프레임워크를 사용하지 않는 경우)로 설정해야 합니다.코어 Javascript는 다음과 같습니다.
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
어디에xhr
요청 객체입니다.
그리고나서,PHP
수신하여 글로벌 변수에 설정합니다.$_SERVER
다음과 같이 합니다.
$_SERVER['HTTP_X_REQUESTED_WITH']
그 이외의 경우 $_SERVER['HTTP_X_REQUESTED_WITH']는 항상 null입니다.
주의: Javascript에서 요청이 열린 후 헤더를 설정하십시오.내 말은 그 후xhr.open()
방법.
브라우저의 버그를 탓할 수도 있습니다.이 질문과 Firefox의 솔루션을 참조해 주세요.
Firefox는 Ajax 요청 리디렉션(ASP) 중에 사용자 지정 헤더를 보존하지 않습니다.NET MVC 솔루션
IE는 또한 요청 방식 탐지보다 더 심각한 캐시 문제가 있습니다.
캐시를 피하기 위해 캐시 버스터를 추가해야 합니다.따라서 다른 플래그를 사용하여 ajax 콜을 지정하거나 http://ajax.mysite.com/endpoint/sevice?params과 같은 다른 URL을 사용하는 것이 좋습니다.
Pekka에 동의합니다.클라이언트가 실제로 AJAX를 사용하여 엔드포인트를 호출하고 있는지 여부를 자동 검출할 수 있는 신뢰할 수 있는 네이티브 메서드는 전면과 후면 사이에 없습니다.
고객이 엔드포인트 중 하나를 요구하고 있는지 여부를 확인하는 주요 방법은 다음과 같습니다.
HTTP_X_REQUESTED_를 사용할 수 있습니다.내가 다른 영역과 관련이 없을 때.
"X-requested-with"를 체크하는 대신 $_SERVER[']를 체크합니다.(AJAX 요청에서 전송되는) HTTP_ORIGIN') 크로스 도메인 권한을 처리하려고 합니다.대부분의 경우 요청이 AJAX 요청인지 확인하는 주된 이유는 특히 이 PHP 코드 헤더('Access-Control-Allow-Origin: '.$_SERVER[')를 사용하는 교차 도메인 권한 때문입니다.HTTP_ORIGIN']; // 이 경우HTTP_ORIGIN"은 화이트리스트에 있습니다.
내 API는 클라이언트로부터 데이터 유형(JSON, HTML 등)을 GET 또는 POST var에 명시하도록 요구합니다.예를 들어 $_REQUEST['ajax']가 비어 있지 않거나 기대치와 동일한지 확인합니다.
HTTP 요구가 실제로 AJAX 경유로 송신되는지를 확인하는 최선의 솔루션은 SESSION 체크를 사용하는 것입니다.get 파라미터로 session_id를 전송하여 허용 여부를 확인합니다.
$headers = apache_request_headers();
$is_ajax = (isset($headers['X-Requested-With']) && $headers['X-Requested-With'] == 'XMLHttpRequest');
언급URL : https://stackoverflow.com/questions/2579254/does-serverhttp-x-requested-with-exist-in-php-or-not
'source' 카테고리의 다른 글
CSV 파일을 MySQL 테이블로 Import하는 방법 (0) | 2022.09.08 |
---|---|
바이트 []에서 InputStream 또는 OutputStream으로 (0) | 2022.09.06 |
Python에서 RGB 이미지를 그레이스케일로 변환하려면 어떻게 해야 하나요? (0) | 2022.09.06 |
현재 페이지의 Vuex 레코드를 삭제할 때 네비게이션을 처리하는 방법 (0) | 2022.09.06 |
clang 오류: unknown 인수: '-mno-madd'(패키지 설치 실패) (0) | 2022.09.06 |