美文网首页
CORS同源政策——服务器对于跨域的处理

CORS同源政策——服务器对于跨域的处理

作者: 林立镇 | 来源:发表于2017-08-14 23:49 被阅读0次
如何伪装一个网站(在本地)

编辑 hosts 文件
mac: sudo vi /etc/hosts
windows: http://jingyan.baidu.com/article/b907e627d86be046e6891c41.html8
添加一行 127.0.0.1 xxx.com
保存关闭
访问 xxx.com:端口号

同源的意思

协议、域名、端口号必须相同,
路径、文件、参数可以不同

CORS同源政策

约定

  1. 简单模式(GET、POST)
    目标服务器在响应头里添加 Access-Control-Allow-Origin: http://xxx.com3 即可
  2. 复杂模式(除了 GET、POST)
    Access-Control-Allow-Origin: http://frank.comAccess-Control-Allow-Methods: POST, GET, OPTIONS, PATCH, DELETE, HEAD
    会发两次请求,第一次是 OPTIONS 请求,询问目标服务器是否允许 PUT/PATCH如果允许,则发真正的请求。

github跨域的实例
先编辑host文件
加入两行代码

127.0.0.1 llz.com
127.0.0.1 llj.com

则本地服务器的域名又多了两个,分别是
llz.com
llj.com

llz.html
<h2>llz的网站</h2>
llj.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <h2>llj的网站</h2>
    <script type="text/javascript">
        let xhr = new XMLHttpRequest()
        xhr.open('GET','http://llz.com/llz_private')
        xhr.onreadystatechange = function(){
            if(xhr.readyState === 4){
                console.log(xhr.responseText)
            }
        }
        xhr.send()
    </script>
</body>
</html>
llz_private.json
{
    "name":"llz",
    "age" : 22
}
server.js
var http = require('http')
var fs = require('fs')
var url = require('url')

var port = process.env.PORT || 80;
//修改端口为80
var server = http.createServer(function(request, response){

  var temp = url.parse(request.url, true)
  var path = temp.pathname
  var query = temp.query
  var method = request.method

  if(path === '/'){  // 如果用户请求的是 / 路径
    var string = fs.readFileSync('./llz.html', 'utf8')  
    response.setHeader('Content-Type', 'text/html;charset=utf-8')  
    response.end(string)   
  }else if(path === '/llz'){ 
    var string = fs.readFileSync('./llz.html', 'utf8')  
    response.setHeader('Content-Type', 'text/html;charset=utf-8')  
    response.end(string)   
  }else  if(path === '/llj'){  
    var string = fs.readFileSync('./llj.html', 'utf8')  
    response.setHeader('Content-Type', 'text/html;charset=utf-8')  
    response.end(string)   
  }else  if(path === '/llz_private'){  
    var string = fs.readFileSync('./llz_private.json')  
    response.setHeader('Access-Control-Allow-Origin','http://llj.com')
    //在http://llj.com/llj的网址里向和它不同的域名http://llz.com/llz_private发出请求,
    //属于跨域,要在服务端添加上面一行代码
    response.setHeader('Access-Control-Allow-Methods','POST, GET, OPTIONS, PATCH, DELETE, HEAD')
    //当发出GET、POST之外方式的请求时,(一般是第二次请求,第一次是GET请求)
    //要在服务器上添加上面一行代码
    response.setHeader('Content-Type', 'application.json')  
    response.end(string)   
  }else  if(path === '/style.css'){   
    var string = fs.readFileSync('./style.css', 'utf8')
    response.setHeader('Content-Type', 'text/css')
    response.end(string)
  }else if(path === '/main.js'){  
    var string = fs.readFileSync('./main.js', 'utf8')
    response.setHeader('Content-Type', 'application/javascript')
    response.end(string)
  }else{  
    response.statusCode = 404
    response.setHeader('Content-Type', 'text/html;charset=utf-8') 
    response.end('找不到对应的路径,你需要自行修改 index.js')
  }

  console.log(method + ' ' + request.url)
})

server.listen(port)
console.log('监听 ' + port + ' 成功,请用在空中转体720度然后用电饭煲打开 http://llz.com:' + port)

在命令行运行(需安装Node.js)

node server.js

可以在浏览器打开
llz.com或llj.com
都可以打开llz.html网页
路径为/llz
还是打开这个网页
路径为llj
则打开llj.html网页,
当使用http://llj.com域名打开llj.html网页时,
即URL为http://llj.com/llj.html
就会向URL为llz.com/llz_private.json发送一个请求,
服务器返回这个文件,
这就是跨域。
因为是域名为llj.com里的文件向域名为llz.com里的文件发出请求,
两者不同源。

相关文章

  • CORS与CORB的区别

    1、CORS是跨域,出于同源政策的安全保护,需要配置后台服务器,才能做到允许跨域,跨域未作配置http无状态码,会...

  • CORS同源政策——服务器对于跨域的处理

    如何伪装一个网站(在本地) 编辑 hosts 文件mac: sudo vi /etc/hostswindows: ...

  • 同源策略与跨域

    跨域就是违背了同源策略解决跨域的方法有:jsonp,cors和服务器代理

  • 同源策略和跨域问题

    浏览器同源政策及其规避方法 跨域资源共享 CORS 详解

  • AJAX入门

    处理跨域的主要方法 JSONP CORS本文主要讨论CORS解决AJAX因为浏览器同源策略不能跨域请求数据的问题。...

  • CORS同源政策——JSONP跨域处理

    llz.html llj.html xxx.js server.js 在命令行运行(需要下载Node.js) 在浏...

  • Asp.Net Core CORS

    前言 CORS(跨域资源共享)是一种W3C标准,允许服务器放宽同源策略。使用CORS,服务器可以在显式允许某些跨域...

  • SpringBoot2.x整合CORS解决跨域问题

    跨域问题系列文章 1. 同源策略与CORS(跨域请求的起源)2. SpringBoot2.x整合CORS解决跨域问...

  • 跨域请求解决办法

    CORS:即跨域资源共享,它允许浏览器向跨域服务器发送ajax请求 与JSONP的区别:jsonp是绕过了同源限制...

  • JS 常见问题解读

    CORS 跨域资源共享,它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源...

网友评论

      本文标题:CORS同源政策——服务器对于跨域的处理

      本文链接:https://www.haomeiwen.com/subject/sxgprxtx.html