405 - 不允许用于访问此页的 HTTP 谓词

本文详细解释了IIS服务器上html页面仅支持GET请求而不支持POST请求的问题原因,并提供了具体的解决方案,包括如何在IIS管理工具中添加模块映射,以及在找不到特定模块时的安装步骤。

1、为什么会出现这个错误?

我们可以理解为在当前IIS服务器上,html页面只支持get请求,不支持post请求。

2、处理办法
登陆远程服务器,打开IIS管理工具,选择出现此问题的站点,点击进入“处理程序映射”–>”添加模块映射”,在请求路径录入“*.html”,模块选择“ServerSideIncludeModule”,可执行文件不用选,名称可以随便填一个(例如:ASD-html),然后点击“确认”即可。

如果在服务器上面找不到“ServerSideIncludeModule”模块,提示“ServerSideIncludeModule不是可识别的本机模块”,

我用的服务器是Windows server2008,打开服务器管理器,添加角色


安装“在服务器端的包含文件”,然后再打开IIS管理工具,添加模块映射就可以了

<think> 我们注意到用户的问题是关于在IIS中配置允许POST请求,但请求筛选中只有"HTTP谓词"而没有"HTTP方法"选项卡的情况。实际上,在IIS管理器界面中,“HTTP谓词”选项卡就是用来配置允许HTTP方法的(如GET、POST等)。在较新版本的IIS中,这个选项卡可能被命名为“HTTP谓词”,而旧版本可能叫“HTTP方法”,但功能相同。 因此,配置步骤与之前类似,只是选项卡名称同: ### 配置步骤(针对只有“HTTP谓词”选项卡的情况) 1. **打开IIS管理器** - 按`Win+R`,输入`inetmgr`打开IIS管理器。 - 选择目标网站或应用程序。 2. **配置请求筛选(允许POST谓词)** - 在功能视图中,双击**请求筛选**。 - 切换到**HTTP谓词**选项卡(这就是对应HTTP方法的配置)。 - 点击右侧的**允许...**按钮。 - 在弹出的对话框中输入`POST`,然后点击**确定**。 - 确保`POST`出现在允许谓词列表中[^1]。 3. **配置处理程序映射** - 这一步和之前一样,因为处理程序映射中的动词(Verb)设置独立于请求筛选。 - 在功能视图中,双击**处理程序映射**。 - 根据你的应用类型编辑相应的处理程序: - **ASP.NET应用**:编辑`PageHandlerFactory-Integrated`或`PageHandlerFactory-ISAPI-4.0_64bit`(根据你的应用程序池设置),在“请求限制”的“动词”选项卡中,确保包含`POST`(可以设置为`GET,POST,HEAD`或者直接输入`POST`,或者使用`*`表示所有动词)。 - **静态文件**:编辑`StaticFile`处理程序,同样在“请求限制”的“动词”选项卡中添加`POST`(注意:通常静态文件处理程序默认只允许GET、HEAD,添加POST需要谨慎,因为静态文件通常需要POST)。 - **ASP.NET Core**:确保`AspNetCoreModuleV2`处理程序已经包含了POST(通常默认允许所有动词)。 4. **检查匿名身份验证**(如果返回401错误) - 确保启用了匿名身份验证,并且匿名用户身份设置为应用程序池标识。 5. **重启IIS或应用程序池** - 更改配置后,重启对应的应用程序池或整个IIS(在命令行运行`iisreset`)以确保配置生效。 ### 通过web.config配置 如果你无法通过IIS管理器操作,或者希望直接修改配置文件,可以在网站或应用程序的根目录下的`web.config`文件中添加以下配置: ```xml <configuration> <system.webServer> <security> <requestFiltering> <verbs allowUnlisted="false"> <!-- 设置allowUnlisted为false表示只允许显式列出的谓词 --> <add verb="POST" allowed="true" /> <!-- 如果需要其他方法,例如GET,也需要添加 --> <add verb="GET" allowed="true" /> </verbs> </requestFiltering> </security> </system.webServer> </configuration> ``` 注意:`allowUnlisted="false"`表示禁止所有未明确允许HTTP方法(谓词)。因此,你需要将允许的方法都列出来。 ### 验证配置 使用PowerShell测试POST请求: ```powershell Invoke-WebRequest -Uri "http://localhost/yourpage.aspx" -Method POST -Body 'test=1' -ContentType "application/x-www-form-urlencoded" ``` 如果返回200状态码,则表示配置成功。 ### 常见问题 - **错误405:方法允许**:这通常是因为处理程序映射没有配置允许POST方法。请检查处理程序映射的动词设置。 - **错误404.15:未找到查询字符串过长**:这其实是请求筛选阻止了请求,但通常与查询字符串长度限制有关,与HTTP方法无关。如果是方法问题,请求筛选会返回404.6(在IIS7及以上版本中,对于允许HTTP方法,IIS会返回404.6,但在实际中也可能返回405)。 注意:在IIS中,请求筛选模块(requestFiltering)负责检查HTTP方法(谓词),如果请求使用了未允许的方法,IIS会返回404.6错误。但是,如果请求的方法被请求筛选允许,但处理程序映射中没有处理该动词的处理程序,则会返回405错误[^2][^3]。 因此,如果遇到405错误,重点检查处理程序映射;如果遇到404.6错误,则重点检查请求筛选中的HTTP谓词设置。 根据引用[3],405错误对应的描述是“用来访问面的HTTP谓词允许(方法允许)”,这通常是由处理程序映射引起的。 §§相关问题§§ 1. 在IIS中如何配置允许PUT和DELETE方法? 2. 为什么配置了允许POST方法后仍然返回405错误? 3. 如何通过IIS日志分析HTTP 405错误? 4. 如何在IIS中为同的文件类型(如.aspx和.html)设置同的HTTP方法? 5. 在IIS中,请求筛选模块和处理程序映射在处理HTTP方法时有什么区别? </think> 在 IIS 中,当请求筛选界面只显示 **"HTTP谓词"** 而没有单独的"HTTP方法"选项卡时,以下是允许 POST 请求的配置方法: ### 解决方案步骤 1. **打开请求筛选配置** - 在 IIS 管理器中定位到目标站点或应用 - 双击 **"请求筛选"** 功能 2. **在 HTTP 谓词允许 POST** ```powershell # 在"请求筛选"界面操作: 1. 切换到 [HTTP 谓词] 选项卡 2. 点击右侧 [编辑功能设置] 3. 勾选 [允许未列出的谓词] 或 4. 点击 [允许谓词] 并手动添加 "POST" ``` ![HTTP谓词配置界面示意图](https://example.com/iis-verbs.png) *图示:在 HTTP 谓词列表中添加 POST[^1]* 3. **验证配置效果** - 添加后确保 POST 出现在允许列表中 - 测试 POST 请求: ```powershell # PowerShell 测试命令 Invoke-WebRequest -Uri http://yoursite.com/api -Method POST -Body '{"data":"test"}' ``` ### 备用配置方法(web.config) 直接编辑站点的 `web.config` 文件: ```xml <configuration> <system.webServer> <security> <requestFiltering> <verbs allowUnlisted="false"> <add verb="POST" allowed="true" /> <!-- 显式允许POST --> <add verb="GET" allowed="true" /> <!-- 其他需要的方法 --> </verbs> </requestFiltering> </security> </system.webServer> </configuration> ``` ### 关键注意事项 1. **双重配置检查** - 同时确认处理程序映射是否允许 POST(如静态文件处理程序默认只允许 GET/HEAD) - 修改路径:`处理程序映射 → 编辑 → 请求限制 → 动词` 2. **权限配置** - 启用匿名身份验证:`身份验证 → 匿名身份验证 → 启用` - 设置应用程序池标识有写入权限(POST 请求常涉及数据修改) 3. **错误排查** | 错误代码 | 解决方案 | |----------|----------| | 404.6 | 请求筛选阻止 POST,检查谓词列表 | | 405 | 处理程序未配置 POST 动词 | | 401 | 检查身份验证和权限设置 | > **原理说明**:在 IIS 中,"HTTP 谓词" 选项卡就是用于管理 HTTP 方法(GET/POST/PUT 等)的配置界面。同 IIS 版本可能使用同标签,但功能一致[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值