Fetch发送请求 + 解决跨域问题

本文介绍了fetch API的基础用法,包括如何发送GET和POST请求,并详细讲解了解决跨域问题的方法,强调了在服务器端设置Response Header以允许跨域访问的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

fetch的基本用法:

使用fetch发送get请求:

使用fetch发送post请求:

解决跨域问题:


fetch()方法提供了一种简单,合理的方式来跨网络异步获取资源。

可以使用fetch向服务器发送get请求或post请求来获取数据

fetch的基本用法:

fetch('/url').then(data=>{
	return data.text();
}).then(ret=>{
	//注意,这里才是得到的最终数据
	console.log(ret);
});

使用fetch发送get请求:

把参数拼接在url中传递过去

text():将返回体处理成字符串类型

json():返回结果和JSON.parse(responseText)一样

fetch('http://localhost:3001/user/login?username='+zhanghao+'&&password='+mima)
    .then(function (response) {
        return response.text();
    })
    .then(function (myJson) {
        alert(myJson);
    });

使用fetch发送post请求:

fetch('http://localhost:3001/admin/add', {
            method: 'post',
            body:JSON.stringify(obj),
            headers:{
                'Content-Type': 'application/json'
            }
        })
        .then(function (response) {
            return response.text();
        })
        .then(function (myJson) {
            alert(myJson);
        });

解决跨域问题:

在服务器端添加 Response Header

如果服务器返回的 response 头包含 “Access-Control-Allow-Origin:*” 或者 *为与请求源相同的地址。即服务器支持浏览器跨域访问。

app.all("*",function(req,res,next){

    res.header("Access-Control-Allow-Origin", "*");
    res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
    res.header("Access-Control-Allow-Headers", "X-Requested-With,Content-Type");
  
    next();
})

### 使用 Fetch 处理请求 在处理 `fetch` 请求中的问题时,主要依赖于服务器端配置 CORS (Cross-Origin Resource Sharing),以允许来自不同源的 HTTP 请求。浏览器通过同源策略限制从一个源加载的文档或脚本如何与另一个源的资源进行交互[^2]。 对于客户端而言,在发起 `fetch` 请求时,默认情况下不会携带凭证信息(如 cookies)。如果需要发送带有凭证的信息,则需设置额外选项: ```javascript const response = await fetch('https://example.com/api/data', { method: 'GET', credentials: 'include' // 或者 'same-origin' }); ``` 当涉及到 POST 方法并使用 `application/json` 类型的数据传输时,可能会触发预检请求(Preflight Request)[^4]。此时应确保服务端已正确配置响应头部来支持此类操作: - Access-Control-Allow-Origin: * - Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS - Access-Control-Allow-Headers: Content-Type, Authorization #### 自定义中间件实现 CORS 支持 为了简化开发流程,可以在后端框架中集成 CORS 中间件。例如,在 Go 的 Gin 框架下可以通过创建自定义中间件的方式轻松解决问题之一[^1]: ```go func CORSMiddleware() gin.HandlerFunc { return func(c *gin.Context) { c.Header("Access-Control-Allow-Origin", "*") c.Header("Access-Control-Allow-Credentials", "true") c.Header("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With") c.Header("Access-Control-Allow-Methods", "POST, OPTIONS, GET, PUT") if c.Request.Method == "OPTIONS" { c.AbortWithStatus(204) return } c.Next() } } ``` 此代码片段展示了如何构建一个简单的 CORS 中间件用于 Gin 应用程序,从而使得前端能够顺利地向该 API 发起请求
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值