服务器跨域设置
在现代Web开发中,跨域资源共享(CORS,Cross-Origin Resource Sharing)是一个绕不开的话题,由于浏览器的同源策略(Same-Origin Policy),当网页的源(协议、域名、端口)与请求资源的源不一致时,浏览器会阻止该请求,除非服务器明确允许跨域访问,正确配置服务器的跨域设置,成为实现前后端分离架构、多域名服务等场景的关键,本文将详细介绍跨域的原理、常见配置方法及注意事项。
跨域的原理与必要性
同源策略是浏览器的重要安全机制,用于防止恶意网站通过脚本读取其他网站的敏感数据。
的网页无法直接请求
的接口,除非后者在响应头中添加特定的跨域许可信息。
跨域设置的必要性体现在多个场景:
服务器跨域配置的核心方法
不同服务器(如Nginx、Apache、Node.js等)的跨域配置方式有所不同,但核心都是通过设置HTTP响应头告知浏览器允许跨域请求,以下是常见服务器的配置示例:
Nginx跨域配置
Nginx作为反向代理服务器,可通过
add_header
指令添加跨域响应头,以下是一个基础配置示例:
location /api/ {add_header 'Access-Control-Allow-Origin' '*';add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE, OPTIONS';add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization';add_header 'Access-Control-Max-Age' '1728000';add_header 'Access-Control-Allow-Credentials' 'true';proxy_pass}
Apache跨域配置
Apache通过文件或
mod_headers
模块配置跨域,示例代码如下:
Header set Access-Control-Allow-Origin "*"Header set Access-Control-Allow-Methods "GET, POST, OPTIONS, PUT, DELETE"Header set Access-Control-Allow-Headers "Content-Type, Authorization"Header set Access-Control-Max-Age "1728000"
Node.js(EXPress框架)跨域配置
Express框架可通过中间件实现跨域控制:
const express = require('express');const cors = require('cors');const app = express();// 允许所有源app.use(cors());// 或精细控制const corsOptions = {origin: 'https://frontend.com',methods: ['GET', 'POST'],allowedHeaders: ['Content-Type'],credentials: true};app.use(cors(corsOptions));app.listen(3000, () => console.log('Server running on port 3000'));
复杂跨域场景的处理
在实际开发中,可能会遇到更复杂的跨域需求,例如预检请求(Preflight Request)、自定义请求头等。
预检请求的处理
当请求方法为或请求头包含自定义字段时,浏览器会先发送一个预检请求,以确认服务器是否允许实际请求,服务器需响应状态码,并包含跨域头信息,Nginx可单独配置方法:
if ($request_method = 'OPTIONS') {add_header 'Access-Control-Allow-Origin' '*';add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';add_header 'Access-Control-Max-Age' '1728000';add_header 'Content-Type' 'text/plain; charset=utf-8';add_header 'Content-Length' '0';return 204;}
动态跨域源配置
若需要根据请求来源动态设置
Access-Control-Allow-Origin
(如允许多个域名),可通过后端代码实现,Node.js中:
function allowOrigin(req, res, next) {const allowedOrigins = ['https://frontend1.com', 'https://frontend2.com'];const origin = req.headers.origin;if (allowedOrigins.includes(origin)) {res.setHeader('Access-Control-Allow-Origin', origin);}next();}app.use(allowOrigin);
跨域配置的注意事项
跨域配置是Web开发中的基础环节,理解其原理并掌握不同服务器的配置方法,能有效提升开发效率,无论是简单的静态资源跨域,还是复杂的前后端分离架构,合理的跨域设置既能保证安全性,又能实现灵活的数据交互,开发者应根据实际场景选择合适的配置方案,并始终将安全性放在首位,避免因跨域配置不当引发的安全风险。
为什么linux系统安装virtualbox后不能创建仅主机网络
VirtualBox的提供了四种网络接入模式,它们分别是:1、NAT网络地址转换模式(NAT,Network Address Translation)2、Bridged Adapter桥接模式3、Internal内部网络模式4、Host-only Adapter主机模式第一种 NAT模式解释:NAT模式是最简单的实现虚拟机上网的方式,你可以这样理解:Vhost访问网络的所有数据都是由主机提供的,vhost并不真实存在于网络中,主机与网络中的任何机器都不能查看和访问到Vhost的存在。 虚拟机与主机关系:只能单向访问,虚拟机可以通过网络访问到主机,主机无法通过网络访问到虚拟机。 虚拟机与网络中其他主机的关系:只能单向访问,虚拟机可以访问到网络中其他主机,其他主机不能通过网络访问到虚拟机。 虚拟机与虚拟机之间的关系:相互不能访问,虚拟机与虚拟机各自完全独立,相互间无法通过网络访问彼此。 IP:10.0.2.15网关:10.0.2.2DNS:10.0.2.3一台虚拟机的多个网卡可以被设定使用 NAT, 第一个网卡连接了到专用网 10.0.2.0,第二个网卡连接到专用网络 10.0.3.0,等等。 默认得到的客户端ip(IP Address)是10.0.2.15,网关(Gateway)是10.0.2.2,域名服务器(DNS)是10.0.2.3,可以手动参考这个进行修改。 NAT方案优缺点:笔记本已插网线时: 虚拟机可以访问主机,虚拟机可以访问互联网,在做了端口映射后(最后有说明),主机可以访问虚拟机上的服务(如数据库)。 笔记本没插网线时: 主机的“本地连接”有红叉的,虚拟机可以访问主机,虚拟机不可以访问互联网,在做了端口映射后,主机可以访问虚拟机上的服务(如数据库)。 第二种 Bridged Adapter模式解释:网桥模式是我最喜欢的用的一种模式,同时,模拟度也是相当完美。 你可以这样理解,它是通过主机网卡,架设了一条桥,直接连入到网络中了。 因此,它使得虚拟机能被分配到一个网络中独立的IP,所有网络功能完全和在网络中的真实机器一样。 虚拟机与主机关系:可以相互访问,因为虚拟机在真实网络段中有独立IP,主机与虚拟机处于同一网络段中,彼此可以通过各自IP相互访问。 虚拟机于网络中其他主机关系:可以相互访问,同样因为虚拟机在真实网络段中有独立IP,虚拟机与所有网络其他主机处于同一网络段中,彼此可以通过各自IP相互访问。 虚拟机于虚拟机关系:可以相互访问,原因同上。 IP:一般是DHCP分配的,与主机的“本地连接”的IP 是同一网段的。 虚拟机就能与主机互相通信。 笔记本已插网线时:(若网络中有DHCP服务器)主机与虚拟机会通过DHCP分别得到一个IP,这两个IP在同一网段。 主机与虚拟机可以ping通,虚拟机可以上互联网。 笔记本没插网线时:主机与虚拟机不能通信。 主机的“本地连接”有红叉,就不能手工指定IP。 虚拟机也不能通过DHCP得到IP地址,手工指定IP后,也无法与主机通信,因为主机无IP。 这时主机的VirtualBox Host-Only Network 网卡是有ip的,192.168.56.1。 虚拟机就算手工指定了IP 192.168.56.*,也ping不能主机。 第三种 Internal模式解释:内网模式,顾名思义就是内部网络模式,虚拟机与外网完全断开,只实现虚拟机于虚拟机之间的内部网络模式。 虚拟机与主机关系:不能相互访问,彼此不属于同一个网络,无法相互访问。 虚拟机与网络中其他主机关系:不能相互访问,理由同上。 虚拟机与虚拟机关系:可以相互访问,前提是在设置网络时,两台虚拟机设置同一网络名称。 如上配置图中,名称为intnet。 IP: VirtualBox的DHCP服务器会为它分配IP ,一般得到的是192.168.56.101,因为是从101起分的,也可手工指定192.168.56.*。 笔记本已插网线时:虚拟机可以与主机的VirtualBox Host-Only Network 网卡通信这种方案不受主机本地连接(网卡)是否有红叉的影响。 第四种 Host-only Adapter模式解释:主机模式,这是一种比较复杂的模式,需要有比较扎实的网络基础知识才能玩转。 可以说前面几种模式所实现的功能,在这种模式下,通过虚拟机及网卡的设置都可以被实现。 我们可以理解为Vbox在主机中模拟出一张专供虚拟机使用的网卡,所有虚拟机都是连接到该网卡上的,我们可以通过设置这张网卡来实现上网及其他很多功能,比如(网卡共享、网卡桥接等)。 虚拟机与主机关系默认不能相互访问,双方不属于同一IP段,host-only网卡默认IP段为192.168.56.X 子网掩码为255.255.255.0,后面的虚拟机被分配到的也都是这个网段。 通过网卡共享、网卡桥接等,可以实现虚拟机于主机相互访问。 虚拟机与网络主机关系默认不能相互访问,原因同上,通过设置,可以实现相互访问。 虚拟机与虚拟机关系默认可以相互访问,都是同处于一个网段。 虚拟机访问主机 用的是主机的VirtualBox Host-Only Network网卡的IP:192.168.56.1,不管主机“本地连接”有无红叉,永远通。 主机访问虚拟机,用是的虚拟机的网卡3的IP: 192.168.56.101,不管主机“本地连接”有无红叉,永远通。 虚拟机访问互联网,用的是自己的网卡2, 这时主机要能通过“本地连接”有线上网,(无线网卡不行)通过对以上几种网络模式的了解,我们就可以灵活运用,模拟组建出我们所想要的任何一种网络环境了。 比如我想模拟出来一个一台主机,监控一个局域网上网情况的网络环境。 首先我开启了两台虚拟机vhost1与vhost2,当然如果硬件允许,我同样可以再增加vhost3、vhost4…所有的vhost我都设置成internat内网模式,网络名称为intnal,网关为192.168.56.100,意思就是通过 192.168.56.100网卡上网。 其中有一台vhost1我设置为双网卡,一张为内网模式(192.168.56.100),一张为网桥模式(192.168.1.101)。 两张网卡设置双网卡共享上网虚拟机之间为局域网,其中有一台虚拟机vhost1通过与外网相连,所有局域网中的虚拟机又通过vhost1来实现上外网。 这样vhost1就可以监控整个虚拟机局域网上网情况了。 NAT 设置端口映射你可以设置一个虚拟机的服务(比如 WEB服务),通过使用命令行工具 VboxManage 代理。 你需要知道虚拟机的服务使用哪个端口,然后决定在主机上使用哪个端口(通常但不总是想要使虚拟机和主机使用同一个端口)。 在主机上提供一个服务需要使用一个端口,你能使用在主机上没有准备用来提供服务的任何端口。 一个怎样设置新的 NAT 例子,在虚拟机上连接到一个 ssh 服务器,需要下面的三个命令:VBoxManage setextradata Linux Guest VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/Protocol TCPVBoxManage setextradata Linux Guest VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/GuestPort 22VBoxManage setextradata Linux Guest VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/HostPort 2222说明:VboxManage 是一个命令行程序,请查询你的 VirtualBox 安装目录,Linux Guest 是虚拟主机名。 guestssh 是一个自定义的名称,你可以任意设置,通过上面的三个命令,把虚拟机的 22 端口 转发到主机的 2222 端口。 又比如,我在虚拟机 debian 上安装了 apache2 服务器,使用 80 端口,映射到主机的 80 端口。 使用下面的命令。 C:\Program Files\innotek VirtualBox\ setextradata debian VBoxInternal/Devices/pcnet/0/LUN#0/Config/huzhangsheng/Protocol TCPC:\Program Files\innotek VirtualBox\ setextradata debian VBoxInternal/Devices/pcnet/0/LUN#0/Config/huzhangsheng/GuestPort 80C:\Program Files\innotek VirtualBox\ setextradata debian VBoxInternal/Devices/pcnet/0/LUN#0/Config/huzhangsheng/HostPort 80注意:要使设置生效,请关掉 VirtualBox 再运行虚拟机,我把 VirtualBox 安装在 winxp 上,在虚拟机中安装 debian 4.02r ,虚拟机名是 debian ,并安装了 apache2 php5 MYSQL-server ,在主机上用IE浏览,成功转发到虚拟机 debian 的 apache2 web 服务器上上文出处:个人感觉通过使用端口映射的方式很不爽,还不如直接桥接来的快,现在多数情况下连接到网络是没问题的,端口映射还需要在宿主跟虚拟机都额外开某个服务,感觉不爽。 “网络”配置页面有4个方案:1:NAT网络地址转换(Network Address Translation)2:Birdged Network桥接3:Internal Network内部网络(可以是虚拟机与虚拟机之间)4:Host-Only 只与主机通信(大概吧)安装完VirtualBox2.2后,主机多了一个“VirtualBox Host-Only Network ”本地网卡。
为什么热舞要更新那么长时间
要看你的网速来定了。 一般来说网速快的话2-3小时吧。 下载点也要选下,最好选离自己所在地近的服务器下载。 答案补充个人感觉 在舞蹈类的游戏里算不错了。 画面跟效果做得很漂亮。 女生爆多。 (我在里面经常被一群女的追着到处跑 嘿嘿)现在的最新版本号为108你安装好最新的客户端以后点开始游戏 它会自动更新到108版本。 用不了几分钟。 答案补充现在商城里衣服 多数好看点的都要收费的, 不过免费的服装什么的也有不少还有些是游戏币购买的。 感觉比AU的要好点吧。
我添加附件的邮件为何发不出去。是不是因为附件内容是压缩包的缘故,这个压缩包4.8MB是个TXT文本文挡
参考:当您尝试在 Outlook 2002 中发送电子邮件时,可能收到以下错误信息: 引用 试图将数据发送到服务器时出现 TCP/IP 错误 帐户:“ 帐户名” SMTP 服务器:“服务器名” 错误号:0x800ccc13 您可以在 Microsoft Outlook Express 中毫无错误地发送邮件。 原因 如果 Outlook Express 和 Microsoft Internet Explorer 的版本不同,则可能发生此问题。 Outlook 2002 依赖 Outlook Express 安装和使用的几个文件。 解决方案 若要解决此问题,要么升级到最新版本的 Outlook Express 和 Internet Explorer,要么安装与您的计算机上安装的 Internet Explorer 的版本相匹配的 Outlook Express。 升级到最新版本 1. 启动 Internet Explorer,然后从以下 Microsoft Web 站点下载最新版本的 Internet Explorer: /download... (/download... 2. 按照下载说明操作。 3. 在安装之后重新启动计算机。 安装与 Internet Explorer 的版本一致的 Outlook Express 警告:注册表修改不当可造成严重问题,这些问题可能需要重新安装操作系统。 Microsoft 不保证能够解决因为注册表修改不当而产生的问题。 修改注册表需要您自担风险。 注意,修改注册表之前,应当先备份注册表。 如果您运行的是 Windows NT 或 Windows 2000,还应该更新“紧急修复磁盘”(ERD)。 1. 使用控制面板中的“添加/删除程序”实用程序来删除现有版本的 Outlook Express。 2. 删除 C:\Program Files\Outlook Express 文件夹的内容,但是不删除该文件夹本身。 请按照下列步骤操作:a. 单击开始,指向程序,指向附件,然后单击 Windows 资源管理器。 b. 在“文件夹”窗格中,单击加号 (+) 以展开我的电脑文件夹,然后展开本地磁盘 (C:) 文件夹。 c. 展开 Program Files 文件夹,然后展开 Outlook Express 文件夹。 d. 选择 Outlook Express 文件夹中的所有文件,然后单击删除。 3. 使用“注册表编辑器”删除两个注册表项:a. 启动“注册表编辑器”()。 b. 找到以下两个注册表项: HKEY_CURRENT_USER\SOFTWARE\Microsoft\Outlook Express HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Outlook Express c. 对于这两个注册表项中的每一个,单击该项,单击编辑菜单上的删除,然后单击是。 d. 退出“注册表编辑器”。 4. 若要重新安装 Outlook Express,请在控制面板中“添加/删除程序”实用程序中使用 Internet Explorer 的“添加组件”选项。 参考资料:














发表评论