使用Postman发送跨域请求实验

这篇具有很好参考价值的文章主要介绍了使用Postman发送跨域请求实验。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 跨域是什么?

CORS(Cross-Origin Resource Sharing,跨域资源共享)是一种机制,允许在浏览器中向其他域(不同源)发送 XMLHttpRequest 请求,即跨域请求。在默认情况下,浏览器限制跨域请求,以防止潜在的安全风险,如CSRF攻击(跨站请求伪造)

但是,CORS 通过一系列的 HTTP 头部字段来进行通信,使得服务器可以告知浏览器哪些跨域请求是安全的,从而实现跨域资源共享。

2 何为同源呢?

同源指的是协议相同、域名相同和端口相同。当网页尝试从一个源的域、协议、端口中的任何一个与当前页面不同的资源进行请求时,就会触发跨域问题。

  • 协议相同、域名相同和端口相同
  • 必须满足三者同时满足,否则即是跨域请求

3 跨域请求是如何被检测到的?

通过使用下面这些 HTTP 头部字段,CORS 机制允许服务器和客户端之间在跨域请求时进行通信,并确保安全性。服务器可以根据请求中的 Origin 头部字段来判断是否允许跨域访问,并设置相应的 CORS 响应头来控制跨域请求的行为。

跨域通信相关字段表

字段 作用
Origin 指示请求的来源地址。
Access-Control-Allow-Origin 服务器端设置的响应头,用于指示允许访问资源的来源地址。可以是特定的域名、通配符(*)表示允许所有来源,或者一系列域名的白名单。
Access-Control-Allow-Methods 服务器端设置的响应头,用于指示允许的 HTTP 方法,如 GET、POST、PUT、DELETE 等。
Access-Control-Allow-Headers 服务器端设置的响应头,用于指示允许的 HTTP 请求头,如 Content-Type、Authorization 等。
Access-Control-Allow-Credentials 服务器端设置的响应头,用于指示是否允许发送 Cookie 和认证信息。
Access-Control-Request-Headers 客户端发起预检请求时,用于指示实际请求中会使用的自定义请求头。
Access-Control-Request-Method 客户端发起预检请求时,用于指示实际请求中会使用的 HTTP 方法。

4 Postman跨域请求测试

Postman 不受同源策略的限制,因此它可以发送跨域请求而不受到浏览器的拦截。

4.1 后端准备

后端采用了restful风格的url,按自己需求进行更改。服务端配置在8080端口。

@RequestMapping("/user/{id}")
public Map<String, String> testCORS(@PathVariable String id, @RequestHeader HttpHeaders httpHeaders) {
    System.out.println("Origin:" + httpHeaders.getOrigin());
    System.out.println("成功测试CORS: id " + id);
    HashMap<String, String> map = new HashMap<>();  //将origin字段以map形式返回去
    map.put("Origin", httpHeaders.getOrigin());
    return map;
}

后端跨域解决方案之一,采用配置Spring MVC的跨域请求信息,按匹配放行:

package com.song.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @author song
 * @version 0.0.1
 * @date 2024/4/7 19:03
 */
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")  //匹配所有请求
                .allowedOrigins("127.0.0.1:8081")  //放行的Origin
                .allowedMethods("*");    //放行的方法
    }
}

4.2 测试用例

4.2.1 后端未配置跨域请求

(1) 前端不跨域

在前文中既然知道了服务器端是根据origin字段进行跨域判断的,那我们在Postman构建一个带Origin字段的header。这个测试为后端没有配置CORS请求映射的测试情况。
使用Postman发送跨域请求实验,Java Web技术,postman,测试工具,java,spring boot,vue.js
使用Postman发送跨域请求实验,Java Web技术,postman,测试工具,java,spring boot,vue.js
上面请求中表现了请求地址、请求头、响应头、响应体。可以看出现在的请求是同源的,相当于使用浏览器和后端直接通信,不经过脚本等方式。

同源策略是针对通过脚本等方式进行的跨域请求的安全限制,而直接在地址栏输入地址是用户主动行为,不受同源策略的限制。在这种情况下,浏览器会默认认为用户信任目标地址,因此不会将其视为跨域请求。不过有一些其他安全性较高操作也会进行限制。

从上方的响应体的返回数据来看,普通请求不会携带Origin字段,后端没有配置CORS则不会返回字段Access-Control-Allow-Origin、Access-Control-Request-Method、Access-Control-Request-Headers。

(2)前端跨域

现在把后端的跨域配置注释掉。测试跨域情况下,在没有配置跨域时,能不能成功。

上面我们了解到,跨域的判断方式是根据Origin字段进行判断的。那么我们构造一个带有Origin字段的请求头,模拟跨域通信。

下方的实验结果分析来看,我们在Headers中添加了一个Origin字段127.0.0.1:8081,相当于有个请求需要从这个Origin地址转发到服务器端地址127.0.0.1:8080。实际中该字段由浏览器检测到跨域请求时自动添加的。

后端由于没有配置跨域,所以并没有返回跨域相关字段。在返回结果中,成功返回Origin字段,但是不代表后端的跨域没有起作用。 Postman由于不会受到浏览器的拦截,所以会显示后端的信息。
使用Postman发送跨域请求实验,Java Web技术,postman,测试工具,java,spring boot,vue.js
使用Postman发送跨域请求实验,Java Web技术,postman,测试工具,java,spring boot,vue.js
》》》再次测试Vue发送跨域请求,同样在后端没有配置跨域信息情况下:
使用Postman发送跨域请求实验,Java Web技术,postman,测试工具,java,spring boot,vue.js
可以发现,返回403错误,表示服务器有能力处理这次请求,但是拒绝授权访问。
为什么采用Postman模拟跨域的时候,后端没有设置CORS配置却可以直接访问呢?但是使用Vue却不可以呢?
跨域究竟是后端还是浏览器搞的鬼,答案:浏览器
后端会处理这份请求,但是浏览器会把返回的响应体直接过滤掉,虽然返回了200,但是浏览不给你这份数据。
使用Postman发送跨域请求实验,Java Web技术,postman,测试工具,java,spring boot,vue.js
使用Postman发送跨域请求实验,Java Web技术,postman,测试工具,java,spring boot,vue.js

4.2.2 后端配置跨域信息

将这段代码加入Spring MVC的自定义配置中。

package com.song.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @author song
 * @version 0.0.1
 * @date 2024/4/7 19:03
 */
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")  //匹配所有请求
                .allowedOrigins("127.0.0.1:8081")  //放行的Origin
                .allowedMethods("*");    //放行的方法
    }
}

(1)前端不跨域

请求头采用默认的请求头,请求地址依旧后端的请求地址。在响应体中则发生了变化。

可以发现,响应头中多了几个字段,依次是Origin、Access-Control-Request-Method、Access-Control-Request-Headers。从上面的对照表可以看出,这些分别表示请求源地址、访问控制允许的方法、访问控制允许的请求头。
使用Postman发送跨域请求实验,Java Web技术,postman,测试工具,java,spring boot,vue.js
使用Postman发送跨域请求实验,Java Web技术,postman,测试工具,java,spring boot,vue.js
不跨域情况下Origin字段始终为空。

浏览器中直接测试该请求,返回结果和上面一致。
使用Postman发送跨域请求实验,Java Web技术,postman,测试工具,java,spring boot,vue.js文章来源地址https://www.toymoban.com/news/detail-847863.html

(2)前端跨域
  1. 测试允许跨域的Origin
    使用Postman发送跨域请求实验,Java Web技术,postman,测试工具,java,spring boot,vue.js
    在响应体中返回了一个字段为Access-Control-Allow-Origin: 127.0.0.1:8081
    使用Postman发送跨域请求实验,Java Web技术,postman,测试工具,java,spring boot,vue.js
    使用Postman发送跨域请求实验,Java Web技术,postman,测试工具,java,spring boot,vue.js
  2. 测试不允许跨域的Origin
    采用8082端口访问8080端口的服务器,可以发现返回了无效跨域请求。可以知道,后端对这份没有匹配CORS配置的请求进行了拦截,直接返回403错误信息。否则,会和上面后端不配置CORS、前端跨域的情况一样,会回显Origin信息。说明并没有走Controller的处理方式。
    使用Postman发送跨域请求实验,Java Web技术,postman,测试工具,java,spring boot,vue.js
    响应体内容
    使用Postman发送跨域请求实验,Java Web技术,postman,测试工具,java,spring boot,vue.js

到了这里,关于使用Postman发送跨域请求实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用Postman发送GET请求和POST请求

    Postman是一款流行的API测试和开发工具,它提供了一个易于使用的界面,用于发送HTTP请求并与REST、SOAP和其他Web服务进行交互。以下是对Postman的简单介绍: 发送HTTP请求:Postman允许您以简单直观的方式发送各种类型的HTTP请求(GET、POST、PUT、DELETE等)到指定的URL。您可以设置请

    2024年02月05日
    浏览(61)
  • 使用 Postman 批量发送请求的技巧

    最近写了几个接口: 获取 books 的接口 获取 likes 的接口 获取 collections 的接口 但是我还是不放心,因为这些接口到底稳不稳定呢?上线后有没有隐患呢?所以我想做一个批量发送接口模拟~ 但是想要做到批量发送接口,必须要有一个条件 批量发送 。 起因 当我们写一个接口时

    2024年02月08日
    浏览(48)
  • 使用 Postman 批量发送请求的最佳实践

    目录 背景 批量发送? 起因 思考 Postman 批量发送接口 创建集合和接口 批量发送接口 资料获取方法 最近写了几个接口: 获取 books 的接口 获取 likes 的接口 获取 collections 的接口 但是我还是不放心,因为这些接口到底稳不稳定呢?上线后有没有隐患呢?所以我想做一个批量发

    2024年02月13日
    浏览(42)
  • VUE项目使用axios发送post跨域请求,返回数据失败问题

    Access to XMLHttpRequest at \\\'http://xxxx\\\' from origin \\\'http://localhost:8080\\\' has been blocked by CORS policy: Response to preflight request doesn\\\'t pass access control check: No \\\'Access-Control-Allow-Origin\\\' header is present on the requested resource. 第一步 ,在后端接受方,对返回的数据添加 响应头 ,使用下面这句代码: 第二步

    2024年02月11日
    浏览(49)
  • 使用 Postman 发送 get 请求的简易教程

    在API开发与测试的场景中, Postman  是一种普遍应用的工具,它极大地简化了发送和接收HTTP请求的流程。要发出GET请求,用户只需设定正确的参数并点击发送即可。 创建一个新请求并将类型设为 GET 首先,启动 Postman 应用,并创建一个新的  HTTP  请求。 在创建的接口中,默

    2024年01月19日
    浏览(58)
  • 入门教程:使用 Postman 发送 post 请求

    Postman 是一个实用的开发工具,它让发送各类 POST 请求成为了可能,包括文本、JSON、XML 以及文件等。开发者利用此工具不仅能够检验API的功能性,还能仿真客户端的请求行为,进而深入了解客户端如何与 API 进行互动。 HTTP 协议中的 POST 请求通常用于提交数据,如用户提交在

    2024年01月18日
    浏览(64)
  • Postman如何使用(一):导入导出和发送请求查看响应

    在Postman中导入导出我们的 测试数据包 和 工作环境 非常的方便: 导出数据包的方法如下: 如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:

    2024年02月03日
    浏览(41)
  • 使用postman发送post请求,却报错不支持get请求的原因

    场景复现 可以看到我们postman发出的确实是post请求,message却报错这个接口不支持get请求,说明服务器实际上收到的是一个get请求。 产生原因分析 如果我们访问的是线上的接口,线上的nginx一般都会对http访问做一个302重定向,跳转为https访问。 如果我们正常访问一个页面,它

    2024年02月09日
    浏览(66)
  • 在postman中使用raw纯文本格式发送POST请求成功而在python爬虫中发送POST请求失败

    在postman中是成功的 我查了很多资料,说raw是纯文本格式提交的,我又去看postman中的headers,查看content-Type中指定了格式 修改了爬虫中的headers 或者把data写出字典格式,再用json.dumps(data)转换一下

    2024年02月12日
    浏览(55)
  • 使用PostMan使用post请求向后端发送json对象时报错

     报错信息:Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize instance of com.itheima.domain.Book out of START_ARRAY token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of com.itheima.domain.Book out of START_ARRAY token  at

    2024年02月03日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包