У меня есть теоретическое сомнение по поводу реализации CORS.
Один из способов разрешить запросы из разных источников - установить конкретный заголовок для ответа:
private void setAccessControlHeaders(HttpServletResponse resp) {
resp.setHeader("Access-Control-Allow-Origin", "http://www.allowed.domain.com");
resp.setHeader("Access-Control-Allow-Methods", "POST");
}
Мой вопрос: еслиЯ устанавливаю заголовок в ответе (который находится в конце цепочки запрос-ответ), это означает, что полученный мной запрос уже обработан, побочные эффекты вызваны, и затем программа решает, отвечает ли ответдолжен быть отправлен обратно или нет, в зависимости от наличия этого заголовка в ответе.
Например:
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!");
}
}
В приведенном выше примере заказ анализируется и сохраняется в базе данных.прежде чем даже проверять, разрешен ли домен, из которого поступает запрос.
Эта вещь кажется абсурдной, так как же это работает в действительности?