前端-跨域梳理

一、修改请求头导致跨域

前端修改请求头之后,http request的头部增加字段后,不符合服务端配置的要求,服务端网关会对请求进行拦截,请求跨域。

什么是跨域?怎么解决?

1、什么是跨域?

跨域是一种常见的网络请求问题,它发生在尝试从不同的源(域名、协议或端口)访问资源时。由于浏览器的同源策略,这些请求可能会被阻止。但是,有多种方法可以解决跨域问题,使得资源可以被安全地访问。

同源策略(Same origin policy, SOP)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源策略是指"协议+域名+端口"三者相同。

2、怎么解决跨域?

JSONP

jsonp(JSON with Padding), 是JSON的一种"使用模式",可以让网页跨域读取数据。其本质是利用script表情的开放策略,浏览器传递callBack参数到服务端,后端返回数据时,会将callBack参数作为函数名来包裹数据,从而浏览器就可以跨域请求数据并定制函数来自动处理返回数据。

ini 复制代码
<script srt="https://tal......home.html?callback=handleGetData">
</script>


或者


let script = document.creatElement('script');
script.type = 'text/javascript'
script.srt = "https://tal......home.html?callback=handleGetData"
document.head.appendChild(script)
function handleGetData(res){
  console.log(res);
}

优点:

  • jsonp兼容性比较强,使用于几乎所有浏览器,甚至是IE10及以下浏览器。

缺点:

  • 没有对于错误的处理
  • 只支持GET请求,不支持POST请求以及大数据量大请求,无法拿到相关的响应头,状态码等数据。
  • 容易被恶意注入,造成xss漏洞
  • 无法设置资源访问授权。
跨域资源共享(CORS)

跨域资源共享(Cross-origin resource sharing,CORS)是一个 W3C标准,允许浏览器向跨域服务器发送请求,从而克服了ajax只能同源使用的限制。CORS需要浏览器和服务器同时支持。目前,所有主流浏览器(IE10及以上)使用XMLHttpRequest对象都可支持该功能,IE8和IE9需要使用XDomainRequest对象进行兼容。

CORS整个通信过程都是浏览器自动完成,浏览器一旦发现ajax请求跨源,就会自动在头信息中增加Origin字段,用来说明本次请求来自哪个源(协议+域名+端口)。因此,实现CORS通信的关键是服务器,需要服务器配置Access-Control-Allow-Origin头信息。当CORS请求需要携带cookie时,需要服务端配置Access-Control-Allow-Credentials头信息,前端也需要设置withCredentials。

浏览器将CORS请求分成两类:简单请求和非简单请求。简单请求需要满足以下两大条件:

请求方法是以下三种方法之一:HEAD、GET、POST。

HTTP的头信息不超出以下几种字段:Accept、Accept-Language、Content-Language、Last-Event-ID、Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain。

优点:

  • 支持所有类型的http请求,功能完善
  • 能通过onerror事件监听进行错误处理
  • 通过Access-Control-Aloww-Orifin进行资源访问授权

缺点:

  • 目前主流浏览器(IE10及以上)都支持CORS,但是IE8和9需要使用XDomainRequest对象进行兼容,IE7及以下浏览器不支持

3、服务器代理

服务器代理,在发送跨域请求时,后端进行代理中转请求至服务器端,然后将获取的数据返回给前端,一般适用于以下场景:

针对IE7及以下浏览器摒弃Flash插件的情况,配置代理接口与前端页面同源,并中转目标服务器接口,则ajax请求不存在跨域问题。

外网前端页面无法访问内网接口,配置代理接口允许前端页面访问,并中转内网接口,则外网前端页面可以跨域访问内网接口。

优点:

  • 在不使用flash的情况下,兼容不支持CORS的浏览器跨域请求

缺点:

  • 后端需要一定的改造量,也可以由前端转发

摘取地址:blog.csdn.net/jined/artic...

推荐几个视频讲这三个模块:

jsonp:www.bilibili.com/video/BV1SN...

cors:www.bilibili.com/video/BV1rp...

代理:www.bilibili.com/video/BV1dh...

场景:www.bilibili.com/video/BV1Km...

二、抓包工具charles

先去搜索教程,安装charles

破解工具地址

www.zzzmode.com/mytools/cha...

相关推荐
hssfscv14 分钟前
Javaweb 学习笔记——html+css
前端·笔记·学习
Mr.Jessy21 分钟前
JavaScript高级:深浅拷贝、异常处理、防抖及节流
开发语言·前端·javascript·学习
唐叔在学习26 分钟前
30s让ai编写「跳过外链中转页」的油猴脚本
前端·javascript
酸菜土狗36 分钟前
🔥 纯 JS 实现 SQL 字段智能解析工具类,前端也能玩转 SQL 解析
前端
wo不是黄蓉37 分钟前
脚手架步骤流程
前端
我这一生如履薄冰~1 小时前
css属性pointer-events: none
前端·css
brzhang1 小时前
A2UI:但 Google 把它写成协议后,模型和交互的最后一公里被彻底补全
前端·后端·架构
coderHing[专注前端]1 小时前
告别 try/catch 地狱:用三元组重新定义 JavaScript 错误处理
开发语言·前端·javascript·react.js·前端框架·ecmascript
UIUV1 小时前
JavaScript中this指向机制与异步回调解决方案详解
前端·javascript·代码规范
momo1001 小时前
IndexedDB 实战:封装一个通用工具类,搞定所有本地存储需求
前端·javascript