HTTP之跨域
跨域(Cors)
两种请求
简单请求
浏览器不同的处理方式
对于简单请求来说,如果请求跨域,那么浏览器会放行让请求发出。浏览器会发出cors
请求,并携带origin
。
GET/cors HTTP/1.1
Origin:http://www.baidu.com
Host:api.alice.com
Accept-Language:en-US
Connections:keep-alive
User-Agent:Mozilla/5.0
...
此时不管服务端返回的是什么,浏览器都会把返回拦截,并检查返回的response
的header
中有没有Access-Control-Allow-Origin
,这个头部信息的值通常为请求的Origin
值,表示允许该来源的请求说明资源是共享的,可以拿到。
Access-Control-Allow-Origin: http://www.baidu.com
Access-Control-Allow-Credentials: true
Access-Control-Expose-Headers: FooBar
Content-Type: text/html; charset=utf-8
Access-Control-Allow-Origin
Access-Control-Allow-Credentials
withCredentials属性
Access-Control-Allow-Credentials:true
非简单请求
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://www.baidu.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: X-PINGOTHER, Content-Type
服务器根据以上信息决定,该请求是否被允许
服务器回应:
Access-Control-Request-Method: POST
Access-Control-Request-Headers: X-PINGOTHER, Content-Type
什么时候会触发OPTIONS(预检请求)呢?
- 跨域的时候:Access-Control-Request-Headers:X-PINGOTHER,Content-Type
- 发送跨域的时候:使用PUT、DELETE、CONNECT、OPTIONS、TRACE、PATCH等请求方法。
好啦~这就是今天的新知识点【跨域】,看到这里有一点点了解了吗?
加油丫,正在进步的友友们~