【发布时间】:2020-01-21 06:10:17
【问题描述】:
我对 CORS 的实现存在理论上的疑问。
启用跨域请求的一种方法是在响应上设置特定的 Header:
private void setAccessControlHeaders(HttpServletResponse resp) {
resp.setHeader("Access-Control-Allow-Origin", "http://www.allowed.domain.com");
resp.setHeader("Access-Control-Allow-Methods", "POST");
}
我的问题是:如果我在response中设置了header(在request-response链的末端),说明我收到的request已经被处理过了,造成副作用 ,然后程序根据响应中是否存在此标头来决定是否必须发回响应。
例如:
public class MyServlet extends HttpServlet {
//...
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws Exception{
Order order = (Order) parseBodyRequest(req);
orderRepository.save(order); //if I check the allowed domains later, I can get serious side effects!
resp.setHeader("Access-Control-Allow-Origin","http://www.allowed.domain.com");
resp.getWriter().println("Order n."+ order.getId()+ "has been saved successfully!");
}
}
在上面的例子中,订单被解析并保存到数据库中,甚至在检查请求来自的域是否被允许之前。
这件事看起来很荒谬,那么它在现实中是如何运作的呢?
【问题讨论】:
标签: java servlets cors http-headers