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)
|
安全 前端开发 JavaScript
HTTP访问控制(CORS)
跨域资源共享(CORS) 是一种机制,它使用额外的 HTTP 头来告诉浏览器 让运行在一个 origin (domain) 上的Web应用被准许访问来自不同源服务器上的指定的资源。当一个资源从与该资源本身所在的服务器不同的域、协议或端口请求一个资源时,资源会发起一个跨域 HTTP 请求。
222 0
|
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)
|
Web App开发 前端开发
|
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.首先安装最新版本gitlab(gitlab7.2安装) 2.停止旧版本gitlab服务 3.将旧的项目文件完整导入新的gitlab   bundle exec rake gitlab:import:r...
712 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
mysql修改表、字段、库的字符集 修改数据库字符集: ALTER DATABASE db_name DEFAULT CHARACTER SET character_name [COLLATE .
708 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
kafka.common.ConsumerRebalanceFailedException: group_dd-1446432618163-2746a209 can't rebalance after 10 retries  at kafka.
814 0
|
Web App开发 前端开发 Java
|
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
一、概述   多维数据模型是最流行的数据仓库的数据模型,多维数据模型最典型的数据模式包括星型模式、雪花模式和事实星座模式,本文以实例方式展示三者的模式和区别。
760 0
|
Web App开发 前端开发 Linux
<!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
nproc是操作系统级别对每个用户创建的进程数的限制,在Linux下运行多线程时,每个线程的实现其实是一个轻量级的进程,对应的术语是:light weight process(LWP)。
1154 0