Nano Hash - криптовалюты, майнинг, программирование

IE 10 HTTP 401 Ошибка на ajax POST

Я искал проблему и решил сделать возможно самое простое воспроизведение проблемы в надежде, что упрощенный вопрос поможет мне решить эту проблему.

Я получаю 401 при публикации в веб-службе через ajax в javascript. Я включу как можно больше информации, а также все шаги по устранению неполадок, которые я пробовал.

Я создал тестовую страницу в корне моего сайта и попробовал как обычный JS, так и jquery для вызова ajax с теми же результатами. Я включил jquery, закомментированный...

Страница

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//" "http://www.w3.org/TR/html4/loose.dtd">

<head>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>

<script type="text/javascript">
/*$(document).ready(function() {
    $('#button').click(function() {
        var ID = 2;
        var firstname = $('#First_Name').val();
        var lastname = $('#Last_Name').val(); 

        $.ajax({
            type: 'POST',
            url: '/service/name/service.aspx/ChangeName',
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            data: '{ "ID": "' + ID + '", "firstName": "' + firstname + '", "lastName": "' + lastname + '" }',
            success: function() {
                console.log('success');

            },
            error: function(d) {
                console.log(d.responseText);
            }
        });
    });
});*/

function runAjax() {
    //Create Http request depending on browser
    var xmlhttp;
        if (window.XMLHttpRequest)
          {// code for IE7+, Firefox, Chrome, Opera, Safari
          xmlhttp=new XMLHttpRequest();}
        else
          {// code for IE6, IE5
          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}

    xmlhttp.onreadystatechange=function(){
      if (xmlhttp.readyState==4 && xmlhttp.status==200){
        document.getElementById("myDiv").innerHTML=xmlhttp.responseText;}
      }

    // Function to create 
    var url = "/service/name/service.aspx/ChangeName";
    xmlhttp.open("POST",url,true);
    xmlhttp.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    var data=JSON.stringify({ "ID": "2", "firstName": "John", "lastName": "Doe" });
    xmlhttp.send(data);
}
</script>
</head>
<body>
<div id="myDiv">
      <table width="100%" cellpadding="3" cellspacing="0">
        <tbody>
        <tr>
            <td width="34%">
                <div align="right">
                    <strong>First Name: </strong>
                </div>
            </td>
            <td>
                <div>
                    <input name="First_Name" type="text"id="First_Name" size="20">
                </div>
            </td>
        </tr>
        <tr>
            <td>
                <div align="right">
                    <strong>Last Name: </strong>
                </div>
            </td>
            <td>
                <input name="Last_Name" type="text" id="Last_Name" size="20">
            </td>
        </tr>
      </tbody>
      </table>

      <div align="center">

        <input id="button" type="button" value="Update Student Details" onclick="runAjax();" style="margin:5px;">

        </div>
    </div>
</body>
</html>

Теперь во всех браузерах, кроме IE10, это работает нормально. В скрипаче это показывает, что IE получает ответ 401

Заголовки запроса скрипач

POST http://dev.mysite/service/name/service.aspx/ChangeName HTTP/1.1
Accept: */*
Content-Type: application/json; charset=utf-8
Referer: http://dev.mysite/test_page.html
Accept-Language: en-US
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)
Connection: Keep-Alive
Content-Length: 46
DNT: 1
Host: dev.mysite
Pragma: no-cache

{"ID":"2","firstName":"John","lastName":"Doe"}

Заголовки ответов скрипач

HTTP/1.1 401 Unauthorized
Content-Type: application/json; charset=utf-8
Server: Microsoft-IIS/7.0
jsonerror: true
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
X-Powered-By: ASP.NET
Date: Thu, 07 Mar 2013 01:12:05 GMT
Content-Length: 105
Proxy-Support: Session-Based-Authentication

Я включил отслеживание неудачных запросов на сервере, и это информация, которую он дает мне для этого вызова:

Журнал неудачных запросов iis

<сильный>1. -GENERAL_REQUEST_START

<сильный>2. -FILTER_START

  • Имя фильтра — C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_filter.dll

<сильный>3. -FILTER_END

<сильный>4. -AspNetStart

  • Идентификатор соединения – 0
  • Идентификатор контекста – {00000000-0000-0000-6425-0080000000BF}
  • Данные1 – POST
  • Данные2 — /service/name/service.aspx
  • Данные3

<сильный>5. -GENERAL_REQUEST_END

  • Отправлено байтов – 359
  • Получено байтов – 440
  • Статус HTTP – 401.
  • HttpSubStatus – 0

Вещи, которые я обнаружил, упростив запрос ajax, заключались в том, что это не только проблема Windows 8, и включение режима совместимости также не работает.

Я попытался отключить аутентификацию в режиме ядра в IIS, я трижды проверил разрешения для папки веб-службы, следовал этим советам, я даже пытался разместить веб-службу в том же каталоге, что и страница. Все с тем же результатом... Мы очень признательны за любое направление или помощь.


Ответы:


1

Я знаю, что это старый вопрос, но я столкнулся с ним, потому что у меня была аналогичная проблема. Однако это сработало для меня - как только я добавил это в web.config, я перестал получать ошибку 401:

<webservices>
    <protocols>
        <add name="HttpGet"></add>
        <add name="HttpPost"></add>
    </protocols>
</webServices>
09.12.2016

2

Просто интересно, та же проблема, что и у меня.

Добавление косой черты в конце URL-адреса устраняет проблему в IE 10? например

/service/name/service.aspx/ChangeName/

вместо

/service/name/service.aspx/ChangeName

Если это так, то Эрик Лоуренс из Fiddler и IE объясняет это здесь, http://blogs.msdn.com/b/ieinternals/archive/2010/11/22/internet-explorer-post-bodies-are.-zero-bytes-in-length-when-authentication-challenges-are-expected.aspx

21.10.2013
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

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