美文网首页
跨资源共享CORS

跨资源共享CORS

作者: 雷雨leiyu | 来源:发表于2021-05-22 10:56 被阅读0次

    名词解释

    • Origin:同源策略指的是具有相同协议/域以及端口的资源;
    • CORS:跨资源共享,Cross-Origin Resource Sharing;

    跨域请求方案

    • CORS:官方推荐的方案;
    • HTML5 API:postMessage;
    • Web Socket:完全抛弃HTTP协议;
    • JSONP:不推荐使用;

    CORS

    跨资源共享允许Web服务器进行跨源访问控制,以保障跨源数据的安全。

    使用CORS的场景

    • 使用XHR或者FetchAPI发起的HTTP请求;
    • Web字体,调用@font-face字体使用到外部字体资源;
    • 使用drawImage将Image/Video画面绘制到canvas;
    • WebGL贴图;

    CORS预检请求

    • 预检目的:避免跨域请求对服务器用户数据产生预料之外的影响;
    • 实现方法:向服务器发送OPTIONS请求;

    HTTP请求头部字段

    • Origin:预检请求或者实际请求的源站;
    • Access-Control-Request-Method:预检请求中将实际请求的方法告诉服务器;
    • Access-Control-Request-Headers:预检请求中将实际请求的头部告诉服务器;
    OPTIONS /resources/post-here/ HTTP/1.1
    Host: bar.other
    User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b3pre) Gecko/20081130 Minefield/3.1b3pre
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: en-us,en;q=0.5
    Accept-Encoding: gzip,deflate
    Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Connection: keep-alive
    Origin: http://foo.example
    Access-Control-Request-Method: POST
    Access-Control-Request-Headers: X-PINGOTHER, Content-Type
    

    HTTP响应的头部

    • Access-Control-Allow-Origin:允许的源,不管预检请求还是实际请求都需要此字段;
    • Access-Control-Allow-Methods:允许的方法;
    • Access-Control-Allow-Headers:允许的头部;
    • Access-Control-Expose-Headers:服务器把允许浏览器访问的头放入白名单;
    • Access-Control-Max-Age:该响应的有效时间,在该时间内无需再发预检请求;
    HTTP/1.1 200 OK
    Date: Mon, 01 Dec 2008 01:15:39 GMT
    Server: Apache/2.0.61 (Unix)
    Access-Control-Allow-Origin: http://foo.example
    Access-Control-Allow-Methods: POST, GET, OPTIONS
    Access-Control-Allow-Headers: X-PINGOTHER, Content-Type
    Access-Control-Max-Age: 86400
    Vary: Accept-Encoding, Origin
    Content-Encoding: gzip
    Content-Length: 0
    Keep-Alive: timeout=2, max=100
    Connection: Keep-Alive
    Content-Type: text/plain
    

    简单请求

    不需要发起预检的请求被称为简单请求。

    简单请求必需满足下面所有条件

    • 请求方法必需三者之一:GET, POST, HEAD;
    • Content-Type必需是三者一直:text/plain, multipart/form-data, application/x-www-form-urlencoded;
    • 头部相关:Accept, Accept-Language, Content-Type等;
    • 文件相关:XMLHttpRequestUpload对象不能注册监听器以及没有ReadableStream对象;

    相关文章

      网友评论

          本文标题:跨资源共享CORS

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