举例说明简单请求和非简单请求

引言

浏览器在发送跨域请求的时候会判断一下是简单请求还是非简单请求,简单请求:先执行后判断是否跨域。如果是非简单请求,会先发一个命令,检查通过之后才会真正把跨域请求发出去。

定义

简单请求:

方法为:post/get/head
绝对不是put和delete,put是传文件,delete是删文件肯定不安全,不可能不发option

Request header里面(注意是请求头,不是响应头)

  • 无自定义头!!!!!
  • Content-Type为以下几种:
    – text/plain
    –multipart/form-data
    –application/x-www-form-urlencoded
    【举例】
    举例一个post请求,要看其请求头的content-type,也看其有没有自定义头
    在这里插入图片描述
    这条请求的请求头里的content-type为text/plain且无自定义头所以是简单请求。
    get虽然没有content-type但也可能是非简单请求,如带了自定义头,比如下面这个get请求
    在这里插入图片描述
    对应代码:
    在这里插入图片描述
    再举一个带自定义头的get请求,带了token,非简单请求
    在这里插入图片描述

非简单请求

工作中常见的有:

  • put,delete方法的ajax请求
  • 发送json格式的ajax请求(最常见,如下post例子)
  • 带自定义头的ajax请求(如上get例子)
    【举例】
    在这里插入图片描述
    这条请求的请求头content-type为application/json,非简单请求。看请求头里有origin所以是跨域请求。刚才引言中说,如果是非简单请求,会先发一个命令,检查通过之后才会真正把跨域请求发出去。 所以看该请求上面还有个view请求,打开
    在这里插入图片描述
    类型为option,这就是预检命令。

预检命令

预检命令包含下面三个字段
access-control-request-headers
access-control-request-method
origin
预检命令是浏览器自动发出
在这里插入图片描述
例2:
在这里插入图片描述

预检命令的缓存

非简单请求每次会发出两条请求,自然会影响我们的效率,HTTP协议里面增加了一个响应头可以用来缓存我们的预检命令。
该响应头字段时access-control-max-age,即告诉浏览器在一个小时之内可以缓存这段信息,不需要再发送预检命令(后台处理)

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值