Http中Host,Referer,Origin和Access-Control-Allow-Origin

news2024/9/30 13:14:56

Http中Host,Referer,Origin和Access-Control-Allow-Origin

文章目录

  • Http中Host,Referer,Origin和Access-Control-Allow-Origin
    • Host
      • 定义
      • 特性
      • 作用
    • Referer
      • 定义
      • 特性
      • 作用
    • Origin
      • 定义
      • 特性
      • 作用
    • Access-Control-Allow-Origin
      • 定义
      • 特性
      • 作用
    • 实际测试

Host

定义

描述请求将被发送的目的地,包括且仅仅包括域名和端口号。 HTTP/1.1 的所有请求报文中必须包含一个Host头字段,且只能设置一个。

特性

  1. 请求要发送的目的地(请求地址的域名)
  2. 仅包括域名和端口
  3. 请求头必须包含此字段
  4. 可以是域名也可以是ip
  5. 程序可以自定义Host参数

作用

  1. 一个域名只对应一个ip地址,而一个ip地址可以对应多个域名。
  2. 不通域名解析到同一台服务器时,服务器根据Host的不同,提供不同的服务(同一台服务器部署多个网站),可以同时使用80/443端口。

image-20240320101616892

Referer

定义

在HTTP协议中,Referer 是一个请求头(Request Header),它包含了当前请求页面的完整URL,即用户是从哪个页面链接到当前页面的。这个头部字段主要用于服务器端记录访问来源,分析用户行为,以及防止CSRF(跨站请求伪造)攻击。
Referer 字段对于网站运营者来说是一个非常有用的工具,因为它可以帮助网站分析用户的行为模式,了解用户是如何找到并浏览网站的。例如,如果一家在线商店发现很多用户都是从特定博客文章链接过来的,那么他们可能会考虑与该博客作者建立合作关系,或者优化自己的营销策略。
但是,Referer 也引发了一些隐私问题,因为它可能会将用户的浏览历史泄露给其他服务器。为了解决这个问题,现代浏览器提供了隐私设置,允许用户控制何时发送Referer信息。

特性

  1. 发送请求的原URI,例如A发送至B,B代理转发至C,则C收到的Referer信息是A的URI

  2. 用于所有类型的请求,并且包括协议、域名、路径和查询参数。

  3. 在以下几种情况Referer不会被发送

    1)来源页面采用的协议为表示本地文件的 "file" 或者 "data" URI;
    2)当前请求页面采用的是非安全协议,而来源页面采用的是安全协议(HTTPS);
    3)直接输入网址或通过浏览器书签访问;
    4)使用 JavaScript 的 Location.href 或者是 Location.replace();
    5)使用html5中noreferrer;
    6)使用iframe的hack写法去除referer。
    

作用

  1. 追踪来源,对于web服务器来说,Referer 可以帮助网站管理员追踪用户是如何到达当前页面的
  2. 防盗链,网站可以通过检查Referer来防止其他网站直接链接到它们的资源,这被称为“防盗链”。如果Referer不是来自允许的来源,服务器可以拒绝提供服务。
  3. 统计分析,网站分析工具使用Referer信息来生成报告,显示访问者来自哪些网站或搜索引擎,以及他们使用了哪些关键词进行搜索。

Origin

定义

在解释Origin前,先了解下浏览器的同源策略:同源策略(Same-Origin Policy,SOP)是浏览器实施的一种安全措施,它限制了一个源(域、协议和端口)的文档或脚本如何与另一个源的资源进行交互。这个策略可以防止恶意网站读取另一个网站的数据、防止恶意脚本向另一个域发送数据,从而保护用户的信息安全。

Origin翻译成中文是起源的意思,在HTTP协议中,Origin头部字段是一个请求头(Request Header),它用于指示请求的来源域。Origin头是在同源策略(Same-Origin Policy)的背景下引入的,特别是在跨源请求(CORS,Cross-Origin Resource Sharing)中使用。

Origin头的引入是为了提供一种更精细的控制机制,以替代旧的Referer头,后者可能会暴露过多的用户信息。通过使用Origin头(只包含协议、域名和端口号,不包含路径和参数),网站可以在保护用户隐私的同时,实现跨源资源的有限共享。

特性

  1. HTTP 头部的 Origin ,用于指明当前请求来自于哪个站点
  2. Origin 仅仅包含站点信息(协议、域名和端口号),不包含任何路径和参数信息
  3. 当一个浏览器发起一个跨源请求时,它会自动在请求头中添加一个Origin字段
  4. 非跨域请求,浏览器发起复杂请求前,会发送预检请求(使用HTTP OPTIONS方法发送),发送该请求时会携带Origin信息

作用

  1. Origin头的引入是为了提供一种更精细的控制机制,以替代旧的Referer头,后者可能会暴露过多的用户信息
  2. Origin字段的作用是为了在CORS(跨源资源共享)请求中提供来源信息
  3. 安全性:服务器可以根据Origin头的值决定是否发送相应的CORS响应头,如Access-Control-Allow-Origin,以此来控制哪些源可以访问其资源
  4. 隐私保护:与Referer头不同,Origin头不会暴露完整的引用路径,只提供源的概要信息,这有助于保护用户的隐私
  5. 凭证传输:当跨源请求包含凭证(如cookies)时,Origin头是必要的。服务器需要这个信息来决定是否接受这些凭证。如果服务器响应中包含了Access-Control-Allow-Origin头,并且它的值与请求的Origin匹配,或者是一个通配符*,那么浏览器才会允许跨源请求携带凭证
  6. Origin头是CORS机制中的一个关键组成部分,它允许开发者在控制跨源请求的同时,保持用户数据的安全和隐私。

image-20240320113055596

Access-Control-Allow-Origin

定义

Access-Control-Allow-Origin 是一个HTTP响应头,它是CORS(跨源资源共享)机制中的一个关键组成部分。这个头部字段指定了哪些源(域、协议和端口)可以访问资源。它是服务器用来告诉浏览器允许跨域请求的标识。

特性

  1. 当发生跨域求情时该字段才会起作用,没有发生跨域时没有关键意义
  2. 它是服务器用来告诉浏览器,那些Origin允许跨域请求
  3. 具体的源,例如,Access-Control-Allow-Origin: https://example.com,这表示只有来自https://example.com的请求被允许跨域访问资源。
  4. 星号(*):例如,Access-Control-Allow-Origin: *,这表示任何源都可以访问资源,即允许所有跨域请求。
  5. null:例如,Access-Control-Allow-Origin: null,这表示没有源被允许访问资源,通常用于拒绝跨域请求。

作用

浏览器预检请求(Preflight Request)是跨源资源共享(CORS)机制中的一部分,它是一种在发送实际请求之前,由浏览器自动发起的HTTP请求,用于确定实际请求是否安全可以发送。
预检请求主要是为了检查服务器是否允许以下类型的实际请求:

  1. 不同寻常的请求方法:除了GET、POST、HEAD之外的HTTP方法,如PUT、DELETE、PATCH等。
  2. 自定义头部字段:请求中包含了一些自定义的头部字段,而不是标准的HTTP头部字段。
  3. 特定内容的请求:比如请求的Content-Type头部字段的值是application/json或者其他一些特定的值。
  4. 携带凭证的请求:如果请求包含了凭证(如cookies、HTTP认证信息等),则可能需要预检请求。
    预检请求使用HTTP OPTIONS方法发送,它包含以下头部字段:
  • Origin:发起请求的源(协议+域名+端口)。
  • Access-Control-Request-Method:实际请求将使用的方法(如PUT)。
  • Access-Control-Request-Headers:(如果有的话)实际请求将包含的自定义头部字段。
    服务器收到预检请求后,会根据CORS策略决定是否允许该跨源请求。如果服务器允许请求,它会响应一个包含CORS相关头部字段的HTTP响应:
  • Access-Control-Allow-Origin:指示哪些源可以访问资源。
  • Access-Control-Allow-Methods:允许的HTTP方法。
  • Access-Control-Allow-Headers:允许的自定义头部字段。
  • Access-Control-Allow-Credentials:指示是否允许请求携带凭证(token,cookie)。
  • Access-Control-Max-Age:预检请求结果的有效时间(秒),在此期间,相同的请求不需要再次发送预检请求。
    如果预检请求的响应是允许的,浏览器随后会发送实际请求。如果预检请求被拒绝,浏览器将不会发送实际请求,并且会触发一个错误,开发者可以通过JavaScript的XMLHttpRequestFetch API捕获这个错误。

image-20240320113141251

实际测试

  1. 当前网站域http://192.168.1.111:1888,请求接口域http://192.168.1.111
  2. 二者端口号不同,浏览器判断为跨域请求
  3. 浏览器发起预请求(options请求),咨询服务器端是否允许跨域请求
  4. 服务端判断对比uri和origin不同,则判定为跨域请求,于是添加Access-Control-Allow-Origin请求头值为http://114.94.20.15:9001
  5. 浏览器收到服务端返回的【Access-Control-Allow-Origin:http://114.94.20.15:9001】,意思是服务器只允许从【http://114.94.20.15:9001】站点发出的跨域请求,但是浏览器发出的站点是http://192.168.1.111:1888(就是浏览器发送options的请求所携带的Origin头),于是浏览器拒绝此次跨域请求

image-20240320191356218

服务端添加跨区相关的返回头

image-20240320193252229

服务端判断为跨域请求

image-20240320193531824

浏览器拒绝此次跨域请求

image-20240320194532498

修改后端Access-Control-Allow-Origin属性值为,http://192.168.1.111:1888即与origin一致,则浏览器允许此次跨域请求

image-20240320195616428

【Access-Control-Allow-Headers】属性,当跨域时允许跨域请求所携带的请求头

image-20240320200139926
一致,则浏览器允许此次跨域请求

image-20240320195616428

【Access-Control-Allow-Headers】属性,当跨域时允许跨域请求所携带的请求头

image-20240320200139926

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1540753.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

登录与注册功能(简单版)(4)注册时使用Session校验图片验证码

目录 1、需求及实现流程分析 2、实现 1)新建register.jsp 2)导入CheckCodeUtil工具类 3)新建CheckCodeServlet 4)修改RegisterServlet 5)启动访问 1、需求及实现流程分析 验证码的作用:防止机器自动…

Maven,pom.xml,查找 子jar包

在IDEA打开pom.xml&#xff0c;会看到这里&#xff1a; 然后如果有需要&#xff0c;把相关的 子jar包 去掉 <dependency><groupId>XXX</groupId><artifactId>XXX</artifactId><exclusions><exclusion><artifactId>xxx</a…

[java基础揉碎]代码块

目录 基本介绍: 基本语法: 代码块的好处: 1)相当于另外一种形式的构造器(对构造器的补充机制)&#xff0c;可以做初始化的操作 2)场景:如果多个构造器中都有重复的语句&#xff0c;可以抽取到初始化块中&#xff0c;提高代码的重用性 如下: 代码块的注意事项和使用细节: …

详细安装步骤:vue.js 三种方式安装(vue-cli)

Vue.js&#xff08;读音 /vjuː/, 类似于 view&#xff09;是一个构建数据驱动的 web 界面的渐进式框架。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。它不仅易于上手&#xff0c;还便于与第三方库或既有项目整合。 三种 Vue.js 的安装方法&…

探索设计模式的魅力:精准、快速、便捷:游标尺模式在软件设计中的三大优势

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;并且坚持默默的做事。 精准、快速、便捷&#xff1a;游标尺模式在软件设计中的三大优势 文章目录 一、案例场景&…

化工企业能源在线监测管理系统,智能节能助力生产

化工企业能源消耗量极大&#xff0c;其节能的空间也相对较大&#xff0c;所以需要控制能耗强度&#xff0c;保持更高的能源利用率。 化工企业能源消耗现状 1、能源管理方面 计量能源消耗时&#xff0c;计量器具存在问题&#xff0c;未能对能耗情况实施完全计量&#xff0c;有…

【电气安全】ASCP电气防火限流式保护器/末端回路线路保护

为什么要使用电气防火限流式保护器&#xff1f; 应急管理部消防救援局统计&#xff0c;在造成电气火灾事故的原因中&#xff0c;最为主要的当为末端线路短路&#xff0c;在电气火灾事故中占比高达70%以上。如何效预防末端线路短路引发的电气火灾事故&#xff1f; 现阶段最为常…

逆向爬虫技术的进阶应用与实战技巧

前言 在互联网的海洋中&#xff0c;数据是无价的财富。爬虫技术作为获取这些数据的重要手段&#xff0c;一直备受关注。然而&#xff0c;随着网站反爬虫机制的日益完善&#xff0c;简单的爬虫程序已经很难满足我们的需求。因此&#xff0c;掌握爬虫逆向技术&#xff0c;突破反爬…

【C语言】编译链接

1、宏&#xff08;***&#xff09; 1.1#define定义宏 #define 机制包括了一个规定&#xff0c;允许把参数替换到文本中&#xff0c;这种实现通常称为宏&#xff08;macro&#xff09;或定义 宏&#xff08;define macro&#xff09;。 注意&#xff1a;用于对数值表达式进行求…

React中 类组件 与 函数组件 的区别

类组件 与 函数组件 的区别 1. 类组件2. 函数组件HookuseStateuseEffectuseCallbackuseMemouseContextuseRef 3. 函数组件与类组件的区别3.1 表面差异3.2 最大不同原因 1. 类组件 在React中&#xff0c;类组件就是基于ES6语法&#xff0c;通过继承 React.component 得到的组件…

Linux相关命令(2)

1、W &#xff1a;主要是查看当前登录的用户 在上面这个截图里面呢&#xff0c; 第一列 user &#xff0c;代表登录的用户&#xff0c; 第二列&#xff0c; tty 代表用户登录的终端号&#xff0c;因为在 linux 中并不是只有一个终端的&#xff0c; pts/2 代表是图形界面的第…

01-DBA自学课-安装部署MySQL

一、安装包下载 1&#xff0c;登录官网 MySQL :: MySQL Downloads 2&#xff0c;点击社区版下载 3&#xff0c;找到社区服务版 4&#xff0c;点击“档案”Archives 就是找到历史版本&#xff1b; 5&#xff0c;选择版本进行下载 本次学习&#xff0c;我们使用MySQL-8.0.26版本…

Redis入门到实战-第五弹

Redis实战热身Hashes篇 完整命令参考官网 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://redis.io/Redis概述 Redis是一个开源的&#xff08;采用BSD许可证&#xff09;&#xff0c;用作数据库、缓存、消息代理和…

【Delphi JCL库文件解剖 1】库文件的大体脉络

JCL库是一个开源的Delphi库文件,下载到它很容易,可是想能灵活运用它却并不容易。下面是这个库文件的大体文件脉络,咱们要分析的核心还是在 source 源代码文件。 bin - 示例应用程序可执行文件的常见位置 docs - 读…

qt 实现 轮播图效果,且还有 手动 上一页和下一页 已解决

QT中有 轮播图的需求&#xff0c;按照正常html版本 。只需要配置数组就能搞定&#xff0c;但是c qt版本 应该用什么了。 第一想到的是采用定时器。 // 定时器初始化{m_pTime new QTimer(this);m_pTime->start(4 * 1000);//启动定时器并设置播放时间间隔m_pAutoFlag true;/…

001 高并发内存池_项目简介

​&#x1f308;个人主页&#xff1a;Fan_558 &#x1f525; 系列专栏&#xff1a;高并发内存池 &#x1f339;关注我&#x1f4aa;&#x1f3fb;带你学更多知识 文章目录 前言一、项目简介二、所需知识储备与难度三、什么是内存池四、内存池主要解决的问题 小结 前言 话不多…

MySQL中的数据备份

1. 逻辑备份 备份的是建表、建库、插入等操作所执行SQL语句&#xff0c;适用于中小型数据库&#xff0c;效率相对较低。 本质&#xff1a;导出的是SQL语句文件 优点&#xff1a;不论是什么存储引擎&#xff0c;都可以用mysqldump备成SQL语句 缺点&#xff1a;速度较慢&…

centos7 linux下yum安装redis

安装redis 检查是否有redis yum 源 yum install redis下载fedora的epel仓库 yum install epel-release安装redis数据库 yum install redis安装完毕后&#xff0c;使用下面的命令启动redis服务 # 启动redis service redis start# 停止redis service redis stop# 查看redis运…

隐私计算实训营学习三:隐私计算框架的架构和技术要点

文章目录 一、隐语架构二、产品层三、算法层3.1 PSI与PIR3.2 Data Analysis-SCQL3.3 Federated Learning 四、计算层4.1 混合调度编译-RayFed4.2 密态引擎4.3 密码原语YACL 五、资源管理层六、互联互通七、跨域管控 一、隐语架构 1、完备性&#xff1a;支持多种技术&#xff0…

谷粒商城 - 前端基础

1.前端技术栈 2.ES6 2.1简介 2.2 let 与 const <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Doc…