2010-06-25 50 views
3

我想POST表單數據到網絡服務器的默認頁面,當如:IIS:405(方法不允許)發佈默認頁

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對客戶端進行硬編碼。這是當然的,因爲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 

回答

2

原來讓IIS支持POST不真的有幫助。我使用XMLHttpRequest執行POST s。 XMLHttpRequest的幾乎所有實現(,例如 Chrome,Internet Explorer,MSXML)在執行重定向之後執行GET而不是POST有一個錯誤。

W3C's XMLHttpReqest specification說,重定向應遵循請求補發:

如果響應是一個HTTP重定向:

如果重定向不違反安全 (這是same origin爲例), 無限循環注意事項,並支持 方案,透明地 遵循重定向,同時觀察 same-origin request event rules

注:HTTP放在關於 的request methodrequest entity body重定向中保存用戶 代理要求,並且還 要求最終用戶通知的 某些種類的自動 改向。

而且here's a site在那裏你可以測試瀏覽器的XmlHttpRequest執行錯誤。


最後,我要工作的各地IIS錯誤和XMLHttpRequest漏洞,通過讓我「默認」頁面所做的一切,一個302 redirect會,但返回200 OK代替:

HTTP/1.1200 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> 

我正在迫使客戶無論如何做兩個安打 - 可能也有它工作的權利。