• 友
    2021-12-02
    不知道各位看github有没有看到 FormInt 和 FormString 我没有找到可能是粗心,建议各位在实现的时候可以在开头写上这么几句代码 var _ IRequest = new(Context) var _ IResponse = new(Context) var _ context.Context = new(Context) 如果当前context没有实现完 IRequest 和 IResponse 会报错并且你能看到是哪些接口未实现。 还有一个地方就是 Headers() map[string]string 这里接口定义的是 这样 但是试下你的时候是这样 Headers() map[string][]string

    作者回复: 确实是个好办法,直接做一下强制转换能将错误提前暴露 感谢

    
    11
  • qinsi
    2021-09-22
    转义是为了防止callback名称包含任意js代码。虽然要达成XSS有各种前置条件,防御XSS也要分各种情况,没有完美的方法,但转义总比不转义要强。 疑问: 1. JSONP的响应也是在拼接字符串,是否也可以用template? 2. 对于各种请求和响应格式的支持,是否也可以写成中间件的形式,让API更精简? 3. 重复读取body的场景有哪些?我能想到的是某些访问控制的中间件可能需要事先检查body的内容。这样是不是就没法做流式处理(因为要把请求body读完才能做下一步的处理)?比如一边读取请求body一边写入响应body。

    作者回复: 疑问: 1. JSONP的响应也是在拼接字符串,是否也可以用template? 当然可以的,拼接字符串有多种方式,template也是可以。 2. 对于各种请求和响应格式的支持,是否也可以写成中间件的形式,让API更精简? 可以的,修改响应格式主要要先修改下context中的responseWriter,让输出先进入到我们定义的writer中,然后修改后再输出到前端。这样做可行。 不过更多的做法是封装一个公共方法,所有api地方调用这个方法。 3. 重复读取body的场景有哪些?我能想到的是某些访问控制的中间件可能需要事先检查body的内容。这样是不是就没法做流式处理(因为要把请求body读完才能做下一步的处理)?比如一边读取请求body一边写入响应body。 这个场景很多的,要打一个输入请求的所有日志到日志管理系统中,或者要实现一个回放功能,都有可能要读取请求body.

    
    2
  • 咸鱼
    2021-12-12
    有两点疑惑,为什么要使用不带error返回值的cast方法呢,这样如果解析出了问题,返回的不会是默认值,而会是零值。另外一点是我记得前面注册路由的时候把路径都变成了大写来着,这样在取路径参数的时候应该加一道把key转成大写的步骤吧,不然会找不到参数的

    作者回复: 1 这里其实有三个逻辑,a 是否有这个key,b 这个key是否可以转换为目标对象, c 如果失败和没有,要怎么处理。目前是没有key返回默认值,有key但是无法转换返回零值,不过思考了一下,这里确实是改成“失败和处理”都返回默认值比较好。 2 parseParamsFromEndNode 这里传递的是request.URL.Path,是没有大写转换过的。应该不需要加这个

    
    1
  • 木移
    2021-10-27
    subjectApi.Put("/:id/:id", SubjectUpdateController) 这种路由取参数就没法区分了,注册路由需要把这种情况考虑进去吗
    共 2 条评论
    1
  • 高。
    2022-11-05 来自上海
    request.go 中的BindJson,BindXml这类方法真的有效么?!
    
    
  • airmy丶
    2022-09-20 来自广东
    输出解析HTML的这个地方:t, err := template.New(“output”).ParseFiles(file) 这里是否有问题?template.New 需要传入的应该是模版的文件名称吧?这里是否应该使用 filepath.Base(file) 去获取?
    
    
  • 老兵
    2022-02-24
    利用escape template.JSEscapeString(callbackFunc) 解决XSS攻击的问题。 疑问: 但是框架如何解决CSRF攻击的问题呢?检查CSRF token和XSRF token?
    
    
  • 牛玉富
    2022-01-13
    clientIp拼错了
    
    
  • kfns0b11
    2021-11-16
    > // 重新填充 request.Body,为后续的逻辑二次读取做准备 > ctx.request.Body = ioutil.NopCloser(bytes.NewBuffer(body)) 这里能详细解释一下吗?ctx.request.Body 本身是 io.ReadCloser 类型,使用 NopCloser 函数为后续的逻辑二次读取做准备是什么意思啊?
    共 1 条评论
    
  • Geek_5244fa
    2021-09-22
    类似 Jsonp 这些输出方法中,都是忽略错误然后返回 Context 实现链式调用,这样不会有问题吗? 例如用户搞了个没法 json 序列化的数据,输出到左括号就断掉,不会很难排查?
    
    