0

我目前正在尝试解决我们在使用从 Angular 调用的 FN 项目函数查询数据库时遇到的 CORS 问题。fnproject/fn-java-fdk:1.0.83FN函数是用 Java(数据库。数据库以查询结果进行响应,查询结果通过 FN 函数以适当的响应传递回 UI。

我尝试将 CORS 标头作为 htxc.setResponseHeader() 和 htxc.addResponseHeader()。我还尝试更改 func.yaml 以在其中包含 CORS 协议,而不是在函数内部,但这不起作用。此外,我尝试将"*"Access-Control-Allow-Origin头中的 更改为我们也从中发出请求的特定 URL。我们还考虑添加许多不同的标头,Access-Control-Allow-Headers希望其中一个可以解决问题。


import com.fnproject.fn.api.httpgateway.HTTPGatewayContext;
...

public class query_database {

    /**
     * @param input is a byte[] array with input, contains the request information
     * @return List<dbObject> A list of DB Objects
     */
    public List<dbObject> query(byte[] input, HTTPGatewayContext htxc){


        // Takes care of the HTTP Gateway context
        htxc.setResponseHeader("Access-Control-Allow-Origin", "*");
        htxc.addResponseHeader("Access-Control-Allow-Methods", "POST, GET");
        htxc.addResponseHeader("Access-Control-Allow-Headers", "Authorization, Origin, X-Requested-With, Content-Type, Accept, Content-Length, X-Experience-API-Version, X-Prototype-Version, Token, X-Auth-Token");
        htxc.addResponseHeader("Access-Control-Allow-Credentials", "true");

        if (htxc.getMethod().equals("OPTIONS")) {
            return Collections.emptyList();
        }

        String str = new String(input);
        JSONObject json = new JSONObject(str);;

        Request request = new Request();
        String system = json.getString("system");
        request.setSystem(system);

        queryFunc queryFunc = new queryFunc();

        try {

            return queryFunc.makeQuery(request);

        } catch(DBConnection | HttpException |IOException | emptyStringException e) {

            return Collections.emptyList();

        }
    }
}

在我们正在制作的 Angular 7 UI 中,当我们在 Chrome/Firefox 中打开它时会出现以下错误:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://server.com:8080/t/function/function-trigger. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).  (unknown)

尽管在 Java 代码中设置了“Access-Control-Allow-Origin”响应标头,但仍然如此。除此 CORS 错误外,该函数正常工作,因此我们相当确信它与标头有关。例如,JSON 响应是正确的。

有什么想法吗?当前的标头方法可能存在问题,或者它也可能在 Angular 方面。让我知道是否还需要澄清这个问题。

4

0 回答 0