Невозможно определить причину "err_connection_reset" с вызовом AJAX - PullRequest
0 голосов
/ 11 февраля 2020

Обновлено 11 февраля

Работает веб-сайт ASP. NET MVC. На этом у нас есть одна страница с несколькими AJAX GET и одна пользовательская AJAX POST обратно на наш сервер. Для очень небольшого процента пользователей (но значительного числа) они получают «err_connection_reset» для своего POST. Похоже, что это происходит во многих браузерах и является недавним явлением.

Однако мы не можем продублировать это собственно с помощью любого браузера (используя клиентские машины по всему миру). У нас также есть буквально десятки тысяч пользователей, для которых это прекрасно работает.

Нам повезло, что у нас был один пользователь, который смог сообщить нам некоторые подробности из Chrome Инструментов разработчика:

a - Консоль показала ошибку для POST, которая просто заявляет "net :: ERR_CONNECTION_RESET"

b - Из записанного файла HAR мы можем увидеть детали этого события (некоторые данные заменены на ***):

{
"startedDateTime": "2020-02-07T19:09:32.786Z",
"time": 0.06441399999312125,
"request": {
    "method": "POST",
    "url": "http://****.*********.***/************/************",
    "httpVersion": "",
    "headers": [
        {
            "name": "Host",
            "value": "****.*********.***"
        },
        {
            "name": "Connection",
            "value": "keep-alive"
        },
        {
            "name": "Content-Length",
            "value": "864"
        },
        {
            "name": "Accept",
            "value": "*/*"
        },
        {
            "name": "X-Requested-With",
            "value": "XMLHttpRequest"
        },
        {
            "name": "User-Agent",
            "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36"
        },
        {
            "name": "Content-Type",
            "value": "application/json"
        },
        {
            "name": "Origin",
            "value": "http://****.*********.***"
        },
        {
            "name": "Referer",
            "value": "http://****.*********.***/************?************"
        },
        {
            "name": "Accept-Encoding",
            "value": "gzip, deflate"
        },
        {
            "name": "Accept-Language",
            "value": "en-US,en;q=0.9"
        },
        {
            "name": "Cookie",
            "value": "************"
        }
    ],
    "queryString": [],
    "cookies": [
        {
            "name": "************",
            "value": "************",
            "expires": null,
            "httpOnly": true,
            "secure": false
        }
    ],
    "headersSize": -1,
    "bodySize": 864,
    "postData": {
        "mimeType": "application/json",
        "text": "************"
    }
},
"response": {
    "status": 0,
    "statusText": "",
    "httpVersion": "",
    "headers": [],
    "cookies": [],
    "content": {
        "size": 0,
        "mimeType": "x-unknown"
    },
    "redirectURL": "",
    "headersSize": -1,
    "bodySize": -1,
    "_transferSize": 0,
    "_error": "net::ERR_CONNECTION_RESET"
},
"cache": {},
"timings": {
    "blocked": 0.06441399999312125,
    "dns": -1,
    "ssl": -1,
    "connect": -1,
    "send": 0,
    "wait": 0,
    "receive": 0,
    "_blocked_queueing": -1
},
"serverIPAddress": "",
"_initiator": {
    "type": "script",
    "stack": {
        "callFrames": [
            {
                "functionName": "send",
                "scriptId": "301",
                "url": "http://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js",
                "lineNumber": 1,
                "columnNumber": 80265
            },
            {
                "functionName": "ajax",
                "scriptId": "301",
                "url": "http://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js",
                "lineNumber": 1,
                "columnNumber": 77117
            },
            {
                "functionName": "n.ajax",
                "scriptId": "303",
                "url": "http://****.*********.***/bundles/************",
                "lineNumber": 0,
                "columnNumber": 2482
            },
            {
                "functionName": "************.************",
                "scriptId": "254",
                "url": "http://****.*********.***/bundles/************",
                "lineNumber": 0,
                "columnNumber": 69415
            },
            {
                "functionName": "************.************",
                "scriptId": "254",
                "url": "http://****.*********.***/bundles/************,
                "lineNumber": 0,
                "columnNumber": 67115
            },
            {
                "functionName": "dispatch",
                "scriptId": "301",
                "url": "http://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js",
                "lineNumber": 1,
                "columnNumber": 41771
            },
            {
                "functionName": "y.handle",
                "scriptId": "301",
                "url": "http://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js",
                "lineNumber": 1,
                "columnNumber": 39790
            }
        ]
    }
},
"_priority": "High",
"_resourceType": "xhr",
"pageref": "page_1"
}

Из раздела времени кажется, что этот вызов был заблокирован примерно на 64 микросекунды (вероятно, за другими вызовами AJAX), но он не смог поставить в очередь и никогда не был отправлено.

Я не вижу а) что может вызвать это и б) как глубже вникнуть в это. Любые предложения?

Обновление: 11 февраля

Анализируя файл HAR большего размера, я вижу, что он влияет только на POSTS, когда Content-Type равен "application / json».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...