美文网首页
同源策略与跨域

同源策略与跨域

作者: Zoey_h | 来源:发表于2018-11-06 22:55 被阅读0次

一、浏览器发请求的几种方式:

1、form表单,优点是可以发送多种形式的请求,缺点是会刷新或重开页面;
2、a,只能发送get请求,且会刷新或重开页面;
3、img,只能发送get请求,且只能以图片的形式返回;
4、link,只能发送get请求,且只能以css或者favicon的形式返回;
5、script,主要表现形式是JSONP,只能发送get请求,且会以脚本的形式运行

二、AJAX:

1、使用XMLHttpRequest发请求
2、服务器返回XML(现在更多的是用JSON)格式的字符串
3、JS解析XML(JSON),并更新局部页面

举个栗子:

//前端代码
let request = new XMLHttpRequest()
request.open('get','http://www.baibu.com/xxx')
request.send()
request.onreadystatechange = ()=>{
    if(request.readyState === 4){
        if(request.status === 200){
            let string = request.responseText
            let obj = window.JSON.parse(string)
            console.log(obj)
        }
    }
}

三、同源策略:

  • 最初,浏览器出于安全考虑,默认A网页设置的Cookie,B网页不能打开,除非这两个网页同源。

  • 同源是指:协议+域名+端口 都要相同

  • 目前受到同源策略限制的行为有:
    1、无法读取非同源网页的Cookie、LocalStorage、IndexedDB
    2、无法接触非同源网页的DOM
    3、无法向非同源网页发送AJAX请求(可以发送,但浏览器不会返回信息)

  • 规避同源策略的方法:
    1、JSONP
    2、WebSocket
    3、CORS

四、JSONP:

请求方:浏览器
响应方:服务器
1、JSONP是JSON+Panding的缩写,是服务器与客户端跨源通信的常用方法,只能发送get请求,不受同源策略限制
2、请求方动态创建script,src指向响应方,同时传一个查询参数,格式为?callback = yyy,用来指定回调函数的名字
3、响应方收到请求后,会将数据放在回调函数的参数位置返回给请求方

  • 为什么JSONP不能用POST方法?
    1、因为JSONP就是动态生成一个script来实现的
    2、动态创建script只能用GET,不能用POST

五、WebSocket:

WebSocket是一种以ws://wss://为前缀网络通信协议,请求头格式如下(摘自维基百科):

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com

该协议不实行同源策略,具体教程可参考阮一峰的WebSocket教程

六、CORS:

  • CORS的全称是跨源资源共享(Cross-Origin Resource Sharing),它允许浏览器向跨域的服务器发出XMLHttpRequest请求,简单地说在响应头设置一个setHeader,内容是Access-Control-Allow-Origin和允许发来请求的URL:
//后端代码
...}else if(path === '/xxx'){
    response.stateCode = 200
    response.setHeader('Content-Type','text/json;charset=utf-8')
    response.setHeader('Access-Control-Allow-Origin','http://www.baidu.com:8001')
    //这是最主要的,允许接受由http://www.baidu.com:8001发出的请求,如果设置为`*`,就是接受所有跨域请求。
    response.write(`{
        "success":{
            "content":"Congraduation"
        }
    }`)
    response.end()
}
  • JSONP与CORS的比较:
    CORS可以支持所有类型的HTTP请求,JSONP只能支持GET请求
    JSONP支持老式浏览器,CORS不一定适用。

相关文章

  • 前端开发的跨域问题

    跨域背景 跨域是由于浏览器的同源策略引起的;那么什么是同源策略呢?同源策略是指页面请求的接口地址必须与 url 地...

  • H5跨域访问

    跨域访问是源于浏览器的同源策略而引申出来的概念 1、先了解什么是同源策略和跨域访问 同源策略、跨域解决方案 - R...

  • H5 知识点 - 收藏集 - 掘金

    跨域解决方案总结 - 前端 - 掘金为什么需要跨域? 就得先知道同源策略. 同源策略 同源策略是为了保证数据的安全...

  • 通过script标签实现跨域

    跨域 什么是跨域? 跨域问题是由于javascript语言安全限制中的同源策略造成的。同源策略是由Netscape...

  • 前端基础(问答23)

    keywords: 同源策略、跨域、jsonp。 什么是同源策略(same origin policy) 同源:协...

  • 有关跨域的相关问题和方法

    跨域是什么 同源策略 在讲解什么是跨域之前先要清楚什么是同源策略,“同源政策”(same-origin polic...

  • 网页请求(同源策略)

    跨域与同源策略 跨域:是指的通过JS在不同域之间进行数据传输或通信。同源策略:它是由Netscape提出的一个著名...

  • 同源策略,跨域请求处理

    跨域访问 - 跨域请求 同源策略 适用于浏览器的一种资源访问策略;同源策略(Same origin policy)...

  • 无星的Egg之旅(一)——跨域

    先说点老生常谈的问题 啥是跨域 1.同源策略 要了解跨域,先要说说同源策略。同源策略是由 Netscape 公司提...

  • 同源策略和跨域

    什么是跨域问题? 为什么会出现跨域问题? 因为浏览器的同源策略(同源指的是:协议+域名+端口相同)。 同源策略是浏...

网友评论

      本文标题:同源策略与跨域

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