账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    前端 - 跨域 - 疑问
    • 2017-09-28 00:00
    • 11
    12
    0

    最近在看跨域的知识,介于不是很了解其使用场景,故非常难受。

    1. 前端跨域这个技术是有何需求发展起来的?
    2. 其常见的使用场景是什么呢?
    3. 需要访问其他服务器资源,api之类的,后端服务器处理很方便,为何要前端来处理呢?(只是单纯的想让浏览器来做处理,不增加服务器负担么?)

    补充:
    明明浏览器默认禁止的,有安全问题,有诸多不便,为何还要排除万难,历经艰辛要从前端发送请求?

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    • 只有回憶而已丶 普通会员 1楼

      在前端开发中,跨域问题是指客户端和服务器端之间通过某种协议(如HTTP、XMLHttpRequest、HTTPS)进行通信时,由于协议限制或浏览器支持情况不同,导致数据传输被限制或中断的现象。以下是一些常见的跨域问题和解决方案:

      1. 跨域资源共享(CORS)
      2. 支持方式:CORS是一种HTTP响应头,用于允许特定来源的HTTP请求跨域。当服务器端发送一个HTTP响应头,包括Access-Control-Allow-Origin字段,指定允许哪些源的HTTP请求访问服务器端的资源,就可以解决跨域问题。
      3. 示例代码: javascript var xhr = new XMLHttpRequest(); xhr.open('GET', 'https://www.example.com/api/data', true); xhr.setRequestHeader('Access-Control-Allow-Origin', '*'); xhr.onload = function() { if (xhr.status === 200) { // 处理服务器返回的数据 console.log(xhr.responseText); } }; xhr.send();

      4. JSONP(JSON with Padding)

      5. 支持方式:JSONP是一种跨域请求解决方案,通过创建一个函数,当服务器响应时,返回一个带有参数的JSON对象,参数值由客户端动态请求指定。例如,https://example.com/api/data?callback=handleResponse
      6. 示例代码: javascript function handleResponse(data) { console.log(data); } var xhr = new XMLHttpRequest(); xhr.open('GET', 'https://www.example.com/api/data', true); xhr.setRequestHeader('Access-Control-Allow-Origin', '*'); xhr.onload = handleResponse; xhr.send();

      7. 浏览器支持的同源策略(CORS)

      8. 解决方式:大多数现代浏览器支持同源策略,允许客户端发送HTTP请求时携带Access-Control-Allow-Origin头,并且服务器端在响应时允许指定允许哪些来源的请求。在使用这些解决方案之前,确保你的服务器端已经在响应头中设置了Access-Control-Allow-Origin,并且服务器端允许跨域请求。
      9. 示例代码: javascript var xhr = new XMLHttpRequest(); xhr.open('GET', 'https://www.example.com/api/data', true); xhr.setRequestHeader('Access-Control-Allow-Origin', '*'); xhr.onload = function() { if (xhr.status === 200) { // 处理服务器返回的数据 console.log(xhr.responseText); } }; xhr.send();

      10. HTTP X-Origin Policy

      11. 支持方式:对于一些特定的网站,如新闻网站,他们可能在服务器端设置了特定的HTTP X-Origin Policy,允许特定源的请求。这通常通过设置Access-Control-Allow-Origin头或添加特定的X-Origin请求头字段来实现。
      12. 示例代码: javascript var xhr = new XMLHttpRequest(); xhr.open('GET', 'https://www.example.com/api/data', true); xhr.setRequestHeader('Access-Control-Allow-Origin', 'http://news.example.com'); xhr.onload = function() { if (xhr.status === 200) { // 处理服务器返回的数据 console.log(xhr.responseText); } }; xhr.send();

      13. Server-Side Caching

      14. 解决方式:通过设置HTTP响应头Cache-Control,服务器端可以控制浏览器是否缓存资源。例如,可以设置Cache-Controlmax-age=3600,表示响应文件将在3600秒内被浏览器缓存,只有当浏览器超时或者无法访问服务器时,才会重新请求资源。
      15. 示例代码: javascript var xhr = new XMLHttpRequest(); xhr.open('GET', 'https://www.example.com/api/data', true); xhr.setRequestHeader('Access-Control-Allow-Origin', '*'); xhr.onload = function() { if (xhr.status === 200) { // 处理服务器返回的数据 console.log(xhr.responseText); } }; xhr.send(); // 在JavaScript中设置Cache-Control为max-age=3600 window.addEventListener('beforeunload', function() { var xhr = new XMLHttpRequest(); xhr.open('GET', 'https://www.example.com/api/data', true); xhr.setRequestHeader('Access-Control-Allow-Origin', '*'); xhr.onload = function() { if (xhr.status === 200) { console.log(xhr.responseText); } }; xhr.send(); });

      以上是一些常见的跨域问题和解决方案,实际应用中可能需要根据具体场景和服务器端的策略进行调整和优化。在开发过程中,始终应关注跨域问题,并在必要时采取相应的策略和技术手段来解决它们。

    更多回答
    扫一扫访问手机版