用Postman调试跨域问题

前言

  跨域问题我已经遇到许多次了,每次都是搞得满头问号,这次要把这个问题彻底梳理一下,弄明白问题的根源,以后就不会再手忙脚乱了。

  跨域问题,大佬的这篇文章《SpringBoot配置Cors解决跨域请求问题》原理及解决方法写的非常好,强烈推荐,我下面的内容主要是讲后端开发如何进行调试。

  另外,了解一下 Http 的内容协商机制,也有助于我们解决跨域问题,推荐下这篇文章《HTTP 协议中 Vary 的一些研究

跨域问题

  首先,跨域问题本质是因为浏览器的同源策略导致的。

  1. 浏览器会为请求头添加 Origin、Host 两个字段,分别代表请求来源站点、请求的目标站点(域名或者ip+端口)。

  2. 服务器收到请求后,根据 Origin 和 Host 两个字段判断是否是跨域请求。

  3. 如果允许,则在 HTTP 头信息中添加 Access-Control-Allow-Origin 字段,并返回正确的结果

  4. 如果不 允许,则不在 HTTP 头信息中添加 Access-Control-Allow-Origin 字段 

用postman复现跨域问题

  1. Postman 在请求Header上,并不会主动添加 Origin 字段,需要我们手动添加,如图:

 

   2. postman不管是否跨域,返回的都是200结果,因此不能用是否返回值判断服务器是否允许跨域,而应该使用 response 的 Header 字段中是否存在允许跨域的字段来判断是否允许跨域。

   相关字段包括:

   Access-Control-Allow-Origin   是否允许该请求访问

   Access-Control-Expose-Headers   可选,可以让用户拿到的字段。有几个字段无论设置与否都可以拿到的,包括:Cache-ControlContent-LanguageContent-TypeExpiresLast-ModifiedPragma

   Access-Control-Allow-Credentials: 可选,用户是否可以发送、处理 cookie

 

 

posted @ 2021-01-26 11:12  上课爱睡觉  阅读(20151)  评论(0编辑  收藏  举报