我正在使用带有Java Lambda后端的AWS API网关。 在使用Angular 4的朋友试图提出请求之前,一切都很好。他不断得到:
阻止跨源请求:同源策略禁止读取 URL上的远程资源(原因:CORS标头 '访问控制允许来源'丢失)。
我通过网关启用了CORS:
尽管如此,错误仍然存在。我应该修改什么?
感谢。
伊恩的评论: 我使用输出/输入流,所以我的输出,根据你的评论我尝试如下,但仍然没有成功。有任何想法吗 ?
private void sendResponse(JSONObject body, int statusCode, OutputStream outputStream)
{
OutputStreamWriter writer;
JSONObject responseJson = new JSONObject();
JSONObject responseHeadersJson = new JSONObject();
responseHeadersJson.put("Access-Control-Allow-Origin","*");
responseHeadersJson.put("Access-Control-Allow-Headers","Content-Type");
responseJson.put("headers",responseHeadersJson);
responseJson.put("statusCode", statusCode);
responseJson.put("body", body.toJSONString());
try {
writer = new OutputStreamWriter(outputStream, "UTF-8");
writer.write(responseJson.toJSONString());
writer.close();
} catch (IOException e) {
System.out.println("Outputstream Error "+e);
}}
答案 0 :(得分:1)
我可以看到您正在使用代理资源。
这意味着您正在控制从Lambda返回的响应。还需要通过添加origin头来在响应上配置CORS。
构建响应时,需要通过传递域或*来添加cors头。
我已经构建了一个可以用作示例的ResponseBuilder:
public ResponseBuilder originHeader(String domain) {
headers.put(ACCESS_CONTROL_ALLOW_ORIGIN, domain);
return this;
}
private void initDefaultHeaders() {
headers.put(ACCESS_CONTROL_ALLOW_HEADERS, "Content-Type");
}
public Response build() {
this.initDefaultHeaders();
return new Response(statusCode, headers, body);
}
如果您没有使用代理资源,那么您的配置就足够了。