2016-12-01 14 views
2

У меня очень простая настройка кода сервера Go с mux, и когда я использую curl с параметрами запроса GET (localhost:8080/suggestions/?locale=en), я получаю код статуса 301 (постоянно перемещается). Но когда нет параметров, он работает нормально.Получите код статуса 301 при отправке запроса GET с параметром

func main() { 
router := mux.NewRouter().StrictSlash(true) 
router.HandleFunc("/suggestions", handleSuggestions).Methods("GET") 
log.Fatal(http.ListenAndServe("localhost:8080", router)) 
} 

Может кто-нибудь пролить мне свет на this.Thanks

+0

Очистить кэш браузера и повторить попытку – Bhavana

+0

Я сделал ион, который я использую curl command line :) –

+0

ohh .. извините .. не заметил .. :( – Bhavana

ответ

3

Это просто потому, что вы зарегистрировали путь /suggestions (примечание: нет никакой косой черты), и вы называете URL localhost:8080/suggestions/?locale=en (там замыкающим слэш после /suggestions).

Ваш маршрутизатор обнаруживает, что существует зарегистрированный путь, который будет соответствовать запрошенному пути без конечной косой черты (на основе вашей политики Router.StrictSlash()), поэтому он отправляет перенаправление, которое после этого приведет к действительному зарегистрированному пути.

Просто используйте URL без пробелов после suggestions:

localhost:8080/suggestions?locale=en 
3

док mux.StrictSlash выбирали и состояния:

func (r *Router) StrictSlash(value bool) *Router 
    StrictSlash defines the trailing slash behavior for new routes. The initial 
    value is false. 

    When true, if the route path is "/path/", accessing "/path" will redirect to 
    the former and vice versa. In other words, your application will always see 
    the path as specified in the route. 

    When false, if the route path is "/path", accessing "/path/" will not match 
    this route and vice versa. 

    Special case: when a route sets a path prefix using the PathPrefix() method, 
    strict slash is ignored for that route because the redirect behavior can't 
    be determined from a prefix alone. However, any subrouters created from that 
    route inherit the original StrictSlash setting. 

Таким образом, чтобы избежать переадресаций вы можете либо mux.NewRouter().StrictSlash(false) что эквивалентно mux.NewRouter() или используйте URL-адрес с завершающей косой чертой, т.е. router.HandleFunc("/suggestions/", handleSuggestions).Methods("GET")

+0

Спасибо, поддержал ваш ответ :) –

Смежные вопросы