浏览器的同源策略与解决跨域

embedded/2024/9/23 13:56:10/

同源策略(协议、域名、端口)

同源策略(Same-Origin Policy)是一个在浏览器安全模型中被实施的重要安全机制。它是基于域名、协议和端口号的限制,用于防止不同源的网页间的恶意行为和信息泄露。

根据同源策略,浏览器允许网页加载和执行来自同一源(即具有相同协议、域名和端口号)的资源,但限制了对不同源资源的访问。这样可以有效防止恶意网站通过脚本窃取用户的敏感信息或利用跨站脚本攻击(Cross-Site Scripting,XSS)对其他网站进行攻击。

同源策略的限制包括以下几点:

  1. 协议:两个网页的协议必须相同,例如都是通过 HTTP 或 HTTPS 访问。

  2. 域名:两个网页的域名必须相同,包括子域名。例如,example.comsubdomain.example.com 是不同的域名。

  3. 端口号:两个网页的端口号必须相同。例如,使用默认的 HTTP 端口号80或HTTPS端口号443。

例子

如果网页不满足同源策略的要求,就无法通过 JavaScript 访问对方的文档对象模型(Document Object Model,DOM),或者进行 XMLHttpRequest 请求获取对方的数据。

然而,同源策略也存在一些例外情况,如通过使用跨域资源共享(Cross-Origin Resource Sharing,CORS)机制,服务器可以明确地授权其他源的网页访问资源。此外,一些标签(例如<img><link><script>)的跨域能力也受到不同限制。

怎么解决跨域问题

  1. JSONP(JSON with Padding):JSONP是一种解决跨域问题的传统方法。它通过动态创建<script>标签,将跨域请求的数据作为回调函数的参数传递到客户端。但JSONP只支持GET请求,并且需要服务器端支持JSONP格式的数据返回。

  2. CORS(Cross-Origin Resource Sharing):CORS是现代浏览器支持的一种跨域解决方案。通过在服务器端设置响应头,服务器可以允许特定的源访问资源,从而实现跨域请求。要使用CORS,服务器必须正确设置响应头中的Access-Control-Allow-Origin等相关字段。

  3. 代理服务器:代理服务器是一种将客户端的请求转发到目标服务器的中间服务器。通过在同一域下向代理服务器发起请求,而代理服务器再向目标服务器发起请求,可以避免跨域问题。这种方法需要在后端设置代理服务器来转发请求。

  4. WebSocket:WebSocket是一种全双工通信协议,它使用单个TCP连接创建持久连接,因此不受同源策略的影响。通过使用WebSocket,可以在不同源之间进行实时的双向通信。

  5. 使用服务器端代理:在同一域下,可以通过服务器端脚本(如PHP或Node.js)来转发请求并获取数据,然后将数据返回给客户端。这样,客户端在同域下请求服务器端脚本,再由服务器端脚本去请求其他域的资源,从而实现跨域请求。


http://www.ppmy.cn/embedded/19273.html

相关文章

你知道充气膜结构有哪些优势和特点吗—轻空间

充气膜结构作为一种相对密闭的空间结构&#xff0c;在建筑领域中展现出独特的优势和特点。以下是充气膜结构具有的优势&#xff1a; 1. 良好的经济性&#xff1a; 充气膜结构具有较低的造价&#xff0c;尤其适用于大跨度、地质条件差的场合。由于无需传统建筑的刚性支撑结构&am…

MySQL的备份与恢复

使用mysqldumpbinlog备份 备份素材&#xff1a; create database school; use school CREATE TABLE stu ( Sno INT PRIMARY KEY, Sname VARCHAR(50), Ssex ENUM(Male, Female), Sage INT, Sdept VARCHAR(50) ); INSERT INTO stu (Sno, Sname, Ssex, Sage, Sdept) VALUES (1, A…

树 —— 树和森林的遍历

一、树的遍历 &#xff08;1&#xff09;先根遍历 若树非空&#xff0c;则遍历方法为 &#xff08;1&#xff09;访问根结点。 &#xff08;2&#xff09;从左到右&#xff0c;依次先根遍历根结点的每一棵子树。 先根遍历序列为&#xff1a;ABECFHGD。 &#xff08;2&#…

Python项目开发实战:网络爬虫批量采集股票数据保存到Excel中

注意:本文的下载教程,与以下文章的思路有相同点,也有不同点,最终目标只是让读者从多维度去熟练掌握本知识点。 下载教程:Python项目开发实战_网络爬虫批量采集股票数据保存到Excel中_编程案例实例课程教程.pdf 1、详细阐述 在Python项目开发实战中,网络爬虫批量采集股票…

pytest-asyncio:协程异步测试案例

简介&#xff1a;pytest-asyncio是一个pytest插件。它便于测试使用异步库的代码。具体来说&#xff0c;pytest-asyncio提供了对作为测试函数的协同程序的支持。这允许用户在测试中等待代码。 历史攻略&#xff1a; asyncio并发访问websocket Python&#xff1a;协程 - 快速创…

C 练习实例25

C 练习实例25 题目&#xff1a; 求12!3!...20!的和。 程序分析&#xff1a; 此程序只是把累加变成了累乘。 实例 #include <stdio.h>int main() {int i;long double sum,mix;sum0,mix1;for(i1;i<20;i){mixmix*i;sumsummix;} printf("%Lf\n",sum); }以…

数据中台、数据仓库、数据治理与主数据的定位与差异

在数字化时代&#xff0c;大数据已经成为企业运营和决策的重要资产。为了更好地管理和利用这些数据&#xff0c;数据中台、数据仓库、数据治理和主数据管理等概念应运而生。这些概念听起来可能有些抽象&#xff0c;但实际上它们与我们的日常生活息息相关。下面&#xff0c;我将…

神经网络进阶学习文章(一)

1.讲解YOLO有关知识 深入浅出Yolo系列之Yolov5核心基础知识完整讲解 - 知乎 (zhihu.com) 2.目标检测算法综述 目标检测算法综述 - 知乎 (zhihu.com) 3.TensorFlow详解&#xff0c;当然现在用的最多的是Pytorch框架了 谷歌大神带你十分钟看懂TensorFlow - 知乎 (zhihu.co…