美文网首页
跨域HTTP请求

跨域HTTP请求

作者: cccccccc7355608 | 来源:发表于2017-10-30 23:02 被阅读0次

上一篇中提到过的同源策略,作为其一部分,XMLHttpRequest 对象通常只是用于发起和文档具有相同服务器的HTTP请求。这个限制关闭了安全漏洞,但在另一方面却阻止了大量合适使用的跨域请求。
例如,在 <form><iframe> 元素中使用跨域 URL,浏览器会显示最终的跨域文档,与此同时,浏览器却不允许我们使用原始脚本查找跨域文档的内容,根源在于同源策略。如何做到既保证浏览器的安全,又要完成跨域呢?

  1. JSONP
    <script> 元素并未真正受限于同源策略:它加载并执行任何来源的脚本,只须设置 <script> 元素的 src 属性,一旦这个元素插入到文档中,浏览器就会发送一个HTTP请求以下载 src 属性所指向的 URL。之后,包含JSON编码数据的响应体会自动解码(即,执行)
    响应的JSON解码数据,形如 [1, 2, {"buckle": "my shoe"}]
    将其包裹在一个函数名内,handleResponse([1, 2, {"buckle": "my shoe"}])
    若此时有一个名为 handleResponse 的函数,则相当于将响应的编码数据作为参数,执行函数,为做到这点,需要前后端约定函数名,以上便是JSONP的关键

  2. CORS
    CORS 全名为 Cross-Origin Resource Sharing,跨域资源共享,这种请求与传统的 Ajax 请求没有区别,浏览器一旦发现Ajax请求跨域,就会自动在请求的头部添加一些信息,若服务器实现了CORS接口,浏览器就能接收到返回的消息,实现跨域通信

    • 请求的方法
      • HEAD
      • GET
      • POST
    • HTTP的头信息不超过以下几种字段
      • Accept
      • Accept-Language
      • Content-Language
      • Ladt-Event-ID
      • Content-type:只限于三个值 application/x-www-form-urlencoded、multipart/form-date、text/plain
        详见
  3. postMessage
    window.postMessage() 方法被调用时,会在所有页面脚本执行完毕之后(e.g., 在该方法之后设置的事件、之前设置的timeout 事件,etc.)向目标窗口派发一个 MessageEvent 消息。 该MessageEvent
    消息有四个属性需要注意: message 属性表示该message 的类型; data 属性为 window.postMessage 的第一个参数;origin 属性表示调用window.postMessage()方法时调用页面的当前状态; source 属性记录调用 window.postMessage()方法的窗口信息
    详见

小结:不同的场景下,解决跨域会有不同的方案,研究跨域也不应该仅仅只是为了应付面试,背后的原理才是关键,jsonp用了script的不受限及脚本的立即执行,cors涉及到HTTP请求头,postmessage用到了window.postMessage()这个方法

相关文章

  • Http访问跨域解决

    一、跨域科普 跨域,即跨站HTTP请求(Cross-site HTTP request),指发起请求的资源所在域不...

  • 跨域HTTP请求

    上一篇中提到过的同源策略,作为其一部分,XMLHttpRequest 对象通常只是用于发起和文档具有相同服务器的H...

  • AJAX出现两次请求 options和get|post

    跨域请求 允许跨域请求 preflighted request预请求(options) 跨域请求 XMLHttpR...

  • 9.CORS

    cors是浏览器跨域的一种规范,规定的跨域方案:通过一系列http请求头去控制跨域行为。 将请求分为两类:简单请求...

  • axios发送俩次请求的原因

    其实跨域分为简单跨域请求和复杂跨域请求 简单跨域请求是不会发送options请求的 复杂跨域请求会发送一个预检请求...

  • Web踩坑

    1.跨域请求Access to XMLHttpRequest at 'http://localhost:8080/...

  • ajax中出现两次请求,OPTIONS请求和GET请求

    HTTP的OPTIONS方法 查找原因是浏览器对简单跨域请求和复杂跨域请求的处理区别 preflighted re...

  • http请求跨域post请求跨域问题

    今天和c++的同事联调创建一个应用接口,服务端增加了允许跨域请求。vue增加了代理proxytable 但是遇到一...

  • jsonp跨域

    什么是跨域 请求协议(http,https)不同 域名(domain)不同 端口(port)不同 跨域解决方案之 ...

  • When specified, “proxy” in packa

    刚安装好react脚手架,然后用axios来请求发现存在跨域问题,我请求的是https的好像请求http是没有跨域...

网友评论

      本文标题:跨域HTTP请求

      本文链接:https://www.haomeiwen.com/subject/qgzmpxtx.html