前端-跨域梳理

一、修改请求头导致跨域

前端修改请求头之后,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...

相关推荐
玖釉-1 小时前
解决PowerShell执行策略导致的npm脚本无法运行问题
前端·npm·node.js
Larcher2 小时前
新手也能学会,100行代码玩AI LOGO
前端·llm·html
徐子颐2 小时前
从 Vibe Coding 到 Agent Coding:Cursor 2.0 开启下一代 AI 开发范式
前端
小月鸭2 小时前
如何理解HTML语义化
前端·html
jump6803 小时前
url输入到网页展示会发生什么?
前端
诸葛韩信3 小时前
我们需要了解的Web Workers
前端
brzhang3 小时前
我觉得可以试试 TOON —— 一个为 LLM 而生的极致压缩数据格式
前端·后端·架构
yivifu3 小时前
JavaScript Selection API详解
java·前端·javascript
这儿有一堆花3 小时前
告别 Class 组件:拥抱 React Hooks 带来的函数式新范式
前端·javascript·react.js
十二春秋3 小时前
场景模拟:基础路由配置
前端