我希望POST
将数据格式化为网络服务器的默认页面,例如:
POST http://errorreporting.example.com/ HTTP/1.1
我希望服务器负责302
将客户端重定向到POST
应该去的地方。服务器上的default.asp
文件执行此任务(which is the technique Microsoft recommends),执行Redirect
:
的default.asp:
<%
Response.Redirect "SubmitError.ashx"
%>
当我只是浏览服务器时:
GET http://errorreporting.example.com/ HTTP/1.1
我从服务器得到预期的响应:
HTTP/1.1 302 Object moved
Server: Microsoft-IIS/5.0
Location: SubmitError.ashx
...
但当我POST
到服务器时:
POST http://errorreporting.example.com/ HTTP/1.1
服务器对我非常脾气暴躁:
HTTP/1.1 405 Method not allowed
Connection: close
Allow: OPTIONS, TRACE, GET, HEAD
...
我希望服务器能够将客户端重定向到相应的提交URL
,而不是使用对客户端进行硬编码网址。当然,这是因为URL可以(即已经改变):
http://errorreporting.example.com/SubmitError.asp
http://errorreporting.example.com/SubmitError.aspx
http://errorreporting.example.com/SubmitError.ashx
http://errorreporting.example.com/ErrorReporting/Submit.ashx
http://errorreporting.example.com/submiterror.php
http://errorreporting.example.com/submit/submiterror.ashx
等
注意:如果我更改URL
以包含文档位置:
/* SErrorReportingUrl = 'http://www.example.com:8088/ErrorReporting/SubmitError.ashx';
SErrorReportingUrl = 'http://www.example.com/ErrorReporting/SubmitError.ashx';
SErrorReportingUrl = 'http://errorreporting.example.com:8088/ErrorReporting/SubmitError.ashx';
SErrorReportingUrl = 'http://errorreporting.example.com/SubmitError.ashx';
SErrorReportingUrl = 'http://errorreporting.example.com';
SErrorReportingUrl = 'http://errorreporting.example.com/SubmitError.ashx';
*/
SErrorReportingUrl = 'http://errorreporting.example.com/submit/SubmitError.ashx';
工作正常:
HTTP/1.1 200 OK
答案 0 :(得分:3)
原来让IIS支持POST
并没有真正帮助。
我正在使用XMLHttpRequest
来执行POST
。几乎所有XMLHttpRequest
的实现(例如 Chrome,Internet Explorer,MSXML)都有一个错误,它在执行GET
而不是POST
之后执行在重定向之后。
W3C's XMLHttpReqest specification表示应该遵循重定向并重新发出请求:
如果响应是HTTP重定向:
如果重定向不违反安全性 (例如same origin), 无限循环预防措施,以及 方案得到支持,透明 观察时遵循重定向 same-origin request event rules。
注意:HTTP会对用户提出要求 关于保存的代理人 重定向期间的request method和request entity body以及 要求最终用户收到通知 某些种类的自动 重定向。
here's a site您可以在浏览器的XmlHttpRequest
实施中测试错误。
最后,我将解决 IIS 错误和XMLHttpRequest
错误,让我的“默认”页面执行302 redirect
所有的操作,但是返回200 OK
:
HTTP/1.1
的200 OK
强>
Connection: close
Date: Sun, 27 Jun 2010 13:28:14 GMT
Server: Microsoft-IIS/6.0
的Location: http://errorreporting.example.com/submit/SubmitError.ashx
强>
Content-Length: 92
Content-Type: text/html
Cache-control: private
<HTML><BODY>This content has moved <A href="submit/SubmitError.ashx">here.</A></BODY></HTML>
我强迫客户做两次点击 - 不妨让它正常工作。
答案 1 :(得分:0)
我正在Express / Node上运行Vue.js。后端在服务器端口3300上运行,但是我们不想公开公开该端口。
我安装了需求(Application Request Writing和URL Rewrite),然后添加了入站规则以将后端请求重写为Express,但我一直收到405(不允许使用方法)。
最终我从Stefano Scerra's Blog那里收集了一些想法。
这是我最后的web.config:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Handle History Mode and custom 404/500" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_URI}" pattern="^/(api)" negate="true"/>
</conditions>
<action type="Rewrite" url="/" />
</rule>
<rule name="api" stopProcessing="true">
<match url="^api/(.*)$" />
<action type="Rewrite" url="http://10.1.1.217:3300/{R:1}" logRewrittenUrl="true" />
</rule>
</rules>
</rewrite>
<tracing>
<traceFailedRequests>
<add path="*">
<traceAreas>
<add provider="WWW Server" areas="Filter" verbosity="Verbose" />
</traceAreas>
<failureDefinitions timeTaken="00:00:00" statusCodes="100-999" />
</add>
</traceFailedRequests>
</tracing>
</system.webServer>
</configuration>