这里的奥秘很神秘。我有一个使用Windows身份验证的ASP.NET MVC 4 Web应用程序,已保存超过18个月没有问题。最近,它被部署到一个新的网站,我遇到了以下,非常奇怪的行为。

我使用一个jQuery 1.8.2 $ .ajax调用POST数据到服务器端点来更新数据。这工作正常,除了在一个页面上,其中AJAX POST触发新的NTLM协商。在Chrome,IE和Firefox中也会出现同样的问题。虽然问题在所有的浏览器是相同的,它表现在自己有点不同的方式:

> Firefox:从服务器接收到401 Challenge响应,并打开一个用户名/密码对话框,要求在无限循环中输入凭据。取消凭据检查将导致请求失败并显示未经授权的响应。

> IE:服务器无响应,请求状态在网络监视器中显示为“(中止)”

> Chrome:服务器没有响应,请求状态在网络监视器中显示“(失败)”。

核心问题似乎是Connection:keep-alive头没有与有问题的AJAX请求一起发送,但在其他情况下。但是,底层JavaScript代码几乎相同,并且AJAX在也设置为使用Windows身份验证的开发环境中正确调用函数。

此外,尝试在beforeSend回调中设置连接请求标头没有任何效果。

任何洞察问题的根源,或隔离两个AJAX POST之间存在的任何差异的方式是最感谢。

工作代码和请求标头

$.ajax({

url: url,type: "POST",data: $("#myForm").serialize(),cache: false,success: function (response) {

}

});

Accept:*/*

Accept-Encoding:gzip,deflate

Accept-Language:en-US,en;q=0.8

Connection:keep-alive

Content-Length:621

Content-Type:application/x-www-form-urlencoded; charset=UTF-8

Host:www.xxx.yyy.zzz

Origin:http://www.xxx.yyy.zzz

Referer:http://www.xxx.yyy.zzz/app/resource/path

User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/42.0.2311.135 Safari/537.36

X-Requested-With:XMLHttpRequest

失败代码和请求标头

$.ajax({

url: url,data: data,success: function (data,status,xhr) {

}

});

WARN: Provisional headers are shown

Accept:*/*

Content-Type:application/x-www-form-urlencoded; charset=UTF-8

Origin:http://www.xxx.yyy.zzz

Referer:http://www.xxx.yyy.zzz/app/resource/item/1

User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/42.0.2311.135 Safari/537.36

X-Requested-With:XMLHttpRequest

我也看过Chrome chrome:// net-internals /#events查看器中的网络过程。这是来自失败请求的事件日志,它在偏离成功的请求的点。在失败的请求获得“HTTP / 1.1 401未授权”的情况下,成功的请求获得“HTTP / 1.1 200 OK”响应,大概是由于存在Connection:keep-alive头。

2303: URL_REQUEST

Start Time: 2015-04-28 13:53:41.788

t=14736 [st= 0] +REQUEST_ALIVE [dt=71]

t=14736 [st= 0] URL_REQUEST_DELEGATE [dt=0]

t=14736 [st= 0] +URL_REQUEST_START_JOB [dt=70]

--> load_flags = 2688000 (BYPASS_DATA_REDUCTION_PROXY | MAYBE_USER_GESTURE | REPORT_RAW_HEADERS | VERIFY_EV_CERT)

--> method = "POST"

--> priority = "LOW"

--> upload_id = "0"

--> url = "http://..."

t=14736 [st= 0] URL_REQUEST_DELEGATE [dt=0]

t=14736 [st= 0] HTTP_CACHE_GET_BACKEND [dt=0]

t=14736 [st= 0] URL_REQUEST_DELEGATE [dt=0]

t=14736 [st= 0] +HTTP_STREAM_REQUEST [dt=0]

t=14736 [st= 0] HTTP_STREAM_REQUEST_BOUND_TO_JOB

--> source_dependency = 2305 (HTTP_STREAM_JOB)

t=14736 [st= 0] -HTTP_STREAM_REQUEST

t=14736 [st= 0] +HTTP_TRANSACTION_SEND_REQUEST [dt=0]

t=14736 [st= 0] HTTP_TRANSACTION_SEND_REQUEST_HEADERS

--> POST ... HTTP/1.1

Host: www.xxx.yyy.zzz

Connection: keep-alive

Content-Length: 105

Accept: */*

Origin: http://www.xxx.yyy.zzz

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/42.0.2311.135 Safari/537.36

X-Requested-With: XMLHttpRequest

Content-Type: application/x-www-form-urlencoded; charset=UTF-8

Referer: http://www.xxx.yyy.zzz/app/resource/item/1

Accept-Encoding: gzip,deflate

Accept-Language: en-US,en;q=0.8

t=14736 [st= 0] HTTP_TRANSACTION_SEND_REQUEST_BODY

--> did_merge = true

--> is_chunked = false

--> length = 105

t=14736 [st= 0] -HTTP_TRANSACTION_SEND_REQUEST

t=14736 [st= 0] +HTTP_TRANSACTION_READ_HEADERS [dt=0]

t=14736 [st= 0] HTTP_STREAM_PARSER_READ_HEADERS [dt=0]

t=14736 [st= 0] HTTP_TRANSACTION_READ_RESPONSE_HEADERS

--> HTTP/1.1 401 Unauthorized

Content-Type: text/html

Server: Microsoft-IIS/7.5

WWW-Authenticate: Negotiate

WWW-Authenticate: NTLM

X-Powered-By: ASP.NET

X-UA-Compatible: IE=9

Date: Tue,28 Apr 2015 18:53:41 GMT

Content-Length: 1293

编辑

使用来自控制台的不同请求来回答下面的结果表(在Chrome下)。当前基本URL是http:// IPAddress

/ app / topic / item,并且所有测试只需执行$ .ajax({url:url,type:’POST’})

+--------------------------------------+----------------------------+

| URL | Response |

+--------------------------------------+----------------------------+

| http://IP/app/topic/item/1/subitem/1 | net::ERR_INVALID_HANDLE |

| //IP/app/topic/item/1/subitem/1 | net::ERR_INVALID_HANDLE |

| /app/topic/item/1/subitem/1 | net::ERR_INVALID_HANDLE |

| 1/subitem/1 | net::ERR_INVALID_HANDLE |

| 1/foo | 404 (Not Found) [expected] |

| 1 | 302 (Redirect) [expected] |

+--------------------------------------+----------------------------+

因为错误只影响一个控制器中的POST操作方法的一个子集,我最初认为这是一个服务器端问题,但是在发现缺少的连接头的问题后,它实际上似乎是一个客户端问题。究竟如何触发的问题仍然是我的一个谜。

我也验证了工作页面和有问题的页面的响应标头是相同的。最相关的是,在两种情况下都会返回Persistent-Auth:true头。

html ajax实现ntlm,jquery – 在一个页面上通过AJAX POST获取NTLM挑战相关推荐

  1. 如何在一个页面上使用多个KindEditor编辑器并将值传递到服务器端

    如何在一个页面上使用多个KindEditor编辑器并将值传递到服务器端 1.声明一个editor数组: 2.将之前的编辑器显示行代码: 3.传递KindEditor所填写的相关数据: 今天使用Kind ...

  2. 在页面上用$(#userName).val();获取不到值,提示$(#userName)未定义

    [size=medium]问题:在页面上用$("#userName").val();获取不到值,提示$("#userName")未定义 原因:[b][color ...

  3. 对页面上所有ajax的请求进行监听

    这段时间遇到个问题,就是需要对页面中的所有ajax请求进行监听,因为页面中涉及了很多的subapp,是不同人做的,我没有办法在他们那里进行监听,只能在一个大家都调用的文件里面写监听,我首先想到了jQu ...

  4. 绘图_origin在一个页面上绘制多个图像x1y1和x2y2

    目的:最近再做仿真的时候,分别做了按照路径d和时间t的仿真,为了验证两者的准确性,计划将路径d的数据转换为时间t的图像,看二者能否重合. 问题:路径d转换为时间t后数据成了不规则的数据,而时间t的变量 ...

  5. ajax中 submithandler,jQuery使用submitHandler中的AJAX验证,第二次点击提交?

    的submitHandler的工作是提交表单,不登记表单提交事件处理程序. 当formm提交事件被触发时,submitHandler会被调用,而不是提交您正在注册提交处理程序的表单,因此当表单提交事件 ...

  6. jquery的sortable拖拽排序问题,在页面上多次拖拽保存顺序之后,刷新页面,排序出现紊乱

    一.前言 这篇博客是因为我在做完拖拽保存之后,测试多次拖拽,然后刷新页面,发现保存的顺序出来紊乱.这就很无奈了啊,打印各项数据才发现,因为保存用的是ajax的方式,所以页面上的列表序号是固定的,比如列 ...

  7. Ajax请求,JQuery发送请求,Axios请求,Fetch请求总结

    常见的请求方式 1.Ajax请求 定义: 同步与异步的区别: Ajax的工作原理: 实现AJAX的基本步骤: Get请求: Post请求: 2.JQuery发送请求 Get请求: Post请求: 3. ...

  8. 页面上拉加载数据(也就是上拉实现分页)

    之所以发这个博客是因为网上百度了太多  没法直接套用  所以写这个   可以直接套用   先上代码截图 <script type="text/javascript"> ...

  9. ajax搜索思路,jquery创建一个ajax关键词数据搜索实现思路

    在web开发过程当中,我们经常需要在前台页面输入关键词进行数据的搜索,我们通常使用的搜索方式是将搜索结果用另一个页面显示,这样的方式对于搭建高性能网站来说不是最合适的,今天给大家分享一下如何使用 jq ...

最新文章

  1. Docker 容器技术 — Image
  2. html5 获取多媒体,基于HTML5的多媒体支持
  3. boost::hana::less_equal用法的测试程序
  4. Python模块包中__init__.py文件的作用(转载)
  5. python测试报告
  6. thinkphp视图中插入php代码
  7. java文件删除操作_Java文件复制删除操作合集
  8. 使用IDM下载软件下载百度云网盘里的资源,以Chrome浏览器为例
  9. M2Det: A Single-Shot Object Detector based on Multi-Level Feature Pyramid
  10. Vue 从零开始搭建PC端项目完整框架(附GitHub地址和Vue项目执行流程)
  11. eclipse安装反编译软件jd-gui
  12. 区块链(一) 初识区块链
  13. 前端-埋点-理念-通识-浅谈
  14. 集线器与网桥的原理和作用
  15. RecyclerView实现条目拖拽,左滑、右滑移除效果
  16. ubuntu 查看opencv以及opencv4版本
  17. 微型博客网站Twitter打假
  18. symbian3SDK怎样能兼容S60第三版五版的工程(转)
  19. HDU-2545 树上战争
  20. 一个月薪5k+的广州安全服务实习生的真实生活

热门文章

  1. 人脸识别技术原理及解决方案
  2. 华为海思人脸识别方案 海思 3516嵌入式 Linux系统人脸识别开发模组套件
  3. linux aio参数,linux内核aio功能
  4. Juc_并发编程目录
  5. XSL的一些基础知识!
  6. stm32L451比较器使用
  7. GDI+绘图轻松入门[5]-绘图坐标的理解和应用
  8. Mvc动态注册HttpModule详解
  9. 英飞凌硅麦可以接收到超声波吗?
  10. b站网页版改html,网页版b站怎么设置弹幕?网页bilibili怎么设置停止播放和调倍速?...