fetch发送请求 && 解决跨域问题

本文详细介绍了如何使用fetch API解决跨域问题,通过设置跨域响应头“Access-Control-Allow-Origin”和“Access-Control-Allow-Credentials”,并展示了fetch()发送post请求的完整代码示例。

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

解决跨域问题:加入跨域用的响应头:
“Access-Control-Allow-Origin” : “*”,
“Access-Control-Allow-Credentials” : true
fetch()发送请求的代码如下:

fetch("localhost:8080/getAll", {
    method: 'post', // 如果是get方式的话,只能把参数拼接在url里传过去,get方式不能有body
    "Access-Control-Allow-Origin" : "*",
    "Access-Control-Allow-Credentials" : true,
    headers: {
        'Content-Type': 'application/json'
    },
    body: JSON.stringify(this.state) // 把你要传的数据放在这里转化成json
}).then(function (response) { // 处理返回回来的数据
    return response.json();
}).then(function (respsoneData) {
    let jsonData = jQuery.type(respsoneData) == 'string' ? JSON.parse(respsoneData) : respsoneData;
    console.log("得到了所有的对象:");
    console.dir(jsonData);
});
### 使用 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、付费专栏及课程。

余额充值