zoukankan      html  css  js  c++  java
  • CORS详解

    CORS是什么:

      CORS(Cross-Origin Resource Sharing 跨源资源共享),当一个请求url的协议、域名、端口三者之间任意一与当前页面地址不同即为跨域。

      例如最常见的,在一个域名下的网页中,调用另一个域名中的资源。

      出于安全原因,浏览器限制从脚本内发起的跨源HTTP请求。(并不一定是浏览器限制了发起跨站请求,也可能是跨站请求可以正常发起,但是返回结果被浏览器拦截了。)

      跨域资源共享( CORS )机制允许 Web 应用服务器进行跨域访问控制,从而使跨域数据传输得以安全进行。现代浏览器支持在 API 容器中(例如 XMLHttpRequest 或 Fetch )使用 CORS,以降低跨域 HTTP 请求所带来的风险。

    CORS的作用:

      为了改善网络应用程序,开发人员要求浏览器供应商允许跨域请求。跨域请求主要用于:

    • 调用XMLHttpRequest或fetchAPI通过跨站点方式访问资源
    • 网络字体,例如Bootstrap(通过CSS使用@font-face 跨域调用字体)
    • 通过canvas标签,绘制图表和视频。

    什么情况下需要 CORS:

      跨域资源共享标准( cross-origin sharing standard )允许在下列场景中使用跨域 HTTP 请求:

    • 由 XMLHttpRequest 或 Fetch 发起的跨域 HTTP 请求。
    • Web 字体 (CSS 中通过 @font-face 使用跨域字体资源), 因此,网站就可以发布 TrueType 字体资源,并只允许已授权网站进行跨站调用。
    • WebGL 贴图
    • 使用 drawImage 将 Images/video 画面绘制到 canvas
    • 样式表(使用 CSSOM)

    CORS实现:

      CORS也有一些限制,两种模型可以实现:

      1.简单模型
      支持get/post/put/delete请求,例如返回Access-Control-Allow-Origin:*,但是不允许自定义header且会忽略cookies,且post数据格式有限制,只支持‘text/plain','application/x-www-urlencoded'and'multipart/form-data',其中’text/plain'默认支持,后面两种需要下面的预检请求和服务器协商。
      2.协商模型/预检请求(Preflighted Request)
      举例:浏览器发出PUT请求,OPTION请求返回Access-Control-Allow-Origin:*,Access-Control-Allow-Methods:’PUT’,服务器同意所有域的PUT请求,浏览器收到并继续发出真正的PUT请求,服务器响应并再次返回Access-Control-Allow-Origin:*,允许浏览器的脚本执行服务器返回的数据。
  • 相关阅读:
    BZOJ 3626: [LNOI2014]LCA(树链剖分+离线处理)
    python备用
    STL的使用。。备忘
    DP专题
    任务
    hdu 网络流题集
    hdu KM匹配题集
    hdu 差分约束题集
    hdu 2sat题集
    Codeforces Round #261 (Div. 2)
  • 原文地址:https://www.cnblogs.com/ljy1/p/10667668.html
Copyright © 2011-2022 走看看