Итак, я пишу этот бэкэнд RESTful в Go, который будет вызываться с межсайтовыми HTTP-запросами, т.е. из контента, обслуживаемого другим сайтом (на самом деле, только другим портом, но политика одного и того же происхождения запускается, поэтому здесь мы).
В этом случае пользовательский агент в некоторых случаях отправляет запросы предполетных OPTIONS, чтобы проверить, безопасно ли отправлять фактический запрос.
Мой вопрос - как лучше всего справляться с этими предполетными запросами и удовлетворять их в контексте Go. Способы, которые я задумал, не очень элегантны, и мне интересно, есть ли другой подход к этому, о котором я не думал.
Используя стандартный пакет net/http
, я могу проверить метод запроса в функции обработчика, возможно, вот так:
func AddResourceHandler(rw http.ResponseWriter, r *http.Request) {
switch r.Method {
case "OPTIONS":
// handle preflight
case "PUT":
// respond to actual request
}
}
Я также могу использовать пакет Gorilla mux
и зарегистрировать обработчик предпросмотра "OPTIONS" для каждого соответствующего URL-адреса.
r := mux.NewRouter()
r.HandleFunc("/someresource/item", AddResourceHandler).Methods("PUT")
r.HandleFunc("/someresource/item", PreflightAddResourceHandler).Methods("OPTIONS")
Возможно, ответ на этот вопрос просто: Да, это ваши основные варианты. Но я думал, что вокруг этого может быть какая-то лучшая практика, о которой я не знаю.