CORS

    xiaoxiao2021-03-25  183

    CORS的定义

      cross-origin resource sharing——跨域资源共享   通俗地讲,CORS是W3C的新标准,允许浏览器向非同源的服务器发出HTTP请求,解决Ajax跨域请求。

    CORS请求和非CORS请求的区别

      所有的CORS请求都必须有一个固定的请求头字段:Origin。但是含有Origin头字段的请求不一定是CORS请求,因为有些浏览器在做同源请求的时候也会加上Origin字段,只不过Origin字段的值与Scheme(如,http)+Host相等。因此,判断CORS请求和非CORS请求的区别在于,请求头信息中Origin和Scheme+Host是否相等,相同则为同源请求;不相等则为CORS请求。

    CORS分类

      CORS请求分为两类,简单请求和非简单请求。在请求方式上,非简单请求比简单请求多出一步预检的过程。也就是说,非简单请求首先向服务器发出预检请求,得到许可之后再发出实际的请求。

    简单请求

    非简单请求

    预检请求头信息

    Access-Control-Request-Method(一定含有)Method=OPTIONSOrigin(一定含有)Access-Control-Request-Headers

    实际请求头信息

    没有什么特殊的地方

    预检请求特殊应答头

    Access-Control-Allow-Origin(一定含有)Access-Control-Allow-CredentialsAccess-Control-Max-AgeAccess-Control-Allow-Methods(一定含有)Access-Control-Allow-Headers

    实际请求特殊应答头

    Access-Control-Allow-Origin(一定含有)Access-Control-Allow-CredentialsAccess-Control-Max-AgeAccess-Control-Allow-MethodsAccess-Control-Allow-Headers

    应答特殊头含义

    Access-Control-Allow-Origin   允许跨域访问的源Access-Control-Allow-Credentials   告诉客户端允许做用户确定(一种机制,服务端想知道是谁在请求自己的机制),cookies,HTTP authentication,client-side certificates。取值true/falseAccess-Control-Expose-Headers   向外暴露的头信息,客户端可以通过get到的头字段Access-Control-Max-Age   这个字段是针对预请求的,并不是每次非简单的CORS请求都必须进行预请求检查的,第一次请求了,可以缓存起来,保存多长时间,设置即可,秒为单位。当然,客户端浏览器设置禁用缓存,那就另当别论了。Access-Control-Allow-Methods   允许访问的请求方法方法,预请求必须返回的头信息Access-Control-Allow-Headers   允许的头信息

    注意:Access-Control-Allow-Origin的取值如果是“*”,则Access-Control-Allow-Credentials不起作用;也就是说,要使用Access-Control-Allow-Credentials,Access-Control-Allow-Origin必须是确定的

    附录: 用户不能设置的头字段: * Access-Control-Request-Headers(XMLHttpRequest2中增加的) * Access-Control-Request-Method(XMLHttpRequest2中增加的) * Connection (关闭除外) * Content-Length * Content-Transfer-Encoding * Host * Keep-Alive * Origin * Trailer * Transfer-Encoding * Upgrade * Via

    转载请注明原文地址: https://ju.6miu.com/read-1717.html

    最新回复(0)