Request Headers请求头和Response Headers响应头,有啥区别呢?
前言:在游览器访问网页的时候,会涉及到请求头和响应头,那么,下面我们了解下两者的区别和不同。一、Request Headers请求头1.Accept:告诉服务器,客户机支持的数据类型;2.Accept-Encoding:告诉服务器,客户机支持的数据压缩格式;3.Cache-Control:缓存控制,服务器通过游览器要不要缓存数据;4.Connection:处理完这次请求,是断开连接还是保持连接;5
前言:这次,发布预上线内容的时候,切换了预上线的Request URL的地址,但是预上线的链接地址没有切换,导致接口请求failed,导致跨域,通过比对其他项目预上线的内容,发现是请求头里的origin(用来标识出最初请求时从哪里发起的)地址不一样,原因是请求链接的地址没有切换导致的。具体场景图片如下所示:
接口在请求的时候,都failed的了。
经过比对,发现请求的Host地址,和origin请求地址(即游览器请求的地址)不一样导致的。
因为请求的地址,与访问的链接地址不一样,还导致了跨域问题。
当把链接请求的地址改为和Request URL中一样的时候,接口就请求正常了。
在游览器访问网页的时候,会涉及到请求头和响应头,那么,下面我们了解下两者的区别和不同。
一、Request Headers请求头
1.Accept:告诉服务器,客户机支持的数据类型;
2.Accept-Encoding:告诉服务器,客户机支持的数据压缩格式;
3.Cache-Control:缓存控制,服务器通过游览器要不要缓存数据;
4.Connection:处理完这次请求,是断开连接还是保持连接;
5.Cookie:客户机通过这个可以向服务器带数据;
6.Host:访问的主机名;
7.origin:用来标识出最初请求时从哪里发起的;
8.Upgrade-Insecure-Requests:参考http://www.cnblogs.com/hustskyking/p/upgrade-insecure-requests.html
9.User-Agent:告诉服务器,客户机的软件环境。
补充说明(Origin字段):
为了防止CSRF的攻击,我们建议修改游览器在发送POST请求的时候,加上一个origin字段,这个origin字段主要时用来标识出最初请求是从哪里发起的。如果游览器不能确定元在哪里,那么在发送的请求里面origin字段的值就为空。
隐私方面:这种origin字段的方式比Referer更人性化,因为它尊重了用户的隐私。
(a)origin字段里只包含是谁发起的请求,并没有其他信息(通常情况下是方案,主机和活动文档URL的端口)。跟Referer不一样的是,Origin字段并没有包含涉及到用户隐私的URL路径和请求内容,这个尤其重要;
(b)Origin字段只存在于POST请求,而Referer则存在于所有类型的请求;
随便点击一个超链接,并不会发送origin字段,这样可以防止敏感信息的以外泄露。
在应对隐私问题方面,origin字段的方法可能更能迎合用户的口味。
服务端要做的:用origin字段的方法来防御CSRF攻击的时候,网站需要做到以下几点:
a.在所有能改变状态的请求里,包括登陆请求,都必须使用POST方法。对于一些特定的能改变状态的GET请求必须要拒绝,这个为了对抗上文中提到过的论坛张贴的那种危害类型;
b.对于那些有origin字段但是值并不是我们希望的(包括值为空)请求,服务器要一律拒绝。比如,服务器可以拒绝一切origin字段为外站的请求。
安全性分析:虽然origin字段的设计非常简单,但是用它来防御CSRF攻击可以起到很好的作用。
a.去掉origin字段。由于支持这种方法的游览器在每次POST请求的时候都会带上源header,那么网站就可以通过查看是否存在这种origin字段来确定请求是否是由支持这种方法的游览器发起的,这种设计能有效防止攻击者将一个支持这种方法的游览器改变成不支持这种方法的游览器,因为即使你改变游览器去掉了origin字段,origin字段还是存在,只不过值变为空了。这跟Referer很不一样,因为Referer只要是在请求里去掉了,那服务器就探测不到了;
b.DNS重新绑定。在现有的游览器里面,对于同站的XMLHttpRequests,Origin字段可以被伪造。只依赖网络连接进行身份验证的网站应当使用DNS重新绑定的方法,比如验证header里的Host字段。在使用Origin字段来防御CSRF攻击的时候,也需要用到DNS重新绑定的方法,他们是相辅相成的。
二、Response Headers响应头
1.Connection:处理完这次请求后,是断开连接还是继续保持连接;
2.Content-Encoding:服务器通过这个头,告诉游览器数据的压缩格式;
3.Content-Length:服务器通过这个头,告诉游览器回送数据的长度;
4.Content-Type:服务器通过这个头,告诉游览器回送数据的类型;
5.Date:当前时间值;
6.Server:服务器通过这个头,告诉游览器服务器的类型;
7.Vary:Accept-Encoding----明确告知缓存服务器Accept-Encoding字段的内容,分别缓存不同的版本,参考:https://imququ.com/post/vary-header-in-http.html
8.X-Powered-By:服务器告知客户机网站是用何种语言或框架编写的。
参考博客:Request Headers请求头和Response Headers响应头 https://www.jianshu.com/p/15e1e9aa84c3
Origin字段 http://blog.sina.com.cn/s/blog_625f850801015tik.html
更多推荐
所有评论(0)