Получить фрагменты URI в Vapor

Для моего приложения Vapor мне нужно прочитать фрагмент URI запроса.

let drop = Droplet()

drop.get("fragment") {
    request in

    print("URI: \(request.uri)")
    print("Fragment: \(request.uri.fragment)")

    return ""
}

Проблема в следующем: когда я запрашиваю http://myserver/fragment#hello, request.uri.fragment равно nil. Это напечатано в консоли:

URI: http://localhost:8080/fragment
Fragment: nil

Я что-то упускаю? В документации Vapor не упоминается ни один случай, когда фрагмент не включен в URI.


person FelixSFD    schedule 05.02.2017    source источник


Ответы (1)


Фрагменты URI предназначены только для клиента. Ваш сервер Vapor их даже не получает. Если вы хотите отправить данные во фрагменте на свой сервер, вы должны либо использовать параметры запроса напрямую, либо вам нужно будет проанализировать фрагмент в клиенте (например, JavaScript, если это веб-приложение) и передать их на сервер. каким-то другим способом.

Из Википедии:

Фрагменты зависят от типа MIME документа и оцениваются клиентом (веб-браузером). Клиенты не должны отправлять URI-фрагменты на серверы при получении документа.

person Dave Weston    schedule 05.02.2017
comment
Привет, я не смог полностью понять твой ответ. Если я использую Postman в качестве клиента для разговора с моим сервером Vapor, что мне делать, чтобы получить Fragment, отличное от nil? Я также прочитал документацию Vapor, указанную OP. У меня также был тест, похожий на то, что сделал OP. - person Glenn Posadas; 06.02.2017
comment
Почтальон не отправляет фрагмент на сервер, фрагмент предназначен только для клиента (обычно это веб-браузер). Что находится во фрагменте, к которому вы хотите получить доступ на сервере? - person Dave Weston; 06.02.2017
comment
Привет спасибо! Но это то же самое. Если я посещаю маршрут, который ввел в свои коды Vapor с помощью браузера, Vapor все равно получает nil фрагмент. К чему я хочу получить доступ во фрагменте? Правда ничего. Мне просто любопытно, возможно, мне понадобится эта fragment штука в будущем. +1 к вашему ответу. - person Glenn Posadas; 06.02.2017
comment
Браузер никогда не отправляет фрагмент на сервер. Vapor всегда получает nil фрагмент. Идентификатор фрагмента предназначен только для использования самим браузером. Раз уж вам любопытно, вот еще немного информации: https://blog.httpwatch.com/2011/03/01/6-things-you-should-know-about-fragment-urls/ - person Dave Weston; 06.02.2017