source

요청에 대한 응답이 수신되지 않으면 어떻게 됩니까?재시도가 보입니다.

ittop 2023. 8. 15. 11:47
반응형

요청에 대한 응답이 수신되지 않으면 어떻게 됩니까?재시도가 보입니다.

제가 가지고 있는 질문은 아마도 브라우저와 관련된 질문에 가깝다고 생각합니다. 하지만 제가 웹 애플리케이션을 만들 때 답을 찾고자 하는 꽤 근본적인 질문이기도 합니다.

내 고객 사이드 코드에서 나는 하고 있습니다.$.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 RFC 8.2.4에 따라:

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

반응형