浏览器环境下HTTP的Request Header

HTTP Header

  • 我们知道HTTP协议中定义了Header,是一组KV集合。
  • 在请求时可以把信息放在Header中带给服务端,在响应时也可以利用Header输出部分信息。

Header使用场景

  • 常用场景包括在Header中标明请求的Content-TypeAccept-Language,甚至请求的Cookie信息也是在Header中传输。
  • 特别地,在Restful Api中,我们经常将登录认证信息(Token)放在请求的Authorization里,服务端解析认证信息来判断登录是否有效。

浏览器环境下的限制

  • 今天遇到一个问题,项目定义的Rest认证协议中,用到了Header里的AuthorizationDate字段。
  • 这些接口一般情况是由服务端发起调用,并没有任何问题。
  • 但是最近我在写一个web版的工具,想在浏览器环境下构造请求访问这些接口,但是发现请求的Header中无法写入我指定的Date值。
  • 查阅相关资料才发现,原来在web环境下,为了一些安全原因,浏览器会限制手动构造的HTTP请求中的Header内容。其中包括:
  • accept-charset
  • accept-encoding
  • access-control-request-headers
  • access-control-request-method
  • connection
  • content-length
  • content-transfer-encoding
  • cookie
  • cookie2
  • date
  • expect
  • host
  • keep-alive
  • origin
  • referer
  • te
  • trailer
  • transfer-encoding
  • upgrade
  • via

解决和结论

  • 既然在浏览器层面限制了在,我也只好绕过这个问题。具体方案有二:
    1. 修改服务端认证协议,兼容另一个Header字段来当作Date
    2. WEB前端请求本地服务端,本地服务端中转接口再请求Rest服务。
  • 在定义私有协议的时候,最好事先了解一下大环境下的通用协议,避免与之产生冲突。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,027评论 19 139
  • 一、概念(载录于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434阅读 8,490评论 6 152
  • Http协议详解 标签(空格分隔): Linux 声明:本片文章非原创,内容来源于博客园作者MIN飞翔的HTTP协...
    Sivin阅读 5,256评论 3 82
  • 工作流程 一次HTTP操作称为一个事务,其工作过程可分为四步: 1)首先客户机与服务器需要建立连接。只要单击某个超...
    保川阅读 4,649评论 2 14
  • 很喜欢一句话:拒绝的时候要直接了当,不要不好意思,凭什么。 自认为是一个直截了当的典型白羊座,喜欢就是喜欢,不喜欢...
    e1a1b13d986e阅读 279评论 0 1