programing

jQuery Ajax 게시 요청이 Chrome에서 보류 중인 상태로 고착

skycolor 2023. 8. 30. 21:32
반응형

jQuery Ajax 게시 요청이 Chrome에서 보류 중인 상태로 고착

JQuery 고객이 스프링 컨트롤러에 Ajax 게시 요청을 했습니다.서버 측에서는 오류가 기록되지 않았습니다.클라이언트 측에서는 요청이 매우 오랜 시간(분) 보류 상태로 유지된 후 ERR_SPDY_PROTOCOL_ERROR 또는 ERR_CONNECTION_CLOSED로 인해 실패할 수 있습니다.

이 문제는 Chrome에서는 발생할 수 있지만 Firefox에서는 발생할 수 없습니다.해당 버전이 70.0.3538.77임을 확인했으며, 다른 버전도 있을 수 있습니다.또한 이 문제는 다른 곳, 개발 또는 운영이 아닌 특정 애플리케이션 배포에서 발생합니다.

클라이언트는 해당 환경에서 HTTPS 2 요청을 보냅니다.개발 환경에서는 HTTP 1.1입니다.서버에서 모든 요청은 1.1로 기록됩니다.

명백한 이유 없이 요청이 진행되기 시작했지만, 이것은 반복적인 문제이며 해결하고자 합니다.문제가 발생하기 시작했기 때문에 재현할 수 없고 서버에 대한 연결이 너무 많은 것이 문제인지 확인할 수 없습니다(6개 이상).저는 세 개의 DNS 서버를 사용하는데, 그 중 마지막 서버는 구글의 8.8.8입니다.

서버 설정과 관련된 코드 수정 또는 힌트를 찾고 있습니다.나는 그것이 클라이언트 코드와 네트워킹의 조합이라고 거의 확신합니다.

문제가 아닌 것은 다음과 같습니다.

제가 시도한 것은 성공하지 못했습니다.

질문에 답하지 않는 것:

클라이언트 쪽에서는 브라우저 데이터를 지우고 소켓을 플러시하고 개인 브라우징/인식을 시도했습니다.

소켓을 인식하지 못하고 플러시하고 chrome://net-internals/#events에서 캐시를 비우는 것이 가끔 오류를 우회하는 유일한 방법입니다.

var formData = new FormData();

formData.append( /* ... */ );

//...

$.ajax({
    type: "POST",
    url: "/somepath/update",
    cache: false,
    data: formData,
    contentType: false,
    processData: false,
    success: function(result) {
        //...
    },
    fail: function(result) {
        //....
    },
    error: function( jqXHR, textStatus, errorThrown ){
        alert(textStatus + ":" + errorThrown);
    }
});

$.post를 사용한 별도의 요청이 진행되었습니다.

$.post("someotherpath/update", $("#someForm").serialize())
    .done(function (data) {
        //...
     })
     .fail(function (data) {
         //...
     })
     .always(function () {
         //...
     });

서버 측:

@RequestMapping(value="/somepath/update", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
public @ResponseBody String update(ModelClass model) {
    JSONObject result = new JSONObject();
    //...
    return result.toString();
}

관련이 있다면 다음과 같은 필터가 있습니다.유감스럽게도 지금은 더 이상 게시할 수 없습니다.

@Configurable
public class Filter1 extends OpenEntityManagerInViewFilter implements Filter{

    public void doFilterInternal(HttpServletRequest httpReq, HttpServletResponse httpResp, FilterChain chain)
        throws ServletException, IOException {
        //...
    }
}


@Configurable
public class Filter2 extends OncePerRequestFilter implements Filter{

    public void doFilterInternal(HttpServletRequest httpReq, HttpServletResponse httpResp, FilterChain chain)
        throws ServletException, IOException {
        //...
    }
}

@Order(/* very small integer */)
public class Filter3 extends OncePerRequestFilter {

}

예상되는 결과는 코드가 성공 콜백을 거쳐야 한다는 것입니다.대신 요청이 몇 분 동안 보류 상태로 유지된 다음 오류 콜백을 입력합니다.

$.post 부르고 있습니다.$.ajax몇 가지 옵션을 기본값으로 제공합니다.

$.post은 다음과 같습니다.contentType"application/x-www-form-urlencoded; charset=UTF-8"직렬화된 양식 데이터 페이로드와 일치합니다.

:$.ajaxcontentTypefalse이로 인해 브라우저가 비행 전 옵션 요청을 서버로 전송할 수 있으며, 이로 인해 사용자가 겪고 있는 동작이 다를 수 있습니다.

는 자한내용다같것좋읽다습니이는어보에 있는 세부 을 읽는 것을 합니다.jQuery.ajax()그리고 여기에 전달된 옵션을 기반으로 한 다양한 행동.

언급URL : https://stackoverflow.com/questions/53883085/jquery-ajax-post-request-stuck-on-pending-on-chrome

반응형