HTTP之神秘的CORS

简介: HTTP之神秘的CORS

文章目录

1、CORS

1、为什么会出现?

因为XHR以及Fetch遵循同源策略,意味着只用这些API进行异步加载时,只能加载到应用程序的同一个域(协议、IP、端口一样)的资源,但是在实际开发过程中,难免会因为各种原因而导致浏览器与服务器处于不同的域,因此CORS便出生了。

2、CORS是什么?

cross-origin sharing from a server perspective 即 CORS, 跨域资源共享,一种基于HTTP头的机制,该机制允许服务器标示除了它自己以外的origin(域、协议、端口),这样浏览器可以访问加载这些资源。

跨域资源共享还通过一种机制来检查服务器是否允许要发送的真实请求,该机制通过浏览器发起一个到服务器托管的跨域资源的预检请求。在预检中,浏览器发送的头中标示有HTTP方法和真实请求中会用到的头。

通俗地讲,CORS就是通过添加Headers字段,以允许浏览器与服务器之间可以跨域访问.

观察一下浏览器的请求头

// 请求方法    请求路径
GET /resources/public-data/ HTTP/1.1
// 主机地址
Host: bar.other
// 用户代理
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b3pre) Gecko/20081130 Minefield/3.1b3pre
// 允许接收的数据格式
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
// 参照
Referer: http://foo.example/examples/access-control/simpleXSInvocation.html
// 请求源
Origin: http://foo.example

观察一下响应头

// 协议 响应状态码
HTTP/1.1 200 OK
Date: Mon, 01 Dec 2008 00:23:53 GMT
// 服务器
Server: Apache/2.0.61
// 允许的请求源
Access-Control-Allow-Origin: *
// 保持链接
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
// 内容类型
Content-Type: application/xml

2、CORS相关的部分首部字段

1、请求首部

1、Origin

表明预检请求或实际请求的源站。

参数的值为源站的URI, 它不包括任何的路径信息,只是服务器名称

2、Access-Control-Request-Method

用于预检请求。

其作用是将是继请求所使用的HTTP方法告诉服务器

2、响应首部

1、Access-Control-Allow-Origin

Access-Control-Allow-Origin: <origin> | *

其中,origin 参数的值指定了允许访问该资源的外域 URI。对于不需要携带身份凭证的请求,服务器可以指定该字段的值为通配符,表示允许来自所有域的请求。

Access-Control-Allow-Origin: http://mozilla.com

如果服务端指定了具体的域名而非==“*”==,那么响应首部中的 Vary 字段的值必须包含 Origin。这将告诉客户端:服务器对不同的源站返回不同的内容。

2、Access-Control-Max-Age

指定了preflight请求的结果能够被缓存多久

3、Access-Control-Allow-Credentials

☞定了当浏览器的credentials设置为true时是否允许浏览器读取response的内容。当用在对preflight预检测请求的响应中时,它指定了实际的请求是否可以使用credentials。请注意:简单 GET 请求不会被预检;如果对此类请求的响应中不包含该字段,这个响应将被忽略掉,并且浏览器也不会将相应内容返回给网页。

ps: 欢迎一起交流学习

相关文章
|
1月前
|
安全 前端开发 网络协议
[Http] 跨源资源共享(CORS)
[Http] 跨源资源共享(CORS)
|
Web App开发 XML JavaScript
【网络知识补习】❄️| 由浅入深了解HTTP(五)跨源资源共享(CORS)
🥭跨源资源共享(CORS) 🏳️‍🌈功能概述 🏳️‍🌈若干访问控制场景 简单请求 预检请求 预检请求与重定向 附带身份凭证的请求 附带身份凭证的请求与通配符 第三方 cookies 🏳️‍🌈HTTP 响应首部字段 Access-Control-Allow-Origin Access-Control-Expose-Headers Access-Control-Max-Age Access-Control-Allow-Credentials Access-Control-Allow-Methods Access-Control-Allow-Headers
【网络知识补习】❄️| 由浅入深了解HTTP(五)跨源资源共享(CORS)
|
安全 前端开发 JavaScript
HTTP访问控制(CORS)
跨域资源共享(CORS) 是一种机制,它使用额外的 HTTP 头来告诉浏览器 让运行在一个 origin (domain) 上的Web应用被准许访问来自不同源服务器上的指定的资源。当一个资源从与该资源本身所在的服务器不同的域、协议或端口请求一个资源时,资源会发起一个跨域 HTTP 请求。
223 0
|
Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
异步通信 对于BS(Browser-Server 浏览器)架构,很多情景下server的处理时间较长。 如果浏览器发送请求后,保持跟server的连接,等待server响应,那么一方面会对用户的体验有负面影响; 另一方面,很有可能会由于超时,提示用户服务请求失败。
769 0
|
Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
最近在线上往hbase导数据,因为hbase写入能力比较强,没有太在意写的问题。让业务方进行历史数据的导入操作,中间发现一个问题,写入速度太快,并且业务数据集中到其中一个region,这个region无法split掉,处于不可用状态。
1339 0
|
Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
Found lingering reference异常 ERROR: Found lingering reference file hdfs://jiujiang1:9000/hbase/month_hotstatic/...
722 0
|
Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
Every Programmer Should Know These Latency Numbers 1秒=1000毫秒(ms) 1秒=1,000,000 微秒(μs) 1秒=1,000,000,000 纳秒(ns) 1秒=1,000,000,000,000 皮秒(ps) L1 cache reference .
647 0
|
Web App开发 前端开发 Java
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
java链接MongoDB处理大量数据时经常碰到cursor not found 的异常,其实是超时所致 Exception in thread "main" com.
830 0
|
Web App开发 监控 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
负载均衡: LVS(Layer 4), HAProxy(Layer 4、 7),Nginx(Layer 7) 虚拟化: LXC、KVM、Xen HA:Keepalived、Heartbeat 分布式缓存...
760 0
|
Web App开发 大数据
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
                                                                               1.
1694 0