在使用libGDX的GWT(HTML)模块中,HTTPResponse返回null

时间:2016-05-26 05:36:43

标签: gwt libgdx cors

使用LibGDX,我正在创建一个HTTP请求。 这在Android,iOS和桌面上运行良好,但在GWT(HTML)上,返回HTTPResponse为空。 在Chrome的开发者模式中,我看到:

No 'Access-Control-Allow-Origin' header is present on the requested resource. 

我环顾四周并了解它与跨源资源共享(CORS)有关,但到目前为止还无法使其工作。

1 个答案:

答案 0 :(得分:0)

审核了具有相同问题的其他人的条目(例如:https://github.com/libgdx/libgdx/issues/1433),我设法解决了这个问题。

重点是,这不是你可以在LibGDX实现上解决的问题。您需要在服务器端配置这些内容,以便浏览器可以处理跨源请求。 (我仍将其标记为LibGDX,因为这是将LibGDX代码移植到GWT时自然会遇到的问题。)

本网站根据您使用的技术编制如何修改服务器以处理此类请求的列表:http://enable-cors.org/server.html

就我而言,在Google App Engine上使用Java,在服务器端我修改了HttpServletResponse的标题,如下所示处理预检处理:

public class MyClass extends HttpServlet {


@Override
    protected void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
    {
        // pre-flight request processing
        resp.setHeader("Access-Control-Allow-Origin", "*");
        resp.setHeader("Access-Control-Expose-Headers", "*");
        resp.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
        resp.addHeader("Access-Control-Allow-Headers", "Content-Type, WHATEVER_PARAM_YOU_MAY_NEED_IN_YOUR_HEADER");

    }

    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        /* IMPLEMENTATION */
        resp.addHeader("Access-Control-Allow-Origin", "*");
        resp.addHeader("Access-Control-Expose-Headers", "*");
        resp.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
        resp.addHeader("Access-Control-Allow-Headers", "*");
        resp.addHeader("Content-Type", "text/csv");
        resp.getWriter().append(MY_ANSWER_STRING);
        //out.println();
    }
}