2014-04-24 82 views
1

我有一個http方法錯誤,當請求中發送了不正確的http方法時執行。405狀態代碼沒有正確返回響應

當我設置狀態碼爲405時,請求返回502壞的網關。

我的錯是:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<RaiseFault async="false" continueOnError="false" enabled="true" name="invalid-htttp-method-fault"> 
    <DisplayName>invalid htttp method fault</DisplayName> 
    <FaultRules/> 
    <Properties/> 
    <FaultResponse> 
     <Set> 
      <Headers/> 
      <Payload contentType="application/xml"> 
       <Fault> 
        <Code>405</Code> 
        <Description>Method Not Allowed</Description> 
</Fault> 
     </Payload> 
      <StatusCode>405</StatusCode> 
      <ReasonPhrase>Method Not Allowed</ReasonPhrase> 
     </Set> 
    </FaultResponse> 
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> 
</RaiseFault> 

如果我改變

<StatusCode>405</StatusCode> 
       <ReasonPhrase>Method Not Allowed</ReasonPhrase> 

<StatusCode>403</StatusCode> 
       <ReasonPhrase>Method Not Allowed</ReasonPhrase> 

我能看到的響應有效負荷是完全恢復。當我使用405返回的響應是:

{"fault":{"faultstring":"Received 405 Response without Allow Header","detail":{"errorcode":"protocol.http.Response405WithoutAllowHeader"}}} 

回答

3

我能夠重現,你所面臨的具體問題,並做一些更多的研究,我發現,HTTP 405響應必須包括一個允許標頭

嘗試通過將報頭改變你的錯政策 -

 <Headers> 
     <Header name="Allow">YOUR ALLOWED METHODS LIST</Header> 
     </Headers> 

這樣做,你不應該更多地獲得502網關,並會得到你所期待的迴應。

我希望這會有所幫助。

謝謝!

+0

是的,這解決了我的問題。謝謝 ! –

0

啊....有趣。響應405需要根據HTTP規範的允許標題(請參閱http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html)。因此,Apigee錯誤是告訴你,你需要一個允許頭添加到您的FaultResponse這樣的:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<RaiseFault async="false" continueOnError="false" enabled="true" name="Fault-405"> 
    <DisplayName>Fault 405</DisplayName> 
    <FaultRules/> 
    <Properties/> 
    <FaultResponse> 
     <Set> 
      <Headers> 
      <Header name="Allow">GET, PUT, POST, DELETE</Header> 
      </Headers> 
      <Payload contentType="text/plain">This wasn't supposed to happen</Payload> 
      <StatusCode>405</StatusCode> 
      <ReasonPhrase>405 Rules</ReasonPhrase> 
     </Set> 
    </FaultResponse> 
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> 
</RaiseFault> 

所以在<套裝>塊添加允許動詞,你應該冷靜。

相關問題