кросс-сервлет теоретический вопрос сервлета - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть теоретическое сомнение по поводу реализации 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!");
    }
}

В приведенном выше примере заказ анализируется и сохраняется в базе данных.прежде чем даже проверять, разрешен ли домен, из которого поступает запрос.

Эта вещь кажется абсурдной, так как же это работает в действительности?

1 Ответ

2 голосов
/ 20 сентября 2019

Попробуйте эту статью: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

Вкратце: для запросов, которые могут изменять пользовательские данные, CORS указывает предварительный запрос, который запрашивает сервер назначения, примет ли он запрос с данным методом, инабор заголовков.(например, POST и Content-type) без фактической отправки запроса.Браузер реализует это прозрачно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...