简单请求和预检请求

简单请求

简单请求要满足两个条件:

    1. 请求方法为:HEAD、GET、POST
    1. header中只能包含以下请求头字段:
  •         Accept
    
  •         Accept-Language
    
  •         Content-Language
    
  •         Content-Type: 所指的媒体类型值仅仅限于下列三者之一
    
  •                      text/plain
    
  •                      multipart/form-data
    
  •                      application/x-www-form-urlencoded
    

预检请求:

不满足简单请求的条件,都认为是非简单请求

什么时候会触发预检请求呢?

发送跨域请求时,请求头中包含了一些非简单请求的头信息,例如自定义头(custom header)等; 发送跨域请求时,使用了PUT、DELETE、CONNECT、OPTIONS、TRACE、PATCH等请求方法。

预检请求的目的是为了保护客户端的安全,防止不受信任的网站利用用户的浏览器向其他网站发送恶意请求。 预检请求头中除了携带了origin字段还包含了两个特殊字段:

  • Access-Control-Request-Method: 告知服务器实际请求使用的HTTP方法
  • Access-Control-Request-Headers:告知服务器实际请求所携带的自定义首部字段。 比如:

OPTIONS /resources/post-here/ HTTP/1.1
Host: bar.other
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

以上报文中就可以看到,使用了OPTIONS请求,浏览器根据上面的使用的请求参数来决定是否需要发送,这样服务器就可以回应是否可以接受用实际的请求参数来发送请求。Access-Control-Request-Method告知服务器,实际请求将使用 POST 方法。Access-Control-Request-Headers告知服务器,实际请求将携带两个自定义请求标头字段:X-PINGOTHER 与 Content-Type。服务器据此决定,该实际请求是否被允许。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
进行非简单请求时,浏览器会先发送一个预检请求OPTIONS,以确保实际请求是安全的并且被服务器支持。预检请求包含一个Access-Control-Request-Method头部,用于指定实际请求HTTP方法。 正确处理预检请求,需要在服务器端设置相应的CORS响应头。具体步骤如下: 1. 在springboot的配置类中,添加CorsFilter过滤器。 ```java @Bean public CorsFilter corsFilter() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); CorsConfiguration config = new CorsConfiguration(); config.addAllowedOrigin("*"); // 允许跨域访问的域名,*代表所有域名 config.addAllowedHeader("*"); // 允许跨域访问的请求头 config.addAllowedMethod("*"); // 允许跨域访问的HTTP方法,*代表所有方法 config.setMaxAge(1800L); // 预检请求的缓存时间,单位为秒 source.registerCorsConfiguration("/**", config); return new CorsFilter(source); } ``` 2. 配置CorsConfiguration对象,设置允许的跨域访问域名、请求头和HTTP方法。其中,addAllowedOrigin方法设置允许跨域访问的域名,addAllowedHeader方法设置允许跨域访问的请求头,addAllowedMethod方法设置允许跨域访问的HTTP方法。 3. 将CorsConfiguration对象注册到UrlBasedCorsConfigurationSource中,并设置拦截路径。在本示例中,将拦截所有请求,所以设置拦截路径为"/**"。 4. 将UrlBasedCorsConfigurationSource对象注册到CorsFilter中,并返回该对象。 这样,当浏览器发送预检请求时,CorsFilter会对该请求进行拦截,并返回相应的CORS响应头,以确保实际请求可以被安全地执行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值