setRequest에서 설정한 Ajax 헤더를 제거할 수 있는 방법이 있습니까?머리글()?
시스템 내에 존재하는 JS 스크립트를 작성하고 있으며 현재 jqXHR.setRequest를 통해 모든 Ajax 요청에 사용자 정의 XID 헤더를 추가하고 있습니다.jQuery.jaxPrefilter()에 등록된 함수의 헤더()입니다.
스크립트에서 액세스-제어-허용-헤더가 이 사용자 지정 XID 헤더를 허용하도록 설정되어 있지 않은 타사 사이트에 Ajax 요청을 해야 합니다.
3가지 옵션이 있는 것 같습니다.
- $.ajax()'s에서 해당 XID 헤더를 제거할 방법을 찾으십시오. 이 XID 헤더는 axPrefilter() 함수의 이름을 따서 호출되는 것을 확인했습니다.
- $.ajax()를 사용하는 것을 완전히 포기하고 직접 Ajax 항목을 작성합니다.
- $.ajax()가 사용자 지정 XID 헤더를 수락하는 시스템의 백엔드를 가리키도록 하고 cURL을 통해 타사 사이트로 요청을 수행합니다.
가장 깨끗하고 빠른 경로이기 때문에 간단한 방법이 있다면 옵션 #1을 선호합니다.방법을 알 수 없을 뿐입니다.
이렇게 덮어쓰려고 했지만 효과가 없었습니다.
beforeSend: function(jqXHR, settings) {
jqXHR.setRequestHeader('custom-xid-header', null);
}
무슨 생각 있어요?
이것이 오래된 실이라는 것을 알지만, 그것은 여전히 문제입니다!아래 내용이 우리처럼 다른 사람에게 해결에 도움이 되기를 바랍니다.
머리글 설정 위치null
/undefined
/""
설정된 후에는 헤더를 제거하지 않지만 값이 없거나 "정의되지 않음" 또는 "message"로 전송합니다.이것은 아마도 당신이 원하는 것이 아닐 것이고, 우리의 경우는 Authorization 헤더일 때 SSO를 완전히 망칩니다.
우리가 생각해낸 해결책은 @marlar의 제안(감사합니다)과 jQuery의 또 다른 부족한 점을 결합한 것입니다.하나만 가질 수 있습니다.beforeSend()
후크, 그리고 새로운 후크가 이전 후크를 대체합니다.당신이 a를 공급하면 이것 또한 사실인 것 같습니다.beforeSend()
구체적으로$.ajax()
request - 의 기본값을 덮어씁니다.$.ajaxSetup()
. 이렇게 하면 기본 후크에서 헤더를 설정할 수 없습니다.(기본값에서 다른 작업이 수행될 수 있으므로 100% 이상적이지는 않습니다.beforeSend()
그런 일은 일어나지 않겠지만, 이봐).
따라서 이는 특정 요청에 대해 정적 헤더와 동적으로 설정된 헤더를 모두 처리합니다.
if($.ajaxSettings && $.ajaxSettings.headers) {
delete $.ajaxSettings.headers.Authorization;
}
$.ajax({
beforeSend: function() {}, // no op
// ...
});
당신은 같은 일을 할 수 없습니다.prefilter()
,하지만 내 생각엔…beforeSend()
어쨌든 더 일반적인 방법입니다.
$.ajaxSetup({
beforeSend: function(jqXHR, settings) {
jqXHR.setRequestHeader('custom-xid-header', null);
}
})
http://api.jquery.com/jQuery.ajaxSetup/ 를 참조하십시오.
를 사용하여 헤더를 삭제할 수 없습니다.beforeSend()
왜냐하면 데이터가 이미 전달되었기 때문입니다.XMLHttpRequest
헤더만 수정할 수 있습니다.
그러나 오늘날 2019년에는 다음을 사용하여 원하지 않는(비표준) 헤더를 삭제할 수 있습니다.jQuery.ajaxPrefilter()
.
$.ajaxPrefilter(function(options, originalOptions, jqXHR) {
delete options.headers['custom-xid-header'];
});
$.ajax({
url: '//httpbin.org/get',
headers: {
'custom-xid-header': 'remove me',
"Accept": "what/ever"
},
datatype: 'json',
success: function(data) {
console.log(data.headers);
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!--script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script-->
효과가 있었습니다.
$.ajax({
"url": url,
"method": "POST",
beforeSend: function(jqXHR, settings) {
jqXHR.setRequestHeader('x-access-token', undefined); // the header to remove
},
"headers": {
"Authorization": `Bearer xxxxxxxx`,
"Content-Type": "application/json"
},
"data": data,
})
오버라이드는 효과가 없어 보이지만 간단한 해결책이 있습니다.
$.ajaxSetup({
beforeSend: function (jqXHR) {
if (sendToken == true)
jqXHR.setRequestHeader("Authorization", cookie);
return true;
}
});
발송확인토큰 변수.전 세계적입니다.앱을 시작할 때는 거의 모든 곳에서 헤더 세트가 필요하기 때문에 항상 true로 설정합니다.
하지만 "Authorization" 헤더를 보내지 않으려면 글로벌 전송만 통과합니다.요청을 시작하기 전에 토큰을 false로 바꿉니다.모든 요청이 완료되면 다시 true로 설정합니다.
비결은 jqXHR 변수가 로컬이고 매번 할당된 값을 유지하지 않는다는 것입니다.ajaxSetup에 설정된 현재 값을 덮어쓰는 것은 단순히 새 값을 대체하는 것이 아니라 항상 새 값을 추가하기 때문에 작동하지 않습니다.그 위에 조건을 다는 것이 가장 간단하고 효율적인 방법이라고 생각합니다.
그것은 나에게 효과가 있었다.
이렇게 하면 $.ajaxSetup()이 있는 헤더 집합이 제거됩니다.Send() 전에도 잘 될 것 같습니다.
delete $.ajaxSettings.headers["custom-xid-header"]
언급URL : https://stackoverflow.com/questions/18491368/is-there-any-way-to-remove-ajax-headers-set-by-setrequestheader
'programing' 카테고리의 다른 글
Excel 스프레드시트 데이터를 VBA가 포함된 다른 Excel 스프레드시트로 가져오기 (0) | 2023.09.17 |
---|---|
플로팅 없이 부트스트랩 4로 텍스트 랩 어라운드 이미지를 만드는 방법은? (0) | 2023.09.17 |
아약스 이진 응답 (0) | 2023.09.17 |
Spring Data JPA: 쿼리ManyToMany (0) | 2023.09.17 |
사용자 지정 파워셸 함수 목록을 가져오는 방법은? (0) | 2023.09.17 |