跨域与Nginx总结

news2025/1/12 12:01:08

跨源资源共享(CORS)是一种机制,他使浏览器可以访问由其他域提供的Web资源。通常,浏览器会使用同源策略来限制从脚本中发出的HTTP请求。例如,如果一个网站的资源位于https://haha.com,那么它就不能发出对https://xixi.com的请求,除非xixi.com允许跨域请求 。

CORS允许服务器告诉浏览器它是否允许特定的跨域请求。这通常是通过在响应中发送一个Access-Control-Allow-Origin头来实现的。例如,假设xixi.com允许来自haha.com的跨域请求,它可以在响应头中发送:

Access-Control-Allow-Origin:https://haha.com

如果浏览器收到这个头,他就允许来自haha.com的脚本访问服务器的响应。

注意:haha.com不是不能够访问xixi.com,而是xixi.com不接收来自haha.com的访问

CROS还允许服务器限制哪些HTTP方法可以跨域使用。例如,如果服务器只想允许来自haha.com的GET请求,它可以发送一下头:

Access-Control-Allow-Origin: https://haha.com

Access-Control-Allow-Methods: GET

CORS还允许服务器指定那些哪些请求头可以跨域使用。例如,如果服务器希望来自haha.com访问响应头X-Custom-Header,它可以发送以下头:

Access-Control-Allow-Origin: https://haha.com

Access-Control-Expose-Headers: X-Custom-Header

CORS还支持预请求(preflight)。当浏览器发出一个跨域请求时,他会先发出一个预请求,询问服务器是否允许这个请求。这通常是一个OPTIONS请求,它包含一个Access-Control-Request-Method头,表示浏览器想要发出实际请求的方法。例如:

OPTIONS /resource HTTP/1.1

Origin: https://haha.com

Access-Control-Request-Method: POST

如果服务器允许这个请求,他会发送一个状态码为200的响应,并在响应中发送Access-Control-Request-Method头,表示允许的方法列表。例如:

HTTP/1.1 200 OK

Access-Control-Allow-Methods: POST, GET, OPTIONS

服务器收到这个响应后,就会发出实际的请求。

CORS通信是在浏览器和服务器之间进行的,对于开发者来说,使用CORS通信并不复杂。咋发出跨域请求时,浏览器会自动处理预请求和跨域头。在服务端,只在服务器端,只需要在响应中发送允许跨域的头即可。例如,在cors.js中,可以使用以下代码来允许所有跨域请求:
在这里插入图片描述

同源限制

同源限制是一种安全机制,由Web浏览器实现,旨在防止网页向不同与提供网页的域发出请求,防止恶意网站代表用户向其他网站发出未经授权的请求。

同源限制指定Web服务器应该允许在网页上允许的脚本访问来自网页的源(托管网页的服务器的域名、协议和端口号)的数据,但应阻止脚本访问来自不同源的数据。这是为了防止恶意网站能够访问其他网站的敏感数据,例如登陆凭证或金融数据。

同源限制适用于所有类型的HTTP请求以及使用XMLHttpRequest和Fetch API等API发出的请求。

限制范围:

如果我们的请求是非同源的,将会受到以下限制

HTTP Cookie、HTTP Authenticate头和客户端SSL证书将不会随请求一起发送
服务器的响应将无法在网页脚本中读取结果对象的属性,除非服务器通过设置适当的CORS头明确允许
服务器的响应将无法在网页脚本中设置任何cookie或其他头。
无法接触非同源网页的DOM
另外,通过JavaScript脚本可以拿到其他窗口的window对象。如果是非同源的网页,目前允许一个窗口可以接触其他网页的window对象的九个属性和四个方法。

九个属性:

window.closed
window.frames
window.length
window.location
window.opener
window.parent
window.self
window.top
window.window
上面的九个属性之中,只有window.location是可读写的,其他八个都是只读。注意,即使是location对象,在非同源的情况下,也只允许调用location.replace()方法和写入location.herf属性。

四个方法:

window.blur()
window.close()
window.focus()
window.postMessage()

  1. 什么是Nginx?
    Nginx是一个 轻量级/高性能的反向代理Web服务器,他实现非常高效的反向代理、负载平衡,他
    可以处理2-3万并发连接数,官方监测能支持5万并发,现在中国使用nginx网站用户有很多,例
    如:新浪、网易、 腾讯等。
  2. 为什么要用Nginx?
    跨平台、配置简单、方向代理、高并发连接:处理2-3万并发连接数,官方监测能支持5万并发,
    内存消耗小:开启10个nginx才占150M内存 ,nginx处理静态文件好,耗费内存少,
    而且Nginx内置的健康检查功能:如果有一个服务器宕机,会做一个健康检查,再发送的请求就不
    会发送到宕机的服务器了。重新将请求提交到其他的节点上。
    使用Nginx的话还能:
    节省宽带:支持GZIP压缩,可以添加浏览器本地缓存
    稳定性高:宕机的概率非常小
    接收用户请求是异步的
  3. 什么是正向代理和反向代理?
    正向代理就是一个人发送一个请求直接就到达了目标的服务器
    反方代理就是请求统一被Nginx接收,nginx反向代理服务器接收到之后,按照一定的规 则分发给
    了后端的业务处理服务器进行处理了
  4. Nginx的优缺点?
    优点:
    占内存小,可实现高并发连接,处理响应快
    可实现http服务器、虚拟主机、方向代理、负载均衡
    Nginx配置简单
    可以不暴露正式的服务器IP地址
    缺点: 动态处理差:nginx处理静态文件好,耗费内存少,但是处理动态页面则很鸡肋,现在一般
    前端用nginx作为反向代理抗住压力,
  5. 为什么要做动静分离?
    Nginx是当下最热的Web容器,网站优化的重要点在于静态化网站,网站静态化的关键点则是是动
    静分离,动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开
    来,动静资源做好了拆分以后,我们则根据静态资源的特点将其做缓存操作。
    让静态的资源只走静态资源服务器,动态的走动态的服务器
    Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术。
    对于静态资源比如图片,js,css等文件,我们则在反向代理服务器nginx中进行缓存。这样浏览器
    在请求一个静态资源时,代理服务器nginx就可以直接处理,无需将请求转发给后端服务器
    tomcat。 若用户请求的动态文件,比如servlet,jsp则转发给Tomcat服务器处理,从而实现动静分
    离。这也是反向代理服务器的一个重要的作用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/156677.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用ResNet50实现CIFAR10数据集的训练

如果对你有用的话,希望能够点赞支持一下,这样我就能有更多的动力更新更多的学习笔记了。😄😄 使用ResNet进行CIFAR-10数据集进行测试,这里使用的是将CIFAR-10数据集的分辨率扩大到32X32,因为算力相关的…

C语言常用内存函数的深度解析

文章目录前言memcpymemcpy函数的使用memcpy函数的自我实现memmovememmove函数的使用memmove函数的自我实现memcmpmemcmp函数的使用memcmp函数的自我实现memsetmemset函数的使用memset函数的自我实现写在最后前言 内存函数的使用广泛度大于常用字符串函数的使用广泛度&#xff0…

教程- VTK.js的基本介绍

VTK.js的核心是标准可视化工具包(VTK)库的JavaScript移植,这是一个c库,旨在促进数据可视化,在此基础上构建了科学可视化应用程序Paraview。VTK.js没有使用OpenGL,而是利用WebGL,主要关注几何和体渲染。因此&#xff0c…

JavaFx程序使用Gloun打包成Android平台App教程

0. 提要 !!! 适合有Maven基础,对JavaFx或JavaFX移动端感兴趣的朋友 提示必须在Linux环境下进行,可以使用虚拟机 推荐使用CentOS系统进行,虚拟机硬盘大小推荐最少给30G 不要像我一样,搞一半又去给文件系统根目录扩大容量 如果容量不够可以看篇博客: http…

C++模板(第二版)笔记之第十八章:模板的多态性

文章目录一、动态多态(dynamic polymorphism)二、静态多态三、静态多态VS动态多态1.术语2.优点和缺点3.结合两种多态形式:CRTP四、使用concepts五、新形势的设计模式六、泛型编程七、总结一、动态多态(dynamic polymorphism&#…

【C语言】内存函数介绍

它们所在的头文件: (这里出现的arr都为char类型数组)strlen作用:计算一个字符串的长度本质:历经千辛找一个 \0 ,找到 \0 就立马停止。(就是找 \0 )易错:strlen 返回值为 …

物联网无线通信技术中蓝牙和WIFI有哪些区别?

在物联网快速发展的时代,联网运行的设备越来越多,无线通信技术在物联网中发挥着举足轻重的作用,无线通信技术的发展改变了信息传输的方式,人们在任何时间、任何地点都可以访问设备,目前最常用的两种无线通信技术分别是…

云服务器CentOS前后端部署流程记录

部署流程记录 购买云服务ecs服务器,建立CentOS系统 通过xftpxshell访问远程服务 doker部署(https://www.runoob.com/docker/centos-docker-install.html) docker docker部署环境(mysql) docker常用命令 1. docker i…

【Linux】进程状态与优先级

文章目录进程状态概念Linux中的进程状态R(running)状态S(sleeping)状态D(disk sleep)状态T(stopped)状态t(tracing stop)状态X(dead)状态Z(zombie)状态特殊的孤儿进程进程优先级进程性质补充进程状态概念 《现代操作系统》中给出的进程状态的定义如下: 进程状态反映…

Qt+C++窗体界面中英文多语言切换

程序示例精选 QtC窗体界面中英文语言切换 如需安装运行环境或远程调试&#xff0c;见文章底部个人微信名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<QtC窗体界面中英文语言切换>>编写代码&#xff0c;代码整洁&#xff0c;规则&#x…

【Linux】软件包管理器 yum

目录 一、什么是软件包 二、如何进行软件安装 1、yum 的使用 2、yum 配置 一、什么是软件包 在Linux下安装软件&#xff0c;一个通常的办法是下载到程序的源代码&#xff0c;并进行编译&#xff0c;得到可执行程序。但是这样太麻烦了&#xff0c;于是有些人把一些常用的软…

InnoDB数据存储结构

InnoDB数据存储结构 本专栏学习内容来自尚硅谷宋红康老师的视频 有兴趣的小伙伴可以点击视频地址观看 1. 数据库的存储结构&#xff1a;页 索引结构给我们提供了高效的索引方式&#xff0c;不过索引信息以及数据记录都是保存在文件上的&#xff0c;确切来说是存储在页结构中。…

不讨论颜色的前提下,如何证明自己不是色盲?神奇的零知识证明

0x01 一个小故事 《阿里巴巴与四十大盗》中有这样一段小故事&#xff1a; 阿里巴巴会芝麻开门的咒语&#xff0c;强盗向他拷问打开山洞石门的咒语&#xff0c;他不想让人听到咒语&#xff0c;又要向强盗证明他知道这个咒语。 那应该怎么办呢&#xff1f; 便对强盗说&#xf…

基于KVM安装部署RHCOS操作系统

参考&#xff1a;Openshift 4.4 静态 IP 离线安装系列&#xff1a;初始安装 - 米开朗基杨 - 博客园 一、Openshift OCP集群安装架构示意图 RHCOS 的默认用户是 core 如果安装有问题会进入 emergency shell&#xff0c;检查网络、域名解析是否正常&#xff0c;如果正常一般是以…

重修JAVA

程序员的差距是在构思上&#xff1a;思想决定了深度&#xff0c;思想的精髓高深是很多人学不来的&#xff01; 每一门语言都有它的特点&#xff0c;有优势也有劣势&#xff0c; 所以不必拘泥于招式&#xff0c;掌握底层原理即可&#xff01; 每一们语言实际上都是一个“工具”&…

如何在您的香港主机帐户上注册多个域名

注册多个域名非常普遍。事实上&#xff0c;香港主机服务提供商鼓励这样做&#xff0c;因为它既有意义又是必要的。下面将介绍决定为什么您可能需要在香港主机上注册多个域名的几个因素。注册多个域名的原因是什么?方便多个项目如果香港主机帐户的所有者在网络上有多个不同域名…

优化vue项目后, 启动编译项目过程中 报 javaScript heap out of memory 错误 及 nodejs内存溢出

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 1、优化vue项目后&#xff0c;运行npm run serve 启动编译项目过程中 报 javaScript heap out of memory 错误 2、项目启动时&#xff0c;出现 nodejs 内存溢出错误 问题描述 提示&#xff1a;遇到…

分布式事务的背景和解决方案

在常用的关系型数据库&#xff0c;都是具备事务特性的。 那什么是事务呢&#xff1f;事务是数据库运行的一个逻辑工作单元&#xff0c;在这个工作单元内的一系列SQL命令具有原子性操作的特点&#xff0c;也就是说这一系列SQL指令要么全部执行成功&#xff0c;要么全部回滚不执…

经典算法之深度优先搜索(DFS)

&#x1f451;专栏内容&#xff1a;算法学习笔记⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;日拱一卒&#xff0c;功不唐捐。 目录一、前言二、基本概念1.简单介绍2. 官方概念三、动图分析四、模板框架五、例题分析组合问题题干描述&#xff1a;思路…

leetcode146. LRU 缓存【python3哈希表+双向链表】利用OrderedDict以及自实现双向链表

题目&#xff1a; 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。实现LRUCache类&#xff1a; LRUCache(int capacity) 以正整数作为容量capacity初始化 LRU 缓存int get(int key) 如果关键字key存在于缓存中&#xff0c;则返回关键字的值&#xff0c;否则…