2016-01-11 42 views
0

我使用Angular.js與Java的AppEngine上。
對於每個HTTP請求,Angular.js在實際請求之前發出OPTIONS請求,這會爲我返回一個HTTP 404錯誤。
有人可以告訴我爲什麼嗎?404在谷歌的AppEngine OPTIONS方法與Java和Angular.js

在AppEngine上如何啓用OPTIONS方法的配置?

編輯:我創建了一個過濾器來處理OPTIONS請求。現在我添加允許標頭GET,POST,DELETE,PUT,OPTIONS,HEAD作爲值並以狀態代碼響應。但它仍然顯示404

+0

它取決於你的服務器端框架。你用哪個?它不是簡單的「啓用」,你必須爲這樣的請求編寫處理程序。可能是普通的servlet,儘管 –

+0

我正在使用Google App Engine和Google Cloud Endpoints。 – Harikrishnan

+0

現在,我正在響應200確定標頭設置爲允許:GET,POST,DELETE,PUT,OPTIONS,HEAD。仍然顯示404 – Harikrishnan

回答

0

終於得到它的工作。 我寫了這樣的代碼:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
    HttpServletResponse resp = (HttpServletResponse) response; 
    HttpServletRequest req = (HttpServletRequest) request; 
    resp.setHeader("Cache-Control", "max-age=3600"); 
    resp.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
    resp.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE, OPTIONS"); 
    resp.setHeader("Access-Control-Allow-Origin", "www.myapp.com"); 
    resp.setHeader("Access-Control-Allow-Credentials", "true"); 
    if (req.getMethod().equals("OPTIONS")) { 
     resp.flushBuffer(); 
    } else { 
     chain.doFilter(request, resp); 
    } 
} 

我只是寫了resp.setHeader(「訪問控制允許來源」,「*」);之前。 寫完整個標題後,它開始工作。

+0

'resp.setHeader(「Access-Control-Allow-Origin」,「*」)'不會更改404的服務器行爲,並且您不需要將CORS標頭除外選項。也'*'來源不安全 –

+0

謝謝你的建議。我會改變它。 – Harikrishnan