一、跨域原理
我们先来了解一下什么是跨域,当一个请求的协议、域名、端口任何一个与当前页面地址不同的时候,都被当做是跨域。
跨域存在的主要原因是因为浏览器的同源策略限制。同源策略存在的原因是保护用户隐私和数据安全。同源是指协议、域名、端口均相同。
例如,当前页面所处的域名为www.domain1.com,如果这个页面需要请求www.domain2.com的资源,就存在跨域问题。
二、解决跨域的几种方法
1. JSONP
JSONP(JSON with Padding)是一种跨域访问的解决方案。原理是利用标签可以跨域访问资源的特性,向服务器动态请求获取JSON数据,然后服务器返回带有callback参数的可执行JavaScript脚本,最终在页面中执行这个脚本,从而实现跨域访问数据。
<script>
function jsonCallback(data) {
console.log(data);
}
</script>
<script src="https://www.otherDomain.com/getData?callback=jsonCallback"></script>
2. CORS
CORS(Cross Origin Resource Sharing)是一个W3C标准,是一种浏览器级的跨域解决方案。开发者只需要在服务器端设置相关的Header,就能控制哪些域名可以访问资源。浏览器发出跨域请求时,会自动带上自定义的头部信息,服务器判断请求头中是否携带特定的头部信息,设定同意跨域请求,然后将相关信息返回给浏览器。
Access-Control-Allow-Origin: https://www.allowedDomain.com
Access-Control-Allow-Methods: POST, GET
Access-Control-Allow-Headers: Content-Type
3. 代理
通过服务器代理,将请求发送到同一域名下的服务器,再由同一域名下的服务器请求跨域资源并将结果返回给客户端。这种方式存在性能问题,并且后端需要搭建代理服务器,不推荐使用。
4. iframe跨域
借助iframe可以实现同源的效果,将跨域请求的资源嵌入到一个隐藏的iframe中,再通过window.postMessage()方法将数据和消息传递到主窗口。
三、IIS服务器跨域配置
1. 配置IIS HTTP响应头
我们可以通过修改IIS服务器的HTTP响应头,来允许不同域下的页面请求该服务器的资源。
- 打开IIS管理器,选择需要配置跨域访问的网站。
- 在网站根目录右键新建Web.config文件,并将以下代码复制到文件中:
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="POST,GET" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
以上代码中,Access-Control-Allow-Origin值设置为*表示接受任意来源的请求,Access-Control-Allow-Headers表示允许携带的自定义请求头,Access-Control-Allow-Methods表示允许的请求方法。
2. 配置IIS URL Rewrite模块
URL Rewrite模块是IIS的重要组件之一,可以帮助我们对HTTP请求进行重写和重定向。我们可以通过该模块来跨域访问服务器资源。
- 打开IIS管理器,选择需要配置跨域访问的网站。
- 下载并安装IIS URL Rewrite模块,可以从以下的链接下载。https://www.iis.net/downloads/microsoft/url-rewrite
- 在IIS管理器上方的工具栏中,点击“URL重写”打开配置页面,添加以下配置:
<rewrite>
<outboundRules>
<rule name="CrossDomain" patternSyntax="Wildcard">
<match filterByTags="Tag/A">*.domain1.com</match>
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Rewrite" value="https://{HTTP_HOST}/{R:0}" />
</rule>
</outboundRules>
</rewrite>
以上配置实现了当页面来源为domain1.com时,将HTTP请求转换成HTTPS请求,从而实现跨域访问。
四、结语
以上是iis跨域配置的两种方式,读者可以按需选择适合自己的方法来实现跨域访问。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/247198.html