header头信息解析以及CORS跨域access-control-allow-heade。。。

更新时间:2023-06-22 06:58:44 阅读: 评论:0

header 头信息解析以及CORS 跨域access-control-allow-
heade 。。。
最近项⽬⾥需要处理跨域请求,遇到了⼀些问题,中间⾛了很多坑,深挖了很多细节,受益良多。
cors 在跨域解决⽅案中算是很好⽤的,⽹上资料⼀⼤堆,只需要在服务器端进⾏配置即可。
配置⽅法⽹上也很多,我简单记录下,
主要⽤到cors-filter-1.7.jar 和java-property-utils-1.9.jar 这两个jar 包,其实cors-filter jar 包最新的已经出到2.5了
不过1.7的也能⽤。然后在l ⾥⾯配置⼀个filter科技黑板报
普通的ajax 请求测试时没有问题的,但是 我在上传⽂件跨域的时候遇到个莫名其妙的问题,⽤chrome 上传不好使,⽤firefox 好使。 我配置的没有问题,代码也没什么问题,那么我猜测问题可能是浏览器的。 通过开发⼯具抓包,我发现chrome
的请求内容是这样的
下⾯的是firefox
的[html]
1. <span  style ="white-space:pre">    </span><filter>
2.        <filter-name>CORS </filter-name>
3.        <filter-class>s.CORSFilter </filter-class>
4.        <init-param>
氏族之王
5.            <param-name>cors.allowOrigin </param-name>
6.            <param-value>*</param-value>
7.        </init-param>开机启动项设置
8.        <init-param>
9.            <param-name>cors.supportedMethods </param-name>  10.            <param-value>GET, POST, HEAD, PUT, DELETE </param-value>  11.        </init-param>  12.        <init-param>  13.            <param-name>cors.supportedHeaders </param-name>  14.
<param-value>Accept, Origin, XRequestedWith, Content-Type, LastModified </param-value>  15.        </init-param>  16.        <init-param>  17.            <param-name&podHeaders </param-name>  18.            <param-value>SetCookie </param-value>  19.        </init-param>  20.        <init-param>  21.            <param-name>cors.supportsCredentials </param-name>  22.            <param-value>true </param-value>  23.        </init-param>  24.    </filter>  25.    <filter-mapping>  26.        <filter-name>CORS </filter-name>  27.        <url-pattern>/*</url-pattern>  28.    </filter-mapping>
可以看到chrome浏览器多了个access-control-allow-headers 头,⽽firefox则没有。通过Fiddler模拟请求,发现就是这个
属性的问题,去掉的话,就能发送成功。我⼜上cors的官⽹,找到了这么个图⽚
cors过滤器的过滤流程清晰易懂,看起来还是挺好理解的,后来我⼜查看了源码,发现在判断access-control-allow-headers头的时候会根据xml⾥⾯
cors.supportedHeaders配置的进⾏⽐对,如果这个头没有配置就返回403,我配置了,但是和浏览器配置的不⼀样我配置的是ContentType,但浏览器发送的是Content-Type,多了个横杠快哭了,看起来⼀个⼩问题,⽔却很深啊。在上图中可以看到,会先判断是不是带origin头,如果带的话,才会判断access-control-allow-headers头,这是个⾃定义的头信息。
在调试的过程中发现springmvc 默认是不⽀持options 请求,要想⽀持这个请求,需要在l的DispatcherServlet 增加
<init-param>
<param-name>dispatchOptionsRequest</param-name>
思想品质<param-value>true</param-value>
</init-param>
同时,在RequestMapping中需要知道method是options的,这样springmvc就可以接收到options请求。猫咪拉血
options请求⽐较特殊,是个透明请求,⼀般在跨域的时候浏览器会先发个options请求,询问服务器是否⽀持跨域, access-control-allow-method表⽰后⾯实际发送数据的请求⽅法,这个⽅法名需要包含在cors.supportedMethods 的配置。
CORS可以分成两种:
简单请求
复杂请求
⼀个简单的请求⼤致如下:
HTTP⽅法是下列之⼀
戒指保龄球HEAD
GET
POST
HTTP头包含
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type,但仅能是下列之⼀
application/x-www-form-urlencoded
multipart/form-data
杏树花
text/plain
任何⼀个不满⾜上述要求的请求,即被认为是复杂请求。⼀个复杂请求不仅有包含通信内容的请求,同时也包含预请求(preflight request)。
什么是角色游戏
转⾃:

本文发布于:2023-06-22 06:58:44,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1011638.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:请求   问题   跨域   发现
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图