https跨域和省略协议头

小张哥
2024-03-01 / 0 评论 / 41 阅读 / 正在检测是否收录...

要在JavaScript中引入跨域资源,最常见的方法是使用JSONP(JSON with Padding)或CORS(跨域资源共享)。

JSONP(JSON with Padding)

JSONP是一种在前端实现跨域请求的简单方法,它利用了<script>标签不受同源策略限制的特性。它的原理是动态创建一个<script>标签,将跨域的数据作为回调函数的参数返回。

<script>
    function handleResponse(data) {
        // 处理获取到的数据
        console.log(data);
    }
</script>
<script src="http://example.com/data?callback=handleResponse"></script>

在这个例子中,http://example.com/data 返回的数据将会被作为handleResponse函数的参数传入,从而实现跨域请求。

CORS(跨域资源共享)

CORS是一种更为现代的跨域解决方案,它通过在服务端设置相应的响应头来允许跨域请求。对于前端而言,使用CORS无需额外的配置,只需发送HTTP请求即可。

例如,在使用XMLHttpRequest对象进行跨域请求时,浏览器会自动在请求中添加一个Origin头部,服务器收到请求后会根据实际情况返回一个Access-Control-Allow-Origin头部,来决定是否允许该跨域请求。

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://example.com/data', true);
xhr.onreadystatechange = function() {
    if (xhr.readyState === 4 && xhr.status === 200) {
        console.log(xhr.responseText);
    }
};
xhr.send();

要注意的是,CORS需要服务器端的支持。服务器需要在响应中设置合适的CORS头部,如:

Access-Control-Allow-Origin: *

这将允许任何域的请求来访问该资源。更安全的做法是明确指定允许的域,如:

Access-Control-Allow-Origin: http://example.com

这将只允许http://example.com的请求来访问该资源。

综上所述,JSONP是一种在客户端实现跨域请求的简单方法,而CORS则是一种更为灵活和安全的跨域解决方案,适合现代Web应用的需求。

省略https:的意义:

在浏览器中,如果URL中省略了协议部分(如https:),浏览器会默认使用当前页面所采用的协议。这种行为称为协议相对URL(Protocol-relative URL)。

例如,如果当前页面是通过HTTPS协议加载的,那么浏览器会自动将省略了协议的URL解释为HTTPS。同理,如果当前页面是通过HTTP协议加载的,浏览器会自动将省略了协议的URL解释为HTTP。

这种机制在某些情况下可以方便地允许页面在HTTP和HTTPS两种协议下使用相同的资源,而不需要为每种协议都写一套完整的URL。

0

评论

博主关闭了所有页面的评论