buaazp / fasthttprouter

A high performance fasthttp request router that scales well

Home Page:http://godoc.org/github.com/buaazp/fasthttprouter

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

CORS

araneta opened this issue · comments

How to handler CORS? Thanks

I wrote a simple example, is it what you need?

package main

import (
    "path"
    "strings"

    "github.com/buaazp/fasthttprouter"
    "github.com/valyala/fasthttp"
)

type CORS struct {
    origins map[string]bool
}

func (c *CORS) handler(h fasthttp.RequestHandler) fasthttp.RequestHandler {
    return func(ctx *fasthttp.RequestCtx) {
        if host := string(ctx.Host()); c.origins[host] {
            ctx.Response.Header.Set("Access-Control-Allow-Origin", host)
        }

        h(ctx)
    }
}

var (
    cors = &CORS{
        origins: map[string]bool{
            "127.0.0.1:8080": true,
        },
    }
)

func main() {
    routerPath := "/js/*filepath"        // router's path.
    filepath := path.Join("/path/to/js") // file's path

    // Create a file handler.
    fileHandler := fasthttp.FSHandler(filepath, strings.Count(routerPath[:len(routerPath)-10], "/"))

    router := fasthttprouter.New()
    // Wrapped by CORS handler.
    router.GET(routerPath, cors.handler(fileHandler))

    fasthttp.ListenAndServe(":8080", router.Handler)
}

@buaazp 我觉得ServeFiles有点难扩展,比如CORS之类的中间件,好像用ServeFiles无法实现。是否有其他方法我没想到的。

Great. Thanks its working.

@headwindfly 感谢帮忙解答。

ServeFiles 这些接口都是继承自httprouter,并不是我自己设计的,再加上我自己的线上业务并没有用到这种文件接口,所以也就没关注过,我回头想想怎么把它搞成标准的router用法吧~

@buaazp :) 好的,这个issue应该可以关闭了

This solution doesn't work. The browser sends an Origin header not a Host header.