1.跨域问题的判断
如果我们可以修改服务器配置:
CORS
JSON
如果不能我们有两种跨域解决方案:
代理服务器:
1.CORS:
CORS策略包括以下几个关键点:
-
简单请求:如果请求满足以下条件,浏览器会直接发送请求,不会预检:
- 使用GET、HEAD或POST方法。
- 除了
Accept
、Accept-Language
、Content-Language
、Content-Type
之外,没有自定义的HTTP头部。 Content-Type
头部的值仅限于text/plain
、multipart/form-data
或application/x-www-form-urlencoded
。
-
预检请求:如果请求不满足简单请求的条件,浏览器会先发送一个预检请求,询问服务器是否允许跨域请求。
-
携带凭证:默认情况下,跨域请求不会发送凭证(如cookies、HTTP认证等)。如果需要发送凭证,请求需要设置
withCredentials
属性为true
。 -
服务器配置:服务器需要在响应头中设置
Access-Control-Allow-Origin
和其他CORS相关的头部,以允许或限制跨域请求。 -
CORS策略的实施:CORS策略由浏览器实施,服务器端也需要正确配置以支持跨域请求。
CORS是Web安全的重要组成部分,它帮助保护了网站免受潜在的跨站请求伪造(CSRF)攻击。
注意:只要不动请求头都是一般请求,只要我们对请求头进行了修改后一般都会不满足规范,这会变成复杂请求。
2.JSONP:
-
创建
<script>
标签:客户端(通常是 JavaScript)创建一个<script>
标签,并将其src
属性设置为指向跨域数据源的 URL。 -
传递回调函数:在 URL 中,客户端会传递一个查询参数(通常是
callback
),该参数的值是客户端已经定义好的一个回调函数的名称。 -
服务器响应:服务器接收到请求后,返回的数据会被包裹在回调函数中,形成一个 JSONP 响应。
-
执行回调函数:客户端接收到响应后,由于响应是一个
<script>
标签,浏览器会执行其中的 JavaScript 代码,即调用回调函数,并将服务器返回的数据作为参数传递给该函数。
3.代理服务器:
因为跨域问题是存在于浏览器向服务器请求地址不一致出现的问题,问题发生在浏览器。
我们可以通过自己创建一个代理访问进行代理访问,因为是自己创建的服务器。我们可以很方便的解决跨域问题(CORS,JSON)方案。
然后代理服务器转发真实的请求,因为服务器与服务器之间的请求是不会触发跨域问题。我们可以正常拿到请求数据。