요청에 대한 응답이 수신되지 않으면 어떻게 됩니까?재시도가 보입니다.
제가 가지고 있는 질문은 아마도 브라우저와 관련된 질문에 가깝다고 생각합니다. 하지만 제가 웹 애플리케이션을 만들 때 답을 찾고자 하는 꽤 근본적인 질문이기도 합니다.
내 고객 사이드 코드에서 나는 하고 있습니다.$.ajax
호출합니다. 이 게시물이 응답하는 데 시간이 걸릴 수 있습니다.제가 보고 있는 것은 요청이 다시 전송되는 일정 시간 이후입니다.
나는 그것이 나의 것이라고 생각했습니다.$.ajax
다시 전송하는 호출, 하지만 서버에서 POST 요청을 아무리 많이 봐도, 나는 오직beforeSend
콜백을 한 번 호출했습니다.제 코드가 두 번 이상 보내지 않는 것이 확실합니다. 브라우저가 다시 시도하는 것 같습니다.
Wireshark를 실행하고 게시 요청을 여러 번 볼 수 있기 때문에 서버가 요청을 한 번 이상 받고 있다는 것을 알고 있습니다.그래서 제 생각에는 이것이 HTTP와 관련이 있다고 생각하나요?즉, 일정 시간 내에 응답이 수신되지 않으면 요청이 다시 전송됩니까?
아래에 제 통화의 샘플이 있습니다.
$.ajax({
async: false,
type: 'POST',
url: '<%= url_for('importDevice') %>',
data: { device: val },
retryLimit: 0,
//callback
success: function(data) {
alert('calling import');
if ( data == 'nomaster')
{
// Display a warning toast, with a title
toastr.warning('You must set the Master Key first!', 'Warning');
$.ismasterset = false;
//reset the form contents after added
} else
{
$("div#content").html(data);
}
},
beforeSend: function(){
alert('in before send');
}
});
이것이 모두 관련 코드입니다. 'retryLimit'은 사용되지 않습니다. 코드에서 제거하지 않았을 뿐입니다. 문제는 코드를 넣기 전에 발생했습니다.
클라이언트 및 서버의 출력으로 편집됩니다.
ok '파이어폭스용 라이브 HTTP 헤더'를 설치했습니다.
'제너레이터' 탭에 단일 통화가 표시됩니다.
'#request# POST http://testhost/importdevice'
나는 그것을 보지 못합니다.POST
그런데 '무응답' 부분에서, 아마도 그것은 응답이 없기 때문일 것입니다.
제 웹 서버에서는 약 22초 간격으로 두 개의 통화가 표시됩니다.
[Sun Jan 13 03:08:45 2013] [debug] POST /importdevice (Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20100101 Firefox/17.0).
[Sun Jan 13 03:09:07 2013] [debug] POST /importdevice (Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20100101 Firefox/17.0).
와이어샤크에서도 같은 전화를 볼 수 있어요
및 "TCP"와않을 보내려고 입니다.SYN
재전송
새 업데이트
그것은 내 Ajax 전화와 아무 관련이 없는 것 같습니다.간단한 HREF로 버튼을 만들면 됩니다.
예
<a href="/importdevice?device=serverA" class="btn btn-success">TestDirect</a>
그러면 내 '라이브 HTTP 헤더 출력에서...단 하나의 예
#request# GET http://172.16.118.15/importdevice?device=serverA
하지만 서버 로그에 다시 한 번 기록됩니다.
[Sun Jan 13 03:20:25 2013] [debug] GET /importdevice (Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20100101 Firefox/17.0).
[Sun Jan 13 03:20:48 2013] [debug] GET /importdevice (Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:17.0) Gecko/20100101 Firefox/17.0).
그리고 서버의 와이어샤크에서도 두 배로 보고 있습니다.그리고 역시 내 서버 코드는 두 번이나 호출됩니다...이것은 저에게 정말 혼란스럽습니다.
무슨 일이 일어나고 있는지 설명하는 이 블로그 게시물을 확인하십시오. http://geek.starbean.net/ ?p=393
HTTP/1.1 클라이언트가 요청 본문을 포함하지만 "100-continue" 예상과 함께 Expect request-header 필드를 포함하지 않는 요청을 발송하고 클라이언트가 HTTP/1.1 오리진 서버에 직접 연결되지 않은 경우, 그리고 클라이언트가 서버로부터 상태를 수신하기 전에 연결이 닫혔다고 볼 경우,클라이언트가 요청을 다시 시도해야 합니다.
이러한 추가 요청을 허용하도록 웹 앱을 설계해야 합니다.그리고 Ajax 요청이 데이터베이스에 무언가를 쓰는 것과 같이 한 번만 수행하도록 하려면 요청을 동일한 잠재력으로 설계해야 합니다.참조: 등전위 작업이란 무엇입니까?
또한 GET 작업과 POST 작업의 차이점을 강조합니다. http://www.cs.tut.fi/ ~jkorpela/forms/forms.dll
일반적인 설계 관행:
- GET 작업은 동일한 성능으로 설계되어야 합니다.
- POST 작업은 데이터베이스 등에 기록할 때 사용합니다.
당신의 요청이 비동기가 아니라면 콜백을 설정하는 이유는 무엇입니까?
동기화 프로세스를 앞에 놓으려면 통화 전에 코드를 보내고 통화 후에 성공적인 콜백을 보냅니다.
비동기식 접근 방식을 원한다면 비동기식: true를 설정합니다.
또한 이 코드 라인이 잘못되었습니다.
url: '<%= url_for('importDevice') %>',
인용문을 보십시오: 다음과 같아야 합니다.
url: '<%= url_for("importDevice") %>',
아마도 그 제안들은 문제를 해결하지는 못할 것이지만 당신을 올바른 방향으로 인도할 것입니다.문제는 게시된 코드가 아닌 다른 곳에 있을 수 있습니다.
다시 질문으로 돌아가서: 브라우저일까요?나는 생각하지 않지만 밖에 뭐가 있는지 누가 알겠어요!!... 브라우저가 뭐죠?다른 것으로 시도해 보셨습니까?
Firefox와 Live httpHeaders 플러그인(설정 및 사용이 매우 용이함)을 사용해 보는 것이 좋습니다.서버 쪽에서 들어오는 것을 보는 대신 클라이언트 쪽에서 나가는 것을 볼 수 있습니다.
언급URL : https://stackoverflow.com/questions/14302512/what-happens-when-no-response-is-received-for-a-request-im-seeing-retries
'source' 카테고리의 다른 글
잘못된 레일 교차 출발지 요청 (0) | 2023.08.15 |
---|---|
Feign 클라이언트 + Spring Cloud(Brixton RC2)에서 동적 값을 가진 @Headers 사용 (0) | 2023.08.15 |
연결이 로컬 호스트인지 자바스크립트로 확인하는 방법은 무엇입니까? (0) | 2023.08.15 |
이 바둑 코드에서 SQL 구문 오류 1064가 발생하는 원인은 무엇입니까? (0) | 2023.08.15 |
Spring Batch에서 여러 데이터 소스 사용 (0) | 2023.08.15 |