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等请求方法。

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

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

相关推荐
treesforest20 小时前
平时上网留下的IP地址,到底能被查到什么?
网络·网络协议·tcp/ip·ip地址·ip查询·定位服务
多巴胺梦想家20 小时前
06 代数系统:运算背后的结构之美
网络·拓扑学
小锋学长生活大爆炸21 小时前
【福利】最新免费领取云服务器和虚拟主机攻略
网络·github
8125035331 天前
第 60 篇:IP选项:那些被遗忘的功能
网络·tcp/ip·智能路由器
IT小盘1 天前
04-大模型流式输出原理-SSE与Python实现
开发语言·网络·人工智能·python
网络研究院1 天前
2026年上半年十大网络攻击和数据泄露事件
网络·安全·漏洞·风险·数据·泄露·事件
巨量HTTP1 天前
Python爬虫动态换IP实战,彻底解决IP403封禁、限流问题(附完整代码)
爬虫·python·tcp/ip·http
我星期八休息1 天前
网络编程—UDP与TCP
linux·运维·网络·数据库·网络协议·tcp/ip·udp
玖玥拾1 天前
Unity 3D 笔记(十四)Unity/C# Socket 网络笔记3
服务器·网络·unity·c#
数智化管理手记1 天前
财务大数据怎么管住资金风险?财务大数据和财务数智化到底怎么结合?
大数据·网络·数据库·人工智能·数据挖掘