fetch跨域请求数据的前端设置和后端php的header设置

跨源请求,也称为CORS(Cross-Origin Resource Sharing)请求,是Web开发中常见的一种需求,允许一个网页的JavaScript代码向与该网页不同源的服务器发出HTTP请求。以下是使用JavaScript中的fetch函数进行跨源请求的一个基本示例:
这里做测试的是前端http://127.0.0.1:5500/fetchcors.html
后端:http://xuejx.xyz/fetchcors.php
他们是在不同的域下,进行跨域请求

<html>
    <head>
        <meta http-equiv="content-type" content="text/html;charset=UTF-8"/>
        <title>测试fetch的跨域请求</title>
    </head>
    <body>
        <script>
        //跨域请求后端URL
            const url='http://xuejs.xyz/fetchcors.php';
            //fetch的第2个参数init对象配置
            const options={
                method:'GET',//请求模式get
                headers:{
                    'Content-Type':'application/json'//设置请求标头数据为json格式
                },

            };
            fetch(url,options)
            .then((response)=>{
                if(!response.ok)
                {
                    throw new Error('network response was not ok');
                }
                //response.type是请求返回的数据特征,这里结果为:cors表示跨域
                console.log(response.type);
                //获取后端返回数据转化为json,json()是response的方法,会自动转化为json
                return response.json();
            })
            .then(data=>{
                console.log(data);//显示返回数据
            })
            .catch(error=>{
                console.log('fetch操作发生一个错误:',error);
            });
            
        </script>
    </body>
</html>

//后端fetchcors.php
// 检查是否是OPTIONS请求,如果是,则发送CORS预检请求的响应
if ($_SERVER[‘REQUEST_METHOD’] == ‘OPTIONS’) {
header(‘Access-Control-Allow-Origin: *’); // 允许跨域访问的域名,*代表允许所有域名
header(‘Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS’); // 允许的HTTP方法这几种
header(‘Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With’); // 允许的头信息有这三种
header(‘Access-Control-Max-Age: 1728000’); // 设置预检请求的有效时间
exit;
}

<?php
//允许前端请求的域名
$allow_orgin='http://127.0.0.1:5500';
//OPTIONS 请求方式是 HTTP 协议中的一种,主要用于从响应头中获取服务器支持的HTTP请求方式
if($_SERVER['REQUEST_METHOD']=='OPTIONS')
{
    header('Access-Control-Allow-Origin:'.$allow_orgin);//设置前端跨域的域名
    header('Access-Control-Allow-Methods:GET');//请求方式为GET
    header('Access-Control-Allow-Headers:Content-Type');//请求的数据格式
    header('Access-Control-Max-Age:300000');//请求的预检时间为5分钟
    exit;//设置完后退出
}
//现在设置本页面的数据格式
header("Content-Type:application/json");
//本页面允许的跨域请求前端域名
header('Access-Control-Allow-Origin:'.$allow_orgin);
//返回给前端的数据
$data=[
    'id'=>1,
    'name'=>'James doe',
    'email'=>'James@163.com'
];
echo json_encode($data);
?>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
fetch API 是 JavaScript 中用于发起网络请求的一个现代接口,支持浏览器和 Node.js 环境。对于跨域请求(CORS, Cross-Origin Resource Sharing),fetch 在默认情况下受到同源策略的限制,即只有当请求的域名、协议和端口与当前页面完全一致时,才会被浏览器允许。 如果需要向其他域发送请求,fetch 可能会遇到跨域问题。但是可以通过以下几种方法解决: 1. **设置 `credentials`**:可以在选项中设置 `fetch` 请求的 `credentials` 属性为 'include' 或者 'same-origin'。这允许发送 cookies,但只在 `HTTP/HTTPS` 协议下有效,并且可能会触发 CORS 头部。 ```javascript const options = { credentials: 'include', }; fetch(url, options); ``` 2. **服务端配置**:后端服务器可以添加 Access-Control-Allow-Origin、Access-Control-Allow-Methods 和 Access-Control-Allow-Headers 等 CORS 头部信息,允许指定的来源访问资源。 3. **JSONP**(JSON with Padding):对于 GET 请求,如果目标域支持 JSONP,可以通过动态创建 `<script>` 标签的方式绕过同源策略。 4. **CORS Preflight Request**:fetch 首次跨域请求前,会先发送一个 OPTIONS 请求(CORS Preflight)检查权限。如果允许,客户端再发送实际的请求。 ```javascript fetch(url, { method: 'POST', // 假设是 POST 方法 headers: { 'Content-Type': 'application/json', }, }) .then(response => response.json()) .catch(error => console.error('Error:', error)); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值