什么是跨域请求


什么是同源策略 ?

同源策略

同源策略 (Same-Origin Policy) 最早由 Netscape 网景公司提出, 所谓 同源就是要求,协议,域名, 端口相同. 非同源的脚本不能访问或者操作其他域的页面对象(如DOM等). 作为著名的安全策略, 虽然它只是一个规范, 并不强制要求, 但现在所有支持 javaScript 的浏览器都会使用这个策略. 以至于该策略成为浏览器最核心最基本的安全功能, 如果缺少了同源策略, web的安全将无从谈起.

例:http://www.test.com:80

协议 域名 端口
http:// www.test.com :80

IE 未将端口号加入到同源策略的组成部分之中

为什么要有同源策略

保证各个网页相互独立, 互相之间不能直接访问私密资源;如:Storage, Iframe, Ajax 均受其限制,而src,href 属性则允许跨域

类型 是否允许跨域
LocalStorage
SessionStorage
IndexedDB
WebSQL
Cookie
Ajax
href
src

注意

https地址中如果加载了http资源,浏览器将认为这是不安全的资源,将会默认阻止,这就会给你带来资源不全的问题.

解决方案

//编写请求地址时,使用//浏览器则会根据当前网站的加载方式去加载资源
<script src="//cdn.bootcss.com/jquery/3.3.1/core.js"></script>

错误提示

image.png

什么是跨域请求

既请求非同源资时,就会产生跨域请求

Origin 未允许

image.png

Header 未允许

image.png

解决跨域请求方案

方案 优缺点 推荐指数
JSONP 需要前后台配合调试,别切仅支持GET传参 不推荐
CORS 目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。 推荐
代理转发 只需要服务器进行设置,操作简单,与浏览器版本无关 推荐

CORS(跨域资源共享)

浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,复杂请求则会发送附加请求,简单请求则只发送一次

验证逻辑

复杂请求

请求方式PUT、DELETE 或者 Content-Type字段的类型是application/json、以及自定义Header(请求头),属于复杂请求,复杂请求则需要预先发起 OPTIONS(预先请求) 请求,OPTIONS 请求验证通过则才会发起正式请求


image.png

简单请求

请求方式为 HEAD、GET、POST , 请求头:Accept、Accept-Language、Content-Language、Last-Event-ID、Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain ,两者必须同时满足则为简单请求。

浏览器则会在发起请求 Request Haders中添加 Origin: 字段 其中包含当前网站的 协议+域名+端口


image.png

则服务器端会在 Response Headers 返回 Access-Control-Allow-Origin:服务器端允许访问的 协议+端口+域名,* 表示所有人都可以访问。 Access-Control-Allow-Credentials: 它的值是一个布尔值,表示是否允许发送Cookie。


image.png

代理转发

image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言:对于跨域请求,很早之前就有去了解过,但因为一直关注的都是服务器后端开发,故也就仅仅停留在概念的理解上而没有机...
    ken_ljq阅读 89,910评论 6 128
  • 什么是跨域 1.浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域2.只要协议、域...
    coffee1949阅读 7,126评论 0 1
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,749评论 1 45
  • 题目1.什么是同源策略? 同源策略(Same origin Policy): 浏览器出于安全方面的考虑,只允许与本...
    FLYSASA阅读 1,752评论 0 6
  • 这是我的第79篇日记,相信日积月累的力量! 第一次在日记星球分享,当时心情激动又有些紧张,又一次给自己煅练成长的机...
    花儿YJ阅读 286评论 2 2