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: 欢迎一起交流学习

相关文章
|
安全 前端开发 JavaScript
HTTP访问控制(CORS)
跨域资源共享(CORS) 是一种机制,它使用额外的 HTTP 头来告诉浏览器 让运行在一个 origin (domain) 上的Web应用被准许访问来自不同源服务器上的指定的资源。当一个资源从与该资源本身所在的服务器不同的域、协议或端口请求一个资源时,资源会发起一个跨域 HTTP 请求。
213 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)
|
3月前
|
安全 网络协议 网络安全
IP代理的三大协议:HTTP、HTTPS与SOCKS5的区别
**HTTP代理**适用于基本网页浏览,简单但不安全;**HTTPS代理**提供加密,适合保护隐私;**SOCKS5代理**灵活强大,支持TCP/UDP及认证,适用于绕过限制。选择代理协议应考虑安全、效率及匿名需求。
|
18天前
HAProxy的高级配置选项-配置haproxy支持https协议及服务器动态上下线
文章介绍了如何配置HAProxy以支持HTTPS协议和实现服务器的动态上下线。
51 8
HAProxy的高级配置选项-配置haproxy支持https协议及服务器动态上下线
|
7天前
|
监控 安全 应用服务中间件
如何配置HTTPS协议?
如何配置HTTPS协议?
15 4
|
6天前
|
安全 网络安全 数据安全/隐私保护
HTTP与HTTPS协议区别及应用场景
在互联网高速发展的今天,HTTP与HTTPS作为数据传输的基石,作用至关重要。HTTP允许客户端与服务器间传输超文本文档,但其数据传输过程未加密,存在安全隐患;HTTPS则在此基础上加入了SSL/TLS协议,实现了数据加密传输,增强了安全性,广泛应用于电子商务、网上银行、政府网站及社交媒体平台等涉及敏感信息传输的领域,有效保护了用户隐私和数据安全。随着网络安全意识提升,HTTPS正逐渐成为主流。
|
1月前
|
安全 算法 网络协议
【在Linux世界中追寻伟大的One Piece】HTTPS协议原理
【在Linux世界中追寻伟大的One Piece】HTTPS协议原理
40 2
|
2月前
|
缓存 网络协议 算法
(二)Java网络编程之爆肝HTTP、HTTPS、TLS协议及对称与非对称加密原理!
作为一名程序员,尤其是Java程序员,那必须得了解并掌握HTTP/HTTPS相关知识。因为在如今计算机网络通信中,HTTP协议的作用功不可没,无论是日常上网追剧、冲���、亦或是接口开发、调用等,必然存在HTTP的“影子”在内。尤其对于WEB开发者而言,HTTP几乎是每天会打交道的东西。
63 10
|
2月前
|
存储 安全 搜索推荐
HTTPS协议深度解析
【7月更文挑战第12天】HTTPS协议通过加密通信和身份验证机制,为数据传输提供了强有力的安全保障。在现代互联网环境中,HTTPS已成为保障网站和用户数据安全的重要手段。了解HTTPS的工作原理和安全性特性,有助于更好地应用和维护HTTPS,提升网络安全水平。
|
2月前
|
安全 算法 网络协议
HTTPS协议的详细讲解(四次握手)
HTTPS协议的详细讲解(四次握手)