当前位置: 首页 > Web前端 > JavaScript

什么是跨源资源共享(CORS)?

时间:2023-03-26 22:02:02 JavaScript

1.什么是CORS?出于安全原因,除非服务器授予访问权限,否则浏览器会限制来自脚本的跨域HTTP请求。比如服务器响应preflight请求,Header中带有Access-Control-Allow-Origin:*,那么这个跨域请求就可以正确访问了。2.危害示例如果恶意网页中包含这样的脚本代码fetch("example.com"),并且你已经登录到example.com网站,并且没有登出,此时如果没有CORS限制,那么恶意网页中的脚本代码就会通过服务器顺利执行,大量的你的个人信息就会被泄露。3.什么是预检要求?为了避免跨域请求对服务器数据造成不可知的影响,浏览器会使用OPTIONS方式先发送预检请求(preflightrequest),待服务器确认可访问后,再发送实际请求。下面的POST请求会先发送一个预览请求,具体的连接和信息可以在控制台的网络连接中查看。varinvocation=newXMLHttpRequest();varurl='http://bar.other/resources/post-here/';varbody='Arun';functioncallOtherDomain(){if(invocation){invocation.open('POST',url,真的);invocation.setRequestHeader('X-PINGOTHER','pingpong');invocation.setRequestHeader('Content-Type','application/xml');调用.onreadystatechange=处理程序;调用.发送(正文);}}四、如何使用CORS?CORS的工作主要是在服务器端,通过返回不同的Headers来告知请求者是否可以访问?以下两节列出了CORS使用的所有标头及其含义。1.其他使用场景CORS可以配合token来防止CSRF攻击。详情请看这里!5、客户端跨域请求跨域请求使用如下Header,无需手动设置,浏览器会自动设置。1.originpreflightrequest和实际请求中的源站名称不包含任何路径信息,仅包含服务器名称。origin:2.Access-Control-Request-Method用于预检请求,告诉服务器实际请求使用什么方法:post、get等Access-Control-Request-Method:3.Access-Control-Request-Headers用于预校验请求,告诉服务器实际请求中携带的头字段。访问控制请求标头:<字段名>[,<字段名>]*6。服务器响应跨域请求1.Access-Control-Allow-Origin用于响应preflight请求,表示允许该资源外域URI//allowallAccess-Control-Allow-Origin:*//onlyallowhttp://mozilla.comAccess-Control-Allow-Origin:http://mozilla.com2,Access-Control-Expose-Headersforself定义的Header必须在这里设置,这样客户端才能正常访问Access-Control-Expose-Headers:X-My-Custom-Header,X-Another-Custom-Header3,Access-Control-Max-Age设置预检请求的结果可以缓存多少秒?Access-Control-Max-Age:4.Access-Control-Allow-Credentials当跨域请求中设置了credentials=true,但是没有Access-Control-Allow-Credentials:true时服务器响应,则浏览器不会将服务器返回的数据发送回请求者。Access-Control-Allow-Credentials:true5,Access-Control-Allow-Methods用于响应preflight请求,表示实际请求允许的HTTP方法Access-Control-Allow-Methods:[,]*6。Access-Control-Allow-Headers用于响应预检请求,表示实际请求中允许携带的HeaderAccess-Control-Allow-Headers:[,]*7。参考文档什么是跨域资源共享(CORS)?)