ASP 페이지에서 ajax 호출을 만들었지 만 Fiddler를 사용하여 실제로는 항상 3 개의 호출이 있음을 알았습니다. 네트워크 전송 시간과 대역폭을 낭비하는 점진적으로 인증.Firefox는 하나의 Ajax 호출을 세 번의 HTTP 요청으로 바꾸는 방법, 적절한 Windows 인증없이 두 번의 호출을 피하는 방법
첫 번째 호출에는 인증 헤더가 없으며 서버는 HTTP 401.2 Unauthorized
을 말하는 6 킬로바이트 페이지와 가장 가능성이 높은 원인에 대한 사용자 친숙한 정보 및 시도 할 수있는 사항으로 응답합니다.
이어서 두번째 요청은 추가 헤더와 함께 전송된다 같은
가Not Authorized
HTTP Error 401. The requested resource requires user authentication.
이어서 제 요청이다
Authorization: NTLM ....(56 bytes base64)...
이제 서버 간단한 341 바이트 HTML 메시지 단지 말하는 응답 다음과 같은 훨씬 긴 Auth 헤더가 함께 전송되었습니다.
Authorization: NTLM ....(688 bytes base64)...
이제 코드 숨김에서 응답을 보내고, 내 자신의 14 바이트 JSON 메시지와 함께.
나에게는 처음 두 메시지 교환이있는 것이 낭비스러운 것처럼 보입니다. 얼마나 많은 6500 바이트의 처음 두 응답을 피하기 위해 항상 전체 인증 헤더를 보내고 유용한 14 바이트의 응답 만 얻으려면 아약스 호출을 얻으려고합니까?
xhrFields.withCredentials = true
설정을 추가하려고했지만 위의 동작은이 설정의 유무에 관계없이 나타납니다.
이
는 아약스 호출입니다 : $.ajax({
type: "POST",
url: "Timeout_Test.aspx/GetAjax",
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
dataType: "json",
xhrFields: {
withCredentials: true
},
success: function (data, textStatus, jqXHR) {...},
error: function (jqXHR, textStatus, errorThrown) {...}
});
같은 세션 타임 아웃 피하려고 내 실험을위한 자바 스크립트 ASP를 호출로 발생합니다
function get_asp() {
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() {...}
xmlHttp.withCredentials = true;
xmlHttp.open("GET", "Timeout_Test.aspx?type=keepalive", true); // true for asynchronous
xmlHttp.send(null);
}
web.config
가 포함
<authentication mode="Windows"/>
을
페이지에 액세스하려면 Windows 로그인 이름을 입력해야합니다. e와 내 암호를 한 번. 이 페이지에는 간격 타이머가있는 단추와 일부 자바 스크립트 논리가 포함되어 있으며 매분마다 아약스 호출이 수행됩니다. 실제로 자바 스크립트가 로그인 자격 증명을 알고 있지만 Ajax 호출이 실제로 잘 작동합니다. 두 중간 401 오류 메시지는 자바 스크립트 코드에서 숨겨져 있으며 Fiddler http snooping 도구에 표시되는 것을 제외하고는 어디에도 표시되지 않습니다.
Firebug 디버그 세션은 하나의 성공적인 ajax 호출 만 보여 주며, Fiddler는 401에서 3 회의 HTTP 요청과 2 회의 오류 응답을 명확하게 보여줍니다. 나는 1 분마다 1 개의 ajax 호출 만 수행한다고 확신합니다. . 3 가지 반응은 약 1 초 정도의 빠른 반응입니다.
아니요, 총 35 밀리 초입니다. T.471에서 1 번, T.473에서 1 번 응답, T.487에서 Req2, T.489에서 Resp2, T.502에서 Resp3으로 마지막으로 Req3, T.505에서 Resp3, T는 18:22:12 . Fiddler 통계 창에 따르면.
Visual Studio 2015 C# 디버거를 사용하면 각 아약스 호출에 대해 코드 숨김이 한 번만 호출됩니다. 따라서 401 오류 응답을 사용하는 처음 두 요청은 코드 숨김에 도달하지 않고 웹 서버에만 도달했습니다.
파이어 폭스 브라우저는 ajax 호출로 자바 스크립트 코드를 해석하고 실행하면서 점차적으로 "자동으로"권한을 부여하여 세 가지 HTTP 요청을 처리하는 것으로 추측해야합니다.
질문 : Firefox가 첫 번째 두 가지 실패한 http 요청을 거치지 않고 Firefox의 세 번째 버전 만 수행하도록하려면 어떻게해야합니까?
'항상 3 통화'3 통화는 브라우저에서 3 요청입니까? java-script와 ajax는 요청 당 단 하나의 호출이므로 요청하지 않으면 다른 호출이 생성되지 않습니다. 나는 더 많은 정보가 필요하다고 생각한다. – Seabizkit
@Seabizkit 표시된 코드는 한 번 호출되지만 세 가지 요청이 발생합니다. 이것은 단지 바이올린을 사용하여 볼 수 있습니다. 코드가 성공하고 코드 숨김에서 최종 응답 만 반환하고 402 개의 오류 메시지가 모두 표시되지 않습니다. – Roland
nah roland, 나는 불가능하다는 것을 99 % 확신합니다. '$ .ajax ({''1 호출, 문제는 다른 소스에서 왔음에 틀림 없다 ... – Seabizkit