http-web前后端的跨域

本文详见

server文件夹

server.js 供应主server api效劳

node server/server.js 开启效劳

staticServer.js 供应一个静态html容器

node server/staticServer.js 开启效劳

www文件夹

cross-domain.html 客户端页面,发送XHR或许fetch

浏览器跨域相干

跨域是为了保证效劳端的平安,不许可随意的要求,这是浏览器的平安行动

tips

localhost和127.0.0.1差别域,浏览器并不晓得localhost映射到的是127.0.0.1,所以以为他们差别域

一般跨域之Access-Control-Allow-Origin

当浏览器涌现跨域报错时,==实在效劳器的响应已抵达浏览器了==,只不过浏览器会对照要求的头信息,对照当前域是不是是被Access-Control-Allow-Origin头信息许可的,假如不许可,则提醒报错

JSONP

关于link,script,image等标签src或ref是能够拿到非同域的资本,js动态建立script标签则可获取到数据,这个不须要后端支撑

CORS预要求&&跨域

敲黑板:Access-Control-Allow-Origin并不能完整支撑跨域,另有其他限定,比方运用fetch,有些自定义头信息,超越许可局限的要领等,在跨域的时刻,都是不被许可的

预要求

在以下许可局限以外的,都须要经由过程预要求的考证&&一些限定

  • 许可要领

    • GET
    • POST
    • HEAD
  • 许可Content-Type

    • text/plain
    • multipart/form-data
    • application/x-www-form-urlencoded
  • 要求头限定,检察官方文档吧
  • XMLHttpRequestUpload对象均没有注册任何时候监听器
  • 要求中没有运用ReadableStream对象

预要求依据什么来推断这个要求是不是是被许可的呢 – Response Headers信息,浏览器读取Response Headers信息来晓得当前要求是不是是被许可的

关于CORS跨域,限定前提有许多,以下,这些在限定前提以内才能够许可

  • 自定义的要领
  • Content-Type
  • 头信息
  • … 详见官方文档

以自定义头信息举例

前端

fetch('http://127.0.0.1:8887', {
  method: 'POST',
  // 此处增加一条自定义头信息
  headers: {
    'X-Test-Cors111': 'test'
  }
})

后端

response.writeHead(200, {
  'Access-Control-Allow-Origin': '*',
})

此时浏览器提醒正确的响应的报错

《http-web前后端的跨域》

此时后端须要以下,许可这类自定义头信息,才能够能够一般返回

response.writeHead(200, {
  'Access-Control-Allow-Origin': '*',
  'Access-Control-Allow-Headers': 'X-Test-Cors111'
})

同理,另有以下其他的限定

  • ‘Access-Control-Allow-Headers’: ‘X-Test-Cors111’ //针对自定义头信息
  • ‘Access-Control-Allow-Methods’: ‘PUT, DELETE’, // 针对自定义要领
  • ‘Access-Control-Max-Age’: ‘1000’, // Access-Control-Max-Age:当前要求下面,以上述情势要求许可跨域的,1000s以内不须要发送预要求来考证了,直接提议正式的要求即可

tips:

chrome devTools有时刻会不提醒options预要求的XHR?发送options预要求的不好考证

检察细致的http要乞降响应的内容: curl -v www.baidu.com

    原文作者:Ashin
    原文地址: https://segmentfault.com/a/1190000017249063
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞