服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - PHP教程 - 如何利用PHP 快速解决跨域问题

如何利用PHP 快速解决跨域问题

2022-11-16 16:30潘广宇 PHP教程

这篇文章主要介绍了如何利用PHP 快速解决跨域问题,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

跨域介绍

浏览器拥有同源策略限制确保安全,同源策略会阻止一个域的Javascript脚本和另外一个域的内容进行交互。

当一个请求url的协议、域名(包括多级域名)、端口三者之间任意一个与当前页面url不同即为跨域。

跨域介绍

  • 1)无法读取非同源网页的 Cookie、LocalStorage 和 IndexedDB
  • 2)无法接触非同源网页的 DOM 节点
  • 3)无法向非同源地址发送 AJAX 请求

跨域解决方案

1)JSONP(只支持GET请求)

Javascript:

?
1
2
3
4
5
6
7
8
9
10
<script src="http://test.com/data.php?callback=dosomething"></script>
// 向服务器test.com发出请求,该请求的查询字符串有一个callback参数,用来指定回调函数的名字
 
// 处理服务器返回回调函数的数据
<script type="text/javascript">
    function dosomething(res){
        // 处理获得的数据
        console.log(res.data)
    }
</script>

data.php:

?
1
2
3
4
5
6
7
8
9
10
header('Content-type: application/json');
 
//获取回调函数名
$jsoncallback = htmlspecialchars($_REQUEST ['callback']);
 
//json数据
$json_data = '["customername1","customername2"]';
 
//输出jsonp格式的数据
echo $jsoncallback . "(" . $json_data . ")";

2)CORS 跨域资源分享(Cross-Origin Resource Sharing)

  • 1、普通跨域请求:只需服务器端设置 Access-Control-Allow-Origin
  • 2、带cookie跨域请求:前后端都需要进行设置

PHP:

?
1
header("Access-Control-Allow-Origin:*");

或者 Nginx:

?
1
2
3
4
5
6
7
8
location ~ .*\.php$
{
    add_header 'Access-Control-Allow-Origin' '*';    # 就加这句就行
    include fcgi.conf;
    fastcgi_pass  127.0.0.1:10080;
    fastcgi_index index.php;
    expires off;
}

Javascript:

?
1
2
3
4
5
6
7
8
9
$.ajax({
   url: 'http://www.test.com:8080/login',
   type: 'get',
   data: {},
   xhrFields: {
       withCredentials: true    // 前端设置是否带cookie
   },
   crossDomain: true,           // 会让请求头中包含跨域的额外信息,但不会含cookie
});

3)WebSocket 浏览器与服务器的全双工通信,同时也是跨域的一种解决方案

4)Nginx 反向代理

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
server {
    # nginx监听所有 test.com:9000 端口收到的请求
 
    listen       9000;
    server_name  test.com;
 
    # test.com:9000 会被转发到 192.168.25.20:9000
    location / {
        proxy_pass http://192.168.25.20:9000;
    }
 
    # test.com:9000/api/ 会被转发到 "192.168.25.20:9000/api/"
 
    location /api/ {
        proxy_pass http://192.168.25.20:9000;
    }
}

到此这篇关于如何利用PHP 快速解决跨域问题的文章就介绍到这了,更多相关PHP 跨域内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/panguangyuu/article/details/123215549

延伸 · 阅读

精彩推荐
  • PHP教程php数组的一些常见操作汇总

    php数组的一些常见操作汇总

    数组是最基本的数据结构,关于数组的操作是程序员最经常用到的。这里将一些常用的操作写成函数。 ...

    PHP教程网2732019-12-07
  • PHP教程php jsonp单引号转义

    php jsonp单引号转义

    JSONP(JSON with Padding)是一个非官方的协议,他的实现方式大致就是:让客户端决定要回调的Javascript函数名,在第三方服务端将 JSON 数据拼装到回调函数名...

    PHP教程网1652020-08-15
  • PHP教程ThinkPHP6通过Ucenter实现注册登录的示例代码

    ThinkPHP6通过Ucenter实现注册登录的示例代码

    这篇文章主要介绍了ThinkPHP6通过Ucenter实现注册登录的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    sarawang9962021-11-02
  • PHP教程java模拟PHP的pack和unpack类

    java模拟PHP的pack和unpack类

    这篇文章主要介绍了java模拟PHP的pack和unpack类的相关资料,需要的朋友可以参考下...

    Wanes8272021-01-10
  • PHP教程Linux系统下PHP-FPM的安装和配置教程

    Linux系统下PHP-FPM的安装和配置教程

    这篇文章主要介绍了Linux系统下PHP-FPM的安装和配置教程,PHP-FMP是用于PHP的FastCGI管理器,经常被用于配置PHP和服务器软件,需要的朋友可以参考下...

    低调小一4482020-11-17
  • PHP教程PHP实现Unicode编码相互转换的方法示例

    PHP实现Unicode编码相互转换的方法示例

    这篇文章主要介绍了PHP实现Unicode编码相互转换的方法,结合实例形式分析了Unicode编码与解码的相关实现与使用技巧,需要的朋友可以参考下...

    PHP二次开发9132021-05-12
  • PHP教程PHP论坛实现积分系统的思路代码详解

    PHP论坛实现积分系统的思路代码详解

    这篇文章主要介绍了PHP论坛实现积分系统的思路,本文通过实例代码给大家介绍的非常详细,文中通过代码给大家补充介绍了thinkphp删除图片的方法实现代码...

    陈莺莺呀4802020-06-17
  • PHP教程php中大厂的面试题整理

    php中大厂的面试题整理

    在本篇文章里小编给大家整理的是一篇关于php中大厂的面试题整理内容,有兴趣的朋友们可以学习参考下。...

    十一8112021-11-04