经过一天半的时间,终于是解决了request头部无法放入authorization键值的问题,试了很多种方法,绕了很多弯路,甚至将整个框架从1.19版本提升到2.22版本,最后发现仅仅是response.addHeader写成了response.setHeader的问题,当最后发现这个问题的时候,都不知道是该高兴还是悲哀。
究其原因,出现这种小bug却浪费了我大部分的时间的原因是,对于HTTP协议的不了解,遇到问题只知道Google或者stackflow,没有从原理上下功夫,项目中需要实现的功能,也是参考网上的代码,并没有实实在在的吃透,遇到bug也是过于依赖搜索引擎,没有做到从问题入手,从原理剖析,导致绕了一个大弯路,这个毛病一定要改正,因为随着编码时间逐渐增长,我所侧重的方向一定是越来越细化的,遇到的问题也是越来越个性化的,别人遇到相同的问题的几率会减少,光是在Google的结果中搜寻类似的问题就要耗掉我大量的时间,更不用说有可能根本别人这种问题,因此,一定要养成从原理剖析问题的能力和习惯。
鉴于此次的问题,我就在此总结一下对于Header的理解,顺便复习一下。
request header 中的属性
- accept 客户端所可以接收的服务器所返回的数据类型(content-type)
- Content-Type 请求的MIME Type
- Origin 客户端的主域名,如果网页为http://www.example.com/v1/user 则为 www.example.com
- referer 客户端的完整域名,
- User-Agent 浏览器的信息
- Access-Control-Request-Headers 告诉服务器,浏览器需要用到的header属性
- X-Requested-With 用于分辨Ajax请求,angularjs默认为 XMLHttpRequest
response header中的属性
- Access-Control-Allow-Origin 所允许访问的跨源域名,如www.example.com
- Access-Control-Allow-Methods 所允许访问的方法, post,put, get ,delete, options
- Access-Control-Allow-Credentials 布尔值,是否允许浏览器发送cookie
- Access-Control-Allow-Headers 允许浏览器request header中带的头部值
- Status 200 OK, 401 UnAuthorization, 500 Internal Server exception, 301 page remove
如果使用token进行安全验证, 则浏览器每次的request都需要发送token,通常是将其值设置为Authorization头,因此服务器的所有response中必须设置Access-Control-Allow-Headers中包含 Authorization