HTTP之跨域

HTTP之跨域

跨域(Cors)

Cors => 跨域资源共享


同源策略:端口、域名、协议

跨域构成的条件:

  • 端口不同
  • 协议不同
  • 域名不同

只要不同源

两种请求

简单请求

两个条件:

  1. 请求方法是:HEAD,GET,POST
  2. header中只能包含以下请求字段:
    1. Accpet
    1. Accpet-Language
    1. Conten-Language
    1. Content-Type(所指的媒体类型值仅仅限于下列三者之一)
      *
      1. text/plain
        1. multipart/form-data
        1. application/x-www-form-urlencoded
浏览器不同的处理方式

对于简单请求来说,如果请求跨域,那么浏览器会放行让请求发出。浏览器会发出cors请求,并携带origin

http 复制代码
GET/cors HTTP/1.1
Origin:http://www.baidu.com
Host:api.alice.com
Accept-Language:en-US
Connections:keep-alive
User-Agent:Mozilla/5.0
...

此时不管服务端返回的是什么,浏览器都会把返回拦截,并检查返回的responseheader中有没有Access-Control-Allow-Origin,这个头部信息的值通常为请求的Origin值,表示允许该来源的请求说明资源是共享的,可以拿到。

http 复制代码
Access-Control-Allow-Origin: http://www.baidu.com
Access-Control-Allow-Credentials: true
Access-Control-Expose-Headers: FooBar
Content-Type: text/html; charset=utf-8
Access-Control-Allow-Origin

该字段是必须的。

它的值要么是请求时Origin字段的值,要么是一个*,表示接收任意域名的请求。

如果Origin头部信息的值为*(表示允许来自任何来源的请求)但这种情况下需要谨慎使用,应为它存在安全隐患。如果没有这个头信息,说明服务端没有开启资源共享,浏览器会认为这次请求失败终止这次请求,并且报错。

Access-Control-Allow-Credentials

该字段可选。

它的值是一个布尔值,表示是否允许发送Cookie。默认情况下,Cookie不包括在CORS请求中。

设为true,即表示服务器明确许可,Cookie可以包含在请求中,一起发给服务器,这个值也只能设为true,如果服务器不需要浏览器发送Cookie,删除该字段即可。

withCredentials属性

CORS请求默认不发送Cookie和HTTP认证信息。如果要把Cookie发送到服务器,一方面要服务器同意,指定Access-Control-Allow-Credentials字段

http 复制代码
Access-Control-Allow-Credentials:true
非简单请求

只要不满足简单请求的条件,都认为是非简单请求。


先发送OPTIONS 预检请求

OPTIONS请求按照简单请求的方式处理


目的:保护客户端的安全,防止不受信任的网站利用用户的浏览器向其他网站发送恶意请求。

  • Access-Control-Request-Method:告诉服务器实际发送的HTTP请求方法。
  • Access-Control-Request-Header:告诉服务器实际请求所携带的自定义的头部信息。
http 复制代码
OPTIONS /resources/post-here/ HTTP/1.1
Host: bar.other
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
Origin: http://www.baidu.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: X-PINGOTHER, Content-Type

服务器根据以上信息决定,该请求是否被允许

服务器回应:
http 复制代码
Access-Control-Request-Method: POST
Access-Control-Request-Headers: X-PINGOTHER, Content-Type
什么时候会触发OPTIONS(预检请求)呢?
  1. 跨域的时候:Access-Control-Request-Headers:X-PINGOTHER,Content-Type
  2. 发送跨域的时候:使用PUT、DELETE、CONNECT、OPTIONS、TRACE、PATCH等请求方法。

好啦~这就是今天的新知识点【跨域】,看到这里有一点点了解了吗?

加油丫,正在进步的友友们~

相关推荐
CXDNW23 分钟前
【网络篇】计算机网络——应用层详述(笔记)
服务器·笔记·计算机网络·http·web·cdn·dns
qxqxa1 小时前
cfg80211是怎么配置无线设备的AP的?
网络·驱动开发
秋夫人2 小时前
http cache-control
网络·网络协议·http
叶北辰CHINA2 小时前
nginx反向代理,负载均衡,HTTP配置简述(说人话)
linux·运维·nginx·http·云原生·https·负载均衡
不灭锦鲤4 小时前
ssrf学习(ctfhub靶场)
网络·学习·安全
weixin_548444264 小时前
2024年最新版本神马TV8.5影视APP源码 293TV影视点播系统源码搭建教程 神马TV8.2加强版反编译教程 保姆级小白可搭建 完整版本视频教程
网络
小白学大数据4 小时前
User-Agent在WebMagic爬虫中的重要性
开发语言·爬虫·http
网络研究院6 小时前
如何安全地大规模部署 GenAI 应用程序
网络·人工智能·安全·ai·部署·观点
limengshi1383926 小时前
通信工程学习:什么是RIP路由信息协议
网络·网络协议·学习·智能路由器·信息与通信
GodK7777 小时前
HTTPS 的加密流程
网络协议·http·https