跨域资源共享 CORS 详解

本文详细介绍跨域资源共享 CORS,它需浏览器和服务器同时支持。浏览器将 CORS 请求分为简单请求和非简单请求,分别阐述了两种请求的基本流程及服务器响应头字段。还对比了 CORS 与 JSONP,指出 JSONP 只支持 GET 请求,支持老式浏览器,而 CORS 支持所有请求,需 IE9 以上浏览器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

跨域资源共享 CORS 详解

  • CORS 需要浏览器和服务器 同时支持,目前所有浏览器都支持该功能(除IE10以下版本),浏览器将CORS请求分成两类:简单请求 和 非简单请求。

1.两种请求

  • 简单请求: 只要满足以下两大条件,就属于简单请求。
    在这里插入图片描述
    (1).基本流程:

    • 当发送请求时,浏览器会判断 是 简单请求 还是 非简单请求 , 当为 简单请求时 就会在 request (请求头)headers 上自动加上 Origin 字段。
    • 在这里插入图片描述
      这个字段 用于 说明 本次请求 来自 哪个 源 (协议 + 域名 + 端口(默认为 80)),服务器 根据这个值判断 是否在 服务器 响应头(response headers) Access-Control-Allow-Origin 字段 指定的 范围内,如果在 则 请求成功,不在则会抛出 一个 跨域 请求 错误。
  • 如果Origin 在指定的 许可范围内,服务器响应头会多出几个字段:
    在这里插入图片描述
    (1).Access-Control-Allow-Origin:(必需)
    这个字段,表明 服务端 接受 哪些 域名 请求, 设置为 * 表示 所有

(2).Access-Control-Allow-Credentials:(可选)
这个 字段 表示 是否允许 发送 cookie, true 允许 cookie包含在 请求中 , 若不允许的 话 直接 删除该字段即可。

(3).Access-Control-Expose-Headers:(可选)
在这里插入图片描述

  • 非简单请求:
    除简单请求 之外的请求。

(1).基本流程:
非简单请求 在 与 服务器 正式 通信 之前 会 先 发送 一个 预请求 ,这个 请求 的 头部信息(request headers) 会有 Origin 和 Access-Control-Request-Method.

Access-Control-Request-Method 表示 本次 请求 使用的 方法

服务器 会 检测 Origin 是否在 服务器 标明的 Access-Control-Allow-Origin 字段 指定 的范围内,Access-Control-Request-Method 是否 在 服务器 标明的Access-Control-Allow-Methods字段 指示的方法内,若都符合 则 会 进行 真正的 请求。

(2). 服务器回应的其他CORS相关字段如下:

  • Access-Control-Max-Age: 该字段可选,用来指定本次预检请求的有效期,单位为秒。上面结果中,有效期是20天(1728000秒),即允许缓存该条回应1728000秒(即20天),在此期间,不用发出另一条预检请求

与JSONP的比较
(1).JSONP 只支持 GET 请求 CORS 支持所有 请求
(2).JSONP 支持 所有 老式浏览器 而 CORS 必须是IE9以上的 浏览器才支持

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值