CORS是什么
CORS是什么
允许服务器声明哪些源站有权限访问哪些资源。
跨域资源共享机制的工作原理主要应用于三个场景:
- 简单请求
- 预检请求
- 认证请求
简单请求
简单请求是什么
请求满足所有下述条件,则该请求可视为“简单请求”:
- 使用下列请求方法之一: GET、HEAD或POST
- 不得人为设置下列集合之外的其他首部字段: Accept、 Accept-Language、Content-Language、Content- Type
- Content-Type的值仅限于下列三者之一:
- text/plain
- multipart/form-data
- application/x-www-form-udlencoded
值得注意的是,这些跨域请求与浏览器发出的其他跨域请求并无一致。如果服务器未返回正确的响应首部,则请求方不会收到任何数据。因此,那些不允许跨域请求的网站无需为这一新的HT TP访问控制特性担心。
请求消息
请求首部字段Origin表示该请求来源于http://foo.exmaple, Origin的值是每次发送请求时自动携带的请求首部消息。
响应消息
响应中携带了响应首部字段Access Control Allow-Origin,使用Origin和Access -Control-Allow-Origin就能完成最简单的访问控制。
预检请求
预检请求是什么
当请求满足下述任一条件时,即应首先发送预检请求:
- 使用下列请求方法之一: PUT、DEL ETE、CONNECT、OPTIONS、TRACE或PATH
- 不得人为设置下列集合之外的其他首部字段: Accept、 Accept-Language、Content-Language、Content- Type
- Content- Type的值仅限于下列三者之一:
- text/plain
- multipart/form-data
- application/x-www-form uclencoded
预检请求要求必须首先使用OPTIONS方法发起一个 预检请求到服务器,以获知服务器是否允许该实际请求。
预检请求可以避免跨域请求对服务器的用户数据产生未预期的影响。
请求消息
- 请求首部字段Access - Control-Request-Method表示该请求使用POST方法。
- 请求首部字段Access -Control-Request Headers表示该请求携带X PINGOTHER首部字段。
响应消息
- 响应首部字段Access-Control-Allow-Methods表示允许POST、GET和OPTIONS请求方法。
- 响应首部字段Access-Control-Allow-Headers表示允许请求携带首部字段X- PINGOTHER。
- 响应首部字段Access-Control-Max-Age表示设置响应有效时间为1728000秒。
CORS是什么
Window对象是什么
认证请求
认证请求是什么
CORS具有一个有趣的特性是,可以基于HTTP Cookies和HTTP认证信息发送身份凭证。一般而言,对于跨域XML HttpRequ Jest请求,浏览器不会发送身份凭证信息。如果要发送凭证信息,需要设置XML HttpRequ Jest的某个特殊标志位。
xmlHttpRequest.withCredentials = true;
将XML HttpRequ Jest的withCredentials标志设置为true,使得向服务器发送Cookies,服务器返回
响应首部字段Access-Control-Allow-Credentials: true。
如果服务器端的响应中未携带Access-Control-Allow-Credentials: true,浏览器将不会把响应内容返回给请求的发送者。
请求消息
请求携带了请求首部字段Cookie的相关信息。