php跨域请求解决方案_关于跨域要说的几件事

浏览器的安全策略
什么是同源策略
跨域有几种常见的方式?
跨域使用的经验?

方式:
使用jsonp实现跨域?
使用cors实现跨域?
浏览器另类的跨域机制(除了ajax发请求产生跨域,还有几种场景会涉及跨域)?

一、浏览器的安全策略:同源策略

1、什么是同源

(1)同源(或本域)指:

  • 同协议:如都是http或者https
  • 同域名:如都是http://jirengu.com/a 和http://jirengu.com/b
  • 同端口:如都是80端口

(2)实例:同源 VS 不同源

A、同源,如:

http://jirengu.com/a/b.js 和 http://jirengu.com/index.php

B、不同源,即会产生跨域

  • 协议不同: http://jirengu.com/main.js 和 https://jirengu.com/a.php
  • 域名不同,域名必须完全相同才可以: http://jirengu.com/main.js 和 http://bbs.jirengu.com/a.php
  • 端口不同,第一个是80:http://jiengu.com/main.js 和 http://jirengu.com:8080/a.php

2、同源策略

即 浏览器出于安全方面的考虑,有时候只允许脚本与本域下的接口交互。

(1)页面发请求时,当前的url必须与接口的url对应起来(三同原则)

(2)浏览器所需的安全策略场景:

不同源的客户端脚本在没有明确授权的情况下,不能读写对方的资源。

A、发请求:如发送一个ajax请求去获取天气,所发请求与当前页面所在域是属于同域,请求响应,浏览器则会接受该请求。这属于浏览器接受请求的安全策略。(如禁止浏览器的安全策略,则不存在任何跨域)

B、嵌入iframe的内联页面:涉及到用户登录的安全性,假如进入一个含有内联页面的主页面中,JS若能操作内页交互,获取了内页中含有的用户重要的信息,如支付信息等

总结:安全策略则遵循同源策略。对于当前页面来说页面引入 JS 文件的域不重要,重要的是加载该 JS 文件所在的域或url(执行环境)。假如写了一个页面,引入了百度页面的js或css等,并不存在什么跨域问题。同源所指的是js执行环境的当前页面url,并不是js文件的地址

二、 跨域

1、跨域

跨域,是一种现象。绕过浏览器的同源策略获取数据。怎么绕过呢?即直接没有任何“三同”限制就能获取数据。

2、产生跨域

跨域的实例演示:修改host文件:给host文件 添加两条记录,这里使用http://a.com和http://b.com构造一本机下的两个不同域名平台,方便跨域操作

//同本机 不同域名
127.0.0.1  a.com  //浏览器url
127.0.0.1  b.com  //接口url

3、出现疑问:

跨域是由谁产生?请求是否发出去?响应是否产生?

A、现象:出现报错,数据未返回看不到的三种情况:

  • 第1种情况:请求未发出去,浏览器拦截掉
  • 第2种情况:请求发出去,服务器发现不一样,无响应
  • 第3种情况:请求发出去,服务器有响应,数据返回时,浏览器发现数据未匹配

B、实例演示第3种情况:

index.html:

//index.html
<h1>hello world</h1>
<script>
  var xhr = new XMLHttpRequest()
  xhr.open('GET','http://b.com:8080/getWeather', true)
  xhr.send()
  xhr.onload = function(){
    console.log(xhr.responseText)
  }
</script>

server.js

//server.js
var http = require('http')
var fs = require('fs')
var path = require('path')
var url = require('url')

http.createServer(function(req, res){

  var pathObj = url.parse(req.url, true)
//console.log(pathObj)

  switch (pathObj.pathname) {
    case '/getWeather':
      console.log('get Weather')/*执行*/
      res.end(JSON.stringify({beijing:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值