// Accept: text/html, text/*, application/json, */*; q=0
app.Get("/", func(c \*fiber.Ctx) error {
c.Accepts("text/plain", "application/json") // "application/json", due to specificity
c.Accepts("application/json", "text/html") // "text/html", due to first match
c.Accepts("image/png") // "", due to \*/\* without q factor 0 is Not Acceptable
// ...
})
미디어 타입 매개변수가 지원됩니다.
// Accept: text/plain, application/json; version=1; foo=bar
app.Get("/", func(c \*fiber.Ctx) error {
// Accept 의 추가 매개변수는 무시됩니다
c.Accepts("text/plain;format=flowed") // "text/plain;format=flowed"
// 지정된 offer는 Accept 타입에 존재하는 모든 매개변수를 포함해야 합니다
c.Accepts("application/json") // ""
// 매개변수 순서와 대소문자는 중요하지 않습니다. 값의 따옴표는 제거됩니다.
c.Accepts(\`application/json;foo="bar";VERSION=1\`) // "application/json;foo="bar";VERSION=1"
})
// Accept: text/plain;format=flowed;q=0.9, text/plain
// "text/plain;format=flowed" 를 다른 text/plain 보다 덜 선호함을 의미
app.Get("/", func(c \*fiber.Ctx) error {
// 주의: offers 가 나열되는 순서가 중요합니다.
// 클라이언트는 format=flowed를 덜 원한다고 지정했지만,
// text/plain Accept는 "text/plain;format=flowed" 와 먼저 매칭되므로 그것이 리턴됩니다.
c.Accepts("text/plain;format=flowed", "text/plain") // "text/plain;format=flowed"
// 여기선 예상대로 동작합니다:
c.Accepts("text/plain", "text/plain;format=flowed") // "text/plain"
})
Bind은 request/response body, query parameters, URL parameters, cookies 등 여러 것들을 지원하는 메서드입니다. Bind 구조체의 포인터를 반환하며, request/response 데이터를 바인딩하기 위한 모든 메서드를 포함하고 있습니다.
요청 헤더에 따라 body 바이트를 파일 압축 해제하려고 시도합니다.
Content-Encoding 헤더가 전송되지 않으면 BodyRaw 처럼 동작합니다.
func (c \*Ctx) Body() []byte
// echo 'user=john' | gzip | curl -v -i --data-binary @- -H "Content-Encoding: gzip" http://localhost:8080
app.Post("/", func(c \*fiber.Ctx) error {
// Content-Encoding에 따라 POST 요청에서 body를 압축 해제하고 원시 콘텐츠를 반환:
return c.Send(c.Body()) // []byte("user=john")
})
반환된 값은 핸들러 내에서만 유효합니다. 참조를 저장하지 마세요. 복사본을 만들거나 대신 Immutable 설정을 사용하세요. 더 읽기...
BodyRaw
원시 요청 body 를 반환합니다.
func (c \*Ctx) BodyRaw() []byte
// curl -X POST http://localhost:8080 -d user=john
app.Post("/", func(c \*fiber.Ctx) error {
// POST 요청에서 원시 body 가져오기:
return c.Send(c.BodyRaw()) // []byte("user=john")
})
반환된 값은 핸들러 내에서만 유효합니다. 참조를 저장하지 마세요. 복사본을 만들거나 대신 Immutable 설정을 사용하세요. 더 읽기...
ClearCookie
클라이언트 쿠키를 만료시킵니다(빈 문자열이면 모든 쿠키)
func (c \*Ctx) ClearCookie(key ...string)
app.Get("/", func(c \*fiber.Ctx) error {
// 모든 쿠키 삭제:
c.ClearCookie()
// 이름으로 특정 쿠키 만료:
c.ClearCookie("user")
// 이름으로 여러 쿠키 만료:
c.ClearCookie("token", "session", "track_id", "version")
// ...
})
웹 브라우저 및 기타 호환 클라이언트는 쿠키를 생성할 때 expires 및 maxAge를 제외하고 지정된 옵션이 동일한 경우에만 쿠키를 삭제합니다. ClearCookie는 이러한 값을 자동으로 설정하지 않습니다 - 아래와 같은 기술을 사용하여 쿠키가 삭제되도록 해야 합니다.
app.Get("/", func(c *fiber.Ctx) error {
// 요청이 localhost에서 온 경우 true를 반환하고 그렇지 않으면 false를 반환합니다
c.IsFromLocal()
// ...
})
IsProxyTrusted
원격 IP의 신뢰성을 확인합니다. EnableTrustedProxyCheck가 false이면 true를 반환합니다. IsProxyTrusted는 프록시 범위와 IP 맵으로 원격 IP를 확인할 수 있습니다.
func (c *Ctx) IsProxyTrusted() bool
app := fiber.New(fiber.Config{
// EnableTrustedProxyCheck는 신뢰할 수 있는 프록시 확인을 활성화합니다
EnableTrustedProxyCheck: true,
// TrustedProxies는 신뢰할 수 있는 프록시 IP 주소 목록입니다
TrustedProxies: []string{"0.8.0.0", "0.8.0.1"},
})
app.Get("/", func(c *fiber.Ctx) error {
// 요청이 신뢰할 수 있는 프록시에서 온 경우 true를 반환하고 그렇지 않으면 false를 반환합니다
c.IsProxyTrusted()
// ...
})
요청에 대해 범위가 지정되어 요청과 일치하는 경로에서만 사용할 수 있는 변수를 저장하는 메서드입니다.
특정 데이터를 다음 미들웨어로 전달하려는 경우에 유용합니다.
func (c *Ctx) Locals(key interface{}, value ...interface{}) interface{}
// key는 이 패키지에 정의된 키에 대해 내보내지 않는 유형입니다.
// 이는 다른 패키지에 정의된 키와 충돌을 방지합니다.
type key int
// userKey는 Contexts에서 user.User 값에 대한 키입니다.
// 내보내지 않습니다. 클라이언트는 이 키를 직접 사용하는 대신
// user.NewContext 및 user.FromContext를 사용합니다.
var userKey key
app.Use(func(c *fiber.Ctx) error {
c.Locals(userKey, "admin")
return c.Next()
})
app.Get("/admin", func(c *fiber.Ctx) error {
if c.Locals(userKey) == "admin" {
return c.Status(fiber.StatusOK).SendString("Welcome, admin!")
}
return c.SendStatus(fiber.StatusForbidden)
})
Go의 제네릭 기능을 활용하는 Locals 메서드의 대체 버전도 사용할 수 있습니다. 이 버전은 요청의 컨텍스트 내에서 로컬 값을 더 구체적인 데이터 유형으로 조작하고 검색할 수 있습니다.
func Locals[V any](c *Ctx, key interface{}, value ...V) V
하위 호환성을 위해 매개변수 문자에 대한 첫 번째 매개변수 세그먼트도 카운터 없이 액세스할 수 있습니다.
app.Get("/v1/*/shop/*", func(c *fiber.Ctx) error {
c.Params("*") // 첫 번째 와일드카드 세그먼트의 값을 출력합니다
})
반환된 값은 핸들러 내에서만 유효합니다. 참조를 저장하지 마세요. 복사본을 만들거나 대신 Immutable 설정을 사용하세요. 더 읽기...
특정 시나리오에서는 문자열뿐만 아니라 다른 유형의 매개변수를 처리하기 위한 대체 접근 방식이 유용할 수 있습니다. 이는 Params[V GenericType](c *Ctx, key string, defaultValue ...V) V 로 알려진 제네릭 Query 함수를 사용하여 달성할 수 있습니다. 이 함수는 V GenericType 으로 가정하고 지정한 유형의 값을 반환하여 쿼리 문자열을 구문 분석할 수 있습니다.
func Params[v GenericType](c *Ctx, key string, default value ...V) V
반환된 값은 핸들러 내에서만 유효합니다. 참조를 저장하지 마세요. 복사본을 만들거나 대신 Immutable 설정을 사용하세요. 더 읽기...
특정 시나리오에서는 문자열뿐만 아니라 다른 유형의 쿼리 매개변수를 처리하기 위한 대체 접근 방식이 유용할 수 있습니다. 이는 Query[V GenericType](c *Ctx, key string, defaultValue ...V) V로 알려진 제네릭 Query 함수를 사용하여 달성할 수 있습니다. 이 함수는 쿼리 문자열을 파싱하고 V GenericType에 의해 가정되고 지정된 유형의 값을 반환할 수 있습니다.
제네릭 Query 함수의 시그니처는 다음과 같습니다:
func Query[V GenericType](c *Ctx, key string, defaultValue ...V) V
이 경우 Query[V GenericType](c *Ctx, key string, defaultValue ...V) V는 'page'를 정수로, 'brand'를 문자열로, 'new'를 부울로 검색할 수 있습니다. 이 함수는 지정된 각 유형에 적합한 파싱 함수를 사용하여 올바른 유형이 반환되도록 합니다. 이렇게 하면 다른 유형의 쿼리 매개변수 검색 프로세스가 단순화되어 컨트롤러 액션이 더 깔끔해집니다.
제네릭 Query 함수는 V GenericType에 따라 다음 데이터 유형 반환을 지원합니다:
정수: int, int8, int16, int32, int64
부호 없는 정수: uint, uint8, uint16, uint32, uint64
부동 소수점 숫자: float32, float64
부울: bool
문자열: string
바이트 배열: []byte
Range
유형과 범위 슬라이스를 포함하는 구조체가 반환됩니다.
func (c *Ctx) Range(size int) (Range, error)
// Range: bytes=500-700, 700-900
app.Get("/", func(c *fiber.Ctx) error {
b := c.Range(1000)
if b.Type == "bytes" {
for r := range r.Ranges {
fmt.Println(r)
// [500, 700]
}
}
})
Redirect
리디렉션 참조를 반환합니다.
자세한 내용은 Redirect 문서를 참조하세요.
func (c *Ctx) Redirect() *Redirect
app.Get("/coffee", func(c *fiber.Ctx) error {
return c.Redirect().To("/teapot")
})
app.Get("/teapot", func(c *fiber.Ctx) error {
return c.Status(fiber.StatusTeapot).Send("🍵 short and stout 🍵")
})
Next를 호출할 때 다음 메서드를 실행하는 대신 RestartRouting은 현재 경로와 일치하는 첫 번째 메서드에서 실행을 다시 시작합니다. 이는 경로를 재정의한 후에 도움이 될 수 있습니다(예: 내부 리디렉션). 핸들러가 다시 실행될 수 있으므로 무한 루프가 발생할 수 있습니다.
표준 encoding/xml 패키지를 사용하여 interface 또는 string을 XML로 변환합니다.
XML은 콘텐츠 헤더를 application/xml로 설정합니다.
func (c *Ctx) XML(data interface{}) error
type SomeStruct struct {
XMLName xml.Name `xml:"Fiber"`
Name string `xml:"Name"`
Age uint8 `xml:"Age"`
}
app.Get("/", func(c *fiber.Ctx) error {
// 데이터 구조체 생성:
data := SomeStruct{
Name: "Grame",
Age: 20,
}
return c.XML(data)
// <Fiber>
// <Name>Grame</Name>
// <Age>20</Age>
// </Fiber>
})
응답 헤더 필드를 attachment 로 설정합니다.
HTTP 헤더를 기준으로 내용 협상(content-negotiation)을 수행합니다. 적절한 형식을 선택하기 위해 Accepts 를 사용합니다. 지원되는 내용 타입은 text/html, text/plain, application/json, application/xml 입니다. 더 유연한 내용 협상을 위해서는 Format 을 사용하세요.
ClientHelloInfo는 GetCertificate 및 GetConfigForClient 콜백에서 애플리케이션 로직을 안내하기 위해 ClientHello 메시지의 정보를 포함합니다. 반반환된 구조체에 대한 자세한 정보는 구조체 문서를 참조할 수 있습니다.
context.Context 인터페이스와 호환되는 를 반환하며, 이는 마감일, 취소 신호 및 기타 값들을 API 경계를 넘어 전달합니다.
자세한 내용은 를 참조하세요.
일반적으로 브라우저는 사용자에게 다운로드하라는 메시지를 표시합니다. 기본적으로 헤더 filename= 매개변수는 파일 경로입니다(이는 일반적으로 브라우저 대화 상자에 표시됨).
HTTP 헤더를 기준으로 내용 협상(content-negotiation)을 수행합니다. MediaType을 "default"로 설정하여 기본 핸들러를 제공할 수 있습니다. 일치하는 offer가 없고 기본값이 제공되지 않으면 406(허용되지 않음) 응답이 전송됩니다. 핸들러가 선택되면 Content-Type이 자동으로 설정됩니다.
자세한 내용은 를 참조하세요.
HTTP 헤더에서 파생된 호스트를 반환합니다.
HTTP 헤더에서 파생된 호스트 이름을 반환합니다.
요청 헤더에 지정된 IP 주소 배열을 반환합니다.
X-Forwarded-For 헤더를 부적절하게 사용하면 보안 위험이 될 수 있습니다. 자세한 내용은 섹션을 참조하세요.
들어오는 요청의 HTTP 헤더 필드가 type 매개 변수로 지정된 과 일치하면 일치하는 콘텐츠 유형을 반환합니다.
패키지를 사용하여 모든 interface 또는 string 을 JSON으로 변환합니다.
지정된 링크를 속성에 따라 연결하여 응답의 HTTP 헤더 필드를 채웁니다.
지정된 path 매개변수로 응답 HTTP 헤더를 설정합니다.
Next 가 호출되면 현재 경로와 일치하는 스택의 다음 메서드를 실행합니다. 메서드 내에서 체이닝을 종료하고 를 호출하는 error 구조체를 전달할 수 있습니다.
데이터로 뷰를 렌더링하고 text/html 응답을 보냅니다. 기본적으로 Render는 기본 을 사용합니다. 다른 뷰 엔진을 사용하려면 를 살펴보세요.
포인터를 반환합니다.
포인터를 반환합니다.
일치하는 구조체를 반환합니다.
주어진 경로에서 파일을 전송합니다. 파일 이름 확장자를 기반으로 응답 HTTP 헤더 필드를 설정합니다.
사용된 모든 상태 코드와 메시지는 에서 찾을 수 있습니다.
파일 extension으로 지정된 에 나열된 MIME 유형으로 HTTP 헤더를 설정합니다.
주어진 헤더 필드를 응답 헤더에 추가합니다. 아직 나열되지 않은 경우 헤더를 추가하고, 그렇지 않으면 현재 위치에 나열된 상태로 둡니다.
요청의 헤더 필드가 인 경우 true인 부울 속성으로, 요청이 와 같은 클라이언트 라이브러리에 의해 발행되었음을 나타냅니다.