Golang Net/Http中的雕虫小技

以后会开一个板块,摸鱼快报,快速记录这几周开发中雕虫小技, 也算一个错题集。,前端使用Create React App脚手架,默认以localhost:3000端口启动;后端使用golang-gin框架,使用8034端口启动。登录模块走的是sso,前后端分离,后端需要向前端写入认证cookie,若种植cookie时设置domain=localhost:3000​,实际会发现该cookie被种为domain=localhost,① golang给出日志提示:2023/01/12 19:10:48 net/http: invalid Cookie.Domain “localhost:3000”; dropping domain attribute, 该cookie domain属性被丢弃:,图片,② 浏览器认定该cookie没有domain,属性值被重置当前页面,该Cookie为HostOnly Cookie,后续请求只有host与cookie的domain完全相等,才能携带这个cookie。,图片,经此一役:,图片,cookie domain:cookie被种植到哪个域名下?,cookie samesite:请求时,哪些资源能携带该cookie?,golang net/http httpclientTimeout:Timeout specifies a time limit for requests made by this Client. The timeout includes connection time, any redirects, and reading the response body. The timer remains running after Get, Head, Post, or Do return and will interrupt reading of the Response.Body.,HttpClient Timeout包括连接、重定向(如果有)、从Response Body读取的时间,内置定时器会在Get,Head、Post、Do 方法之后继续运行,并有能力中断读取Response.Body.,图片,如果upstream服务器处理超时(upstream_response_time> client设置的timeout),则会返回context deadline exceeded (Client.Timeout exceeded while awaiting headers)。,如果客户端使用io.ReadAll读取body超时,则会返回context deadline exceeded (Client.Timeout or context cancellation while reading body)。,大家使用net/http 建立的http server,默认的请求url path是大小写敏感的:,以上会被认定为不同的路由path。探究源码:ServeMux使用​map[string]muxEntry 哈希表来存储路由。,这与aspnet core的路由行为是不一样的,/hello、/HELLO都会命中下面的路由。,w3c官方建议:url大小写敏感。,URLs in general are case-sensitive (with the exception of machine names). There may be URLs, or parts of URLs, where case doesn’t matter, but identifying these may not be easy. Users should always consider that URLs are case-sensitive。大意是说:除了​domain主机名是大小写不敏感,url一般被认为是大小写敏感。,stackoverflow有更清晰的描述:,The scheme and host are case-insensitive and normally provided in lowercase; all other components are compared in a case-sensitive manner.,在 Go 语言中,客户端请求信息都封装到了Request​对象,但是发送给客户端的响应并不是 Response 对象,而是ResponseWriter:,ResponseWriter是处理器用来创建 HTTP 响应的接口,其源码结构如下所示:,WriteHeader这个方法名有点误导,其实它并不是用来设置响应头的,该方法支持传入一个整型数据用来表示响应状态码,如果不调用该方法的话,默认响应状态码是 200 OK。,在fasthttp中,设置请求谓词:req.Header.SetMethod(“POST”), 这种将谓词作为header的行为,我也是服气。,只能设置一次statuscode, 若多次设置statuscode,以前者优先。,例如尝试以如下方式:,会产生一个告警:2023/01/06 19:19:43 http: superfluous response.WriteHeader call from main.ProxyHandler (proxy.go:25), 同时产生404状态码。,可以采用如下方式清晰定义状态码和body,

文章版权声明

 1 原创文章作者:cmcc,如若转载,请注明出处: https://www.52hwl.com/19011.html

 2 温馨提示:软件侵权请联系469472785#qq.com(三天内删除相关链接)资源失效请留言反馈

 3 下载提示:如遇蓝奏云无法访问,请修改lanzous(把s修改成x)

 免责声明:本站为个人博客,所有软件信息均来自网络 修改版软件,加群广告提示为修改者自留,非本站信息,注意鉴别

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年3月5日 上午12:00
下一篇 2023年3月7日 下午10:34