首页 > 其他分享 >跨域问题

跨域问题

时间:2023-09-30 18:14:15浏览次数:27  
标签:Origin 浏览器 跨域 代理服务器 问题 服务器 请求

跨域(Cross-Origin)指的是在Web开发中,浏览器的同源策略(Same-Origin Policy)下,一个网页的JavaScript代码试图访问不同源(不同域、不同协议或不同端口)的资源时所发生的情况。浏览器的同源策略:

  • 当一个网页上的JavaScript代码尝试访问不同源的资源时,浏览器会在请求头中添加一个Origin字段,指示请求的源。然后服务器就可以对跨域的请求做出对应的反应。
  • 处理Cookie:如果发送给服务器的请求是跨域的,那么浏览器默认不允许此请求携带cookie,如果需要在跨域请求中发送Cookie,服务器需要设置Access-Control-Allow-Credentials头为true,并且浏览器发起请求时需要设置withCredentials选项为true。

跨域主要是为了防止恶意网站获取敏感信息。

CORS解决跨域问题的步骤: 简单来说,就是浏览器会告诉服务器这个请求是跨域的,如果你允许的话,就在响应的头部加上对应的字段来告诉我。

  • 浏览器发起跨域请求:当一个网页上的JavaScript代码尝试访问不同源的资源时,浏览器会在请求头中添加一个Origin字段,指示请求的源。
  • 目标服务器响应CORS头:目标服务器接收到请求后,会检查请求中的Origin字段,并决定是否允许该请求。如果目标服务器允许跨域访问,它会在HTTP响应头中添加一些CORS相关的头信息,如Access-Control-Allow-Origin,来指定允许的源。
  • 浏览器检查响应头:浏览器会检查目标服务器的响应头,特别是Access-Control-Allow-Origin头。如果这个头中包含了请求源的信息(或是*,表示允许所有源),浏览器会允许JavaScript访问响应的数据。如果没有得到授权,浏览器将阻止JavaScript访问响应数据,从而实现了跨域访问的控制。
  • 处理复杂请求:对于一些特殊类型的跨域请求,如带有自定义头信息、使用HTTP方法为PUT或DELETE等,浏览器会在发送实际请求之前进行一个预检请求(Preflight)来确认目标服务器是否接受这种类型的请求。预检请求包含一个OPTIONS方法,目标服务器会响应,并指定是否允许实际请求。
  • 处理凭证(Credentials):如果请求需要发送凭证,如Cookie或HTTP身份验证信息,目标服务器还需要设置Access-Control-Allow-Credentials头为true,并且浏览器在发起请求时需要设置withCredentials选项为true。

代理服务器解决跨域:同一域内设置一个中间服务器(代理服务器),让客户端的请求先发送到代理服务器,然后由代理服务器再将请求发送到目标服务器,最后将目标服务器的响应返回给客户端。这样做的好处是,客户端与代理服务器在同一域内,不受同源策略的限制,而代理服务器与目标服务器之间也不受跨域限制,因此可以顺利完成跨域请求。

标签:Origin,浏览器,跨域,代理服务器,问题,服务器,请求
From: https://www.cnblogs.com/codingbigdog/p/17738061.html

相关文章

  • 商人过河问题数学建模
     问题描述三名商人各带–个随从乘船渡河,一只小船只能容纳二人,由他们自己划行.随从们密约,在河的任一岸,一旦随从的人数比商人多,就杀人越货,商人们怎样才能安全渡河呢? 问题建模考虑用深度优先搜索解决此问题,提前记录在船承载量为2时候,所有可行的移动状态,以及所有安全的商......
  • 解决服务器取证过程中宝塔强制绑定手机号的问题
    声明本文中提及的方式仅是为了便于服务器取证的研究,仅适用于无法出网的真实取证鉴定情况。请不要在生产环境随意修改宝塔服务的任何文件!分析目前,宝塔面板已经强制要求绑定手机号。这给取证工作带来很大的不便,尤其是在实际工作中,服务器是不可以连接互联网的,因此必须解决掉这个......
  • vs code调试rust乱码问题解决方案
    在terminal中用chcp65001修改一下字符集,就行了。有的博主推荐修改区域中的设置,这会引来很大的问题。千万不要修改如下设置:......
  • 使用正则表达式判断日期字符串格式是否合法遇到的问题(解决)
    引言我们在使用SpringMVC从前端接受传递过来的日期数据时,默认传递过来的数据是String类型,如果我们从前端传递过来的数据格式是yyyy/MM/dd,SpringMVC有内置类型转化器会将String类型自动转化成Date类型。但如果我们从前端传递过来的数据格式是yyyy-MM-dd,SpringMVC的内置转化器就不......
  • 前端 | 如何处理 React18 componentDidMount 重复执行两次的问题 | React
    前端|如何处理React18componentDidMount重复执行两次的问题|React问题描述按照React官网推荐方式创建项目,在运行项目的时,发现组件的componentDidMount方法被触发了两次。但是在旧项目中并没有这样的问题,于是觉得奇怪,以为是自己哪里使用错了,一直在排查。经过查阅官方文......
  • UnimList1玩6了_基本上移动端就解决了一大半的问题(66)
    <divstyle="width:250px;box-shadow:04px8px0rgba(0,0,0,0.2),06px20px0rgba(0,0,0,0.19);text-align:center;"><divstyle="background-color:#4caf50;color:#fff;padding:10px;font-size:40px;"><h......
  • 网络问题排查
    目录网络原理windows平台routeLiunx平台网络原理https://www.cnblogs.com/hhddd-1024/p/15173532.htmlwindows平台1、先确认哪些网卡能访问网络,然后再确定能访问目标网络route静态路径表:由系统管理员事先设置好固定的路径表称之为静态(Static)路径表,一般是在系统安装时就......
  • CS2打开可以听到声音,但黑屏问题?
    1.问题我这里原先是可以启动CS2的,但是后来在CS2中重新调整了分辨率等等,之后由于某种原因又调整了屏幕分辨率,导致后面一进入CS2登录界面,橙色登陆界面就会缩在左上角一小块,并且之后就会陷入黑屏但有声音的状态2.解决方法参考链接:https://appuals.com/black-screen-counter-strike......
  • Nacos连接Mysql8连接失败问题
    一、问题复现Nacos、Mysql容器均开机自启。Nacos配置了Mysql,配置确认没有问题,发现每次重启服务器,Nacos都无法直接成功连接mysql。每次启动完Nacos后,需要用Datagrip连接一次Mysql,再dockerrestartnacos才可以连上Mysql。Nacos启动报错NoDataSourceset,详情如下......
  • win10的 VM虚拟机不能拖文件、复制粘贴问题
    解决虚拟机和win10之间不能拖动文件,复制文件,共享剪切板问题;sudoapt-getautoremoveopen-vm-toolssudoapt-getinstallopen-vm-toolssudoapt-getinstallopen-vm-tools-desktop然后重启!参考:https://blog.csdn.net/davidhzq/article/details/101621482......