博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php不用jsonp也能跨域
阅读量:4185 次
发布时间:2019-05-26

本文共 2513 字,大约阅读时间需要 8 分钟。

js跨域方式无非就是使用jsonp,这种方法很大众,还有一种方式也可以,那就是在服务器端设置允许任何访问
PHP中代码为:
[php] view plain copy print?在CODE上查看代码片派生到我的代码片
01.header("Access-Control-Allow-Origin:*"); //允许任何访问(包括ajax跨域)
PHP跨域访问的3种方法
近来项目中遇到跨服务器访问的问题,研究了好些日子,总结如下:
1、用file_get_contents方法
$host = 'url';
$randomNumber=file_get_contents($host);
echo $$randomNumber;
2、用Curl
$host = 'url';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $host);
// 返回结果
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
// 使用POST提交
curl_setopt($ch, CURLOPT_POST, 1);
// POST参数
$str = array('a=1','b=2','c=3');
curl_setopt($ch, CURLOPT_POSTFIELDS, $str);
// 结果
$res = curl_exec($ch);
curl_close($ch);
使用curl库,使用curl库之前,你可能需要查看一下php.ini,查看是否已经打开了curl扩展
3、 用fopen打开url, 以get方式获取内容
<?php
$url="http://www.dnjs.net/";
$fp=fopen($url,'r');
while(!feof($fp)){
$result.=fgets($fp,1024);
}
echo" $result";
fclose($fp);
?>
将网页设置为允许 XMLHttpRequest 跨域访问
在非IE下,使用XMLHttpRequest 不能跨域访问,
除非要访问的网页设置为允许跨域访问。
将网页设置为允许跨域访问的方法如下:
Java
Response.AddHeader("Access-Control-Allow-Origin", "*");
或指定域名下可以访问:
Response.AddHeader("Access-Control-Allow-Origin", "http://www.1688hot.com:80");
PHP
echo:header("Access-Control-Allow-Origin: *");
echo:header("Access-Control-Allow-Origin: http://www.1688hot.com:80");
html
<meta http-equiv="Access-Control-Allow-Origin" content="*">
<meta http-equiv="Access-Control-Allow-Origin" content="http://www.1688hot.com:80">
在返回的响应信息中,使用 Access-Control-Allow-Origin 头来控制哪些域名的脚本可以访问该资源。如果设置 Access-Control-Allow-Origin:*,则允许所有域名的脚本访问该资源。如果有多个,则只需要使用逗号分隔开即可。
注意:在服务器端,Access-Control-Allow-Origin 响应头中的端口信息不能省略。
HTTPS和HTTP的区别:
https协议需要到ca申请证书,一般免费证书很少,需要交费。
http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。
http的连接很简单,是无状态的。
HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全。
在被请求的php文件里增加:
header(“Access-Control-Allow-Origin: *”);
header(“Access-Control-Allow-Methods”, “POST,OPTIONS,GET”);
另外:
在chrome浏览器或者firefox浏览器里,由于安全限制的原因,本地调试JS,如果不配服务器环境而直接打开页面,那所有的AJAX操作会抛出下面错误:
XMLHttpRequest cannot load file:///D:/file.html. Origin null is not allowed by Access-Control-Allow-Origin.
Origin null is not allowed by Access-Control-Allow-Origin. 的意思就是由于安全原因浏览器不允许跨域访问。
chrome、firfox、opera都出现了这种情况,因为有安全沙箱,它们认为加载本地其它html文件为跨域访问。但是使用IE8就不会出现这种错误,很多人不是很理解。
这里Windows help and support 做出了解释 IE本身也并不是允许跨域的因为这样很不安全,但是如果不跨域的话又带来很多不便,所以会让你手动的选择一下是否允许跨域。而chrome、firfox、opera则默认就是不允许。
另外:
CORS的一篇文章:
https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS
另外:
如果脚本可以和同域的php交互的话,可以使用php的curl等方式帮助传输数据。

转载地址:http://scjoi.baihongyu.com/

你可能感兴趣的文章
通向架构师的道路(第三天)之apache性能调优
查看>>
Tomcat性能调优
查看>>
Tomcat集群
查看>>
quartz在集群环境下的最终解决方案
查看>>
ERwin Data Modeler 建模实践
查看>>
性能调优:JDK5.0自带工具
查看>>
认识软件估算 (7)
查看>>
项目控制 (sky)
查看>>
DWR 与 SPRING 集成配置
查看>>
JSTL 语法及参数
查看>>
懒加载
查看>>
DWR 几种使用方法
查看>>
DWR 学习及深入
查看>>
OA系统的技术发展
查看>>
EXT 基本使用
查看>>
网站架构收集(I)(转)
查看>>
JFreeChart教程 -- 入门
查看>>
JFreeChart各种图形的制作
查看>>
JFreeChart 应用全过程
查看>>
Spring 架构
查看>>