1、HTTP一共有八种常见请求方法
- get:参数在url上,浏览器长度有限制,不安全
- post:参数不可见,长度不受限制
- put:上传最新内容到指定位置
- delete:删除请求的url所表示的资源
- head:不返回相应主体,主要用于客户端查看服务器性能
- options:与head相似,是客户端用于查看服务器的性能 。JavaScript的XMLHttpRequest对象进行CORS跨域资源共享时,就是使用OPTIONS方法发送嗅探请求,以判断是否有对指定资源的访问权限
- connect:http1.1预留的,将链接方式改成管道方式,一般用于SSL加密服务器的连接与 HTTP非加密的代理服务器之间的通讯
- trace:请求服务器[回显收到的请求信息]主要用于HTTP请求的测试或诊断
- patch:出现的较晚,用于更新局部的资源,不存在时,会建立一个新的(http1.1以后使用的较多的)
通常来讲咱们只须要用到post和get,可是若是后端是ResetFul设计规范下就须要用到各类语义化的方法了nginx
2、什么是预请求?
预请求就是复杂请求(可能对服务器数据产生反作用的HTTP请求方法,如put,delete都会对服务器数据进行更修改,因此要先询问服务器)。
跨域请求中,浏览器自发的发起的预请求,浏览器会查询到两次请求,第一次的请求参数是options,以检测试实际请求是否能够被浏览器接受web
3、为何须要?
w3c规范要求,对复杂请求,浏览器必须先使用options发起一个预检请求,从而获知服务器是否容许该跨域请求,服务器确认之后才能发起实际的HTTP请求,不然中止第二次正式请求。ajax
那为何咱们不常见options请求呢??
由于大部分咱们使用的是get,post请求,他们属于简单请求,而简单请求不会触发options请求。
那什么状况下会发生options请求呢???👇spring
4、什么状况下发生?(如下都属于复杂请求)
- 请求方法不是get head post
- post 的content-type不是application/x-www-form-urlencode,multipart/form-data,text/plain [也就是把content-type设置成"application/json"]
- 请求设置了自定义的header字段: 好比业务需求,传一个字段,方面后端获取,不须要每一个接口都传
例如设置了post请求的content-type:application/json,就会发生预请求 json
5、为何须要设置成contentType:"application/json"
ajax发送复杂的json数据结构, 处理方式困难, 服务器端难以解析, 因此就有了application/json这种类型(数据格式的声明)服务端好解析而且比较统一,若是你请求中没有设置成json格式的,有的服务端收到后也会改为json格式的,可是如何请求中就改为了json格式的就会发生options预请求后端
if设置了:
- 表示json格式的字符串,发送的json对象必须使用json.stringify进行序列化字符串才能匹配
- spring 须要使用@RequestBody来注解
if没设置:
- 默认将使用contentType: "application/json”application/x-www-form-urlencoded
6、须要配置什么?
在 CORS 中,可使用 OPTIONS 方法发起一个预检请求,服务器基于从预检请求得到的信息来判断,以检测实际请求是否能够被服务器所接受。跨域
1.预请求的请求报文中要设置👇
- Access-Control-Request-Method首部字段: 告知服务器实际请求所使用的 HTTP 方法;
- Access-Control-Request-Headers首部字段: 告知服务器实际请求所携带的自定义首部字段。
2.同时服务端或者nginx 须要设置响应体👇
"Access-Control-Allow-Origin" : * 【跨域】
Access-Control-Allow-Methods:POST,GET,OPTIONS,DELEDET 【所容许的请求方法告知客户端】
Access-Control-Allow-Headers: X-Requested-With, accept, origin, content-type【自定义的请求头】
Access-Control-Allow-Age:3600
【一段时间内不须要再次预请求,直接用本次结果便可】
"Content-Type", "application/json;charset=utf-8"
复制代码
7、options做用
OPTIONS请求方法的主要用途有两个:浏览器
- 获取服务器支持的HTTP请求方法;也是黑客常用的方法。
- 用来检查服务器的性能。例如:AJAX进行跨域请求时的预检,须要向另一个域名的资源发送一个options请求头,用以判断实际发送的请求是否安全。
8、跨域方法:
- JSONP跨域:动态生成script标签,只支持get请求,可是兼容性比较好能够支持老浏览器
- CORS跨源资源共享:options请求作嗅探
- webSockted:全双工通讯
- img src :不受浏览器的同源限制