问题简介

每当遇到http错误代码为400,代表客户端发起的请求不符合服务器对请求的某些限制,或者请求本身存在一定的错误。

目前400错误经常出现在用户认证阶段,当一个用户从属于过多的域时,在Kerberos认证阶段会将域信息发送给服务器,从而导致请求字段长度超过服务器设置的上限。

问题重现

  1. 更改注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\http\Parameters
    MaxFieldLength = 10 (hex)
  2. 通过以下命令重起系统http服务 (需要管理员权限) 
    Net stop http
    Net start http
  3. 通过以下命令重起iis服务
    IISRESET
  4. 通过浏览器访问服务器网页

调试方法

400错误产生自http级别,服务器端http.sys检测到任何与其配置不符合的请求会直接回复400错误给客户端,同时在C:\Windows\System32\LogFiles\HTTPERR\httperr.log文件中记录日志表明失败原因。

Http error log

#Software:Microsoft HTTP API 2.0

#Version:1.0

#Date:2012-09-05 05:01:22

#Fields:date time c-ip c-port s-ip s-port cs-version cs-method cs-uri sc-statuss-siteid s-reason s-queuename

2012-09-0505:01:22 ::1%0 20567 ::1%0 80 HTTP/1.1 GET / 400 - FieldLength

也可以通过IE Developer Tool来追踪返回代码。

打开IE, 按F12打开Developer Tool

在network选项卡上点击StartCapture按钮

浏览网页,查看返回码

解决方案

方案一

减少请求中发送的字段长度,使其符合服务器规定。如果该问题是因为该用户加入了过多域组,那就要从一些组中退出来以减少请求长度。

方案二

更改服务器设置,在注册表中更改MaxFieldLength和MaxRequestBytes设置的大小。

具体应该设为多大呢?

可以根据这个链接提供的方式计算token的大小http://support.microsoft.com/kb/327825

然后把MaxFieldLength和MaxRequestBytes的大小设置为token大小的4/3。

如果不想计算,可以安装一个fiddler在客户端,清IE cache,然后发送一个请求然后查看统计信息。一共发送了多少字节可以通过以下方式来查看。

方案三

改用NTLM取代Kerberos认证方式,这样域组信息不会被发送,但是这要根据实际环境需求而定,如果需要用到Kerberos delegation功能,肯定不能改为NTLM。另外Kerberos相对NTLM是一种更为安全的认证方式,所以该方案在选择的时候要更加慎重。

下面这个链接有对http.sys中相应的注册表项的详细介绍,可以通过它来查看windows可以通过那些配置来控制http协议层的行为。

Http.sysregistrysettingsforIIS

http://support.microsoft.com/kb/820129/en-us

参考文档

http://support.microsoft.com/kb/2020943

http://support.microsoft.com/kb/820129/en-us

http://support.microsoft.com/kb/327825

Http 400错误重现实验及解决办法相关推荐

  1. Http 401错误重现实验及解决办法

    根据http协议对状态码的定义,401代表未经授权的访问.在IIS中在401的基础上定义了一系列的子状态码来代表各种不同情况下未经授权访问的具体原因. 401.1 - Logon failed. -登 ...

  2. 401错误信息页html,Http 401错误重现实验及解决办法

    根据http协议对状态码的定义,401表明未经受权的访问.在IIS中在401的基础上定义了一系列的子状态码来表明各类不一样状况下未经受权访问的具体缘由. html 401.1 - Logon fail ...

  3. Http 403错误重现实验及解决方法

    问题介绍 403是Web服务器返回的一种非常常见的错误代码,Http协议中对403错误定义如下, 403 Forbidden The server understood the request, bu ...

  4. 【转】error while loading shared libraries: xxx.so.x 错误的原因和解决办法

    原博客地址:http://www.cnblogs.com/Anker/p/3209876.html#undefined error while loading shared libraries: xx ...

  5. EF Power Tool 参数错误 HRESULT:0x80070057 (E_INVALIDARG)) 解决办法

    EF Power Tool 参数错误  HRESULT:0x80070057 (E_INVALIDARG)) 解决办法 从EF4.1开始引入了Code First的开发模式,并提供了工具Entity ...

  6. Invalid bound statement (not found)错误的原因和解决办法

    Invalid bound statement (not found)错误的原因和解决办法 在maven项目中有专门的resources文件夹用来存放各种配置文件,但是不一定都会放在里面,如果配置文件 ...

  7. apache安装错误error: APR notfound解决办法

    apache安装错误error: APR notfound解决办法 linux安装时安装种类不同,一些组件包可能不会被安装,导致linux下安装软件的时候缺这个缺那个,今天为大家介绍linux安装ap ...

  8. 占书明:outlook发邮件时提示“出现意外错误”的原因及解决办法!

    占书明:outlook发邮件时提示"出现意外错误"的原因及解决办法! 有个使用者,在发送邮件时截了个图给我,如下"出现意外错误",便无法发送邮件: 使用环境:w ...

  9. 2021-01-07关于Linux段错误的原因和解决办法(初学者)

    初学者Linux出现段错误的原因和解决办法 一.使用非法指针(内存地址),包括未经初始化的野指针和内存已经释放的指针.不存在的地址.受系统保护的地址或只读地址.(此类段错误最常见) 解决办法: GDB ...

最新文章

  1. BugKuCTF 加密 这不是摩斯密码
  2. 【OSG】OSG软件模块结构
  3. PyTorch框架学习七——自定义transforms方法
  4. c语言log_C语言最大难点揭秘:编程的祸根!
  5. NSA和CISA 联合发布Kubernetes 安全加固指南
  6. NUC1445 Euclid's Game【博弈】
  7. 【优化调度】基于matlab粒子群算法求解水火电系统经济、环境运行单目标调度优化问题【含Matlab源码 1138期】
  8. 病毒木马防御与分析实战 1
  9. 工行u盾显示316_工行网银客户端检测不到U盾的解决方法
  10. 【干货】前端开发者最常用的六款IDE
  11. 解决TypeError: conv2d() received an invalid combination of arguments
  12. 一堂难忘的计算机课作文,难忘的一节微机课_800字
  13. 开源的高性能Java集合:GNU Trove介绍
  14. 安卓蓝牙开发(1)BLE蓝牙基础知识和一般开发流程
  15. X Lossless Decoder for mac(XLD无损音频转码软件)
  16. 用VScode绘制函数调用流程图
  17. gitbook 插件:Emoji 表情
  18. 基于SVM算法的股票预测分析
  19. oracle ora-各种常见java.sql.SQLException归纳
  20. 东北大学暑期acm夏令营第四天

热门文章

  1. 网络拥塞控制,对越远的流量越宽容
  2. 微信小程序推荐大全之201~300个
  3. 毕业生招聘信息的发布与管理系统(论文+设计)
  4. matlab中的dsolve函数是用来解决什么问题的?请详细解释并给我几个简单的例子...
  5. 经典编程书籍大全-python
  6. 牛客bfs:工厂流水线
  7. 阅读《人类简史》思考的几个问题。
  8. APP推广前,你应该知道的事
  9. payjs 源码_自动发卡系统(包含前台以及后台管理系统),对接payjs支付(无须企业认证)...
  10. EXPLAIN 使用