当前位置: 首页 > news >正文

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

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中Host,Referer,Origin和Access-Control-Allow-Origin

Http中Host,Referer,Origin和Access-Control-Allow-Origin 文章目录 Http中Host,Referer,Origin和Access-Control-Allow-OriginHost定义特性作用 Referer定义特性作用 Origin定义特性作用 Access-Control-Allow-Origin定义特性作用…...

UDP实现聊天室

现象&#xff1a; 源码&#xff1a; 服务器&#xff1a; #include<myhead.h>struct sockaddr_in serveraddr,caddr; enum type_t//枚举 {Login,Chat,Quit, }; typedef struct MSG {char type;//L C Qchar name[32];//char text[128];// }msg_t;typedef struct NODE//链…...

排序算法:如冒泡排序、插入排序、选择排序、快速排序、归并排序

冒泡排序&#xff08;Bubble Sort&#xff09;&#xff1a;冒泡排序是一种简单的排序算法。它通过反复交换相邻的元素&#xff0c;将最大的元素逐步“浮”到数组的末尾。基本思想是每次比较相邻的两个元素&#xff0c;如果顺序不对就进行交换&#xff0c;直到整个数组有序。时间…...

深度学习pytorch——GPU加速(持续更新)

使用 .to(device)&#xff0c;以前使用 .cuda() &#xff0c;但是现在基本不使用了。 代码示例&#xff1a; 查看电脑GPU运行情况&#xff1a; 使用Ctrl Shift ESC快捷键&#xff1a;...

StringRedisTemplate

Redis快速入门 3.2.3.StringRedisTemplate 为了节省内存空间&#xff0c;我们可以不使用JSON序列化器来处理value&#xff0c;而是统一使用String序列化器&#xff0c;要求只能存储String类型的key和value。当需要存储Java对象时&#xff0c;手动完成对象的序列化和反序列化。…...

Linux cp、mv命令显示进度条

1.advcpmv 平常使用cp 拷贝大文件时&#xff0c;看不到多久可以完成&#xff0c;虽然加上-v参数也只能看到正在拷贝文件&#xff0c;那就使用以下方法实现 git clone https://github.com/jarun/advcpmv.git cd advcpmv/ bash install.shmv ./advcp /usr/local/bin/ mv ./advmv …...

在Java中使用Apache POI保留Excel样式合并多个工作簿

背景 在日常工作中&#xff0c;我们经常需要将多个Excel文件合并成一个&#xff0c;同时保留原有的样式和格式。Apache POI是一个流行的Java库&#xff0c;用于读取和写入Microsoft Office格式的文件&#xff0c;包括Excel。然而&#xff0c;仅仅使用Apache POI的基本功能进行…...

Nomachine远程黑屏通用处理方法

Nomachine远程黑屏通用处理方法 文章目录 前言正文解决步骤 总结 前言 NoMachine是一种远程桌面软件&#xff0c;它允许用户通过互联网或局域网连接到远程计算机&#xff0c;并在本地计算机上使用远程计算机的桌面环境和应用程序。它提供了高性能的图形渲染和低延迟的响应&…...

基于51单片机数控直流电压源proteus仿真LCD显示+程序+设计报告+讲解视频

基于51单片机数控直流电压源proteus仿真LCD显示( proteus仿真程序设计报告讲解视频&#xff09; 仿真图proteus7.8及以上 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;S0072 讲解视频 基于51单片机数控直流电压源proteus仿真程序…...

[Linux]文件缓冲区

文件fd 输出重定向除了用dup2()改变数组下标外&#xff0c;还可以用命令来完成 所有的命令执行&#xff0c;都必须有操作系统将其运行起来变成进程&#xff0c;然后根据>>, <<来判断是输入重定向&#xff0c;还是输出重定向。 缓冲区 之所以有缓冲区&#xff0…...

ARM:按键中断

key_inc.c #include"key_inc.h"void key1_it_config(){//使能GPIOF外设时钟RCC->MP_AHB4ENSETR | (0x1<<5);//将PF9设置为输入模式GPIOF->MODER & (~(0x3<<18));//设置由PF9管脚产生EXTI9事件EXTI->EXTICR3 & (~(0XFF<<8));EXTI…...

JavaScript高级(五)--柯西化函数

柯里化 定义 首先&#xff0c;我们参照维基百科给出的定义&#xff1a; 在计算机科学中&#xff0c;柯里化&#xff08;英语&#xff1a;Currying&#xff09;&#xff0c;又译为卡瑞化或加里化&#xff0c;是把接受多个参数的函数变换成接受一个单一参数&#xff08;最初函数…...

带3090显卡的Linux服务器上部署SDWebui

背景 一直在研究文生图&#xff0c;之前一直是用原始模型和diffuser跑SD模型&#xff0c;近来看到不少比较博主在用 SDWebui&#xff0c;于是想着在Linux服务器上部署体验一下&#xff0c;谁知道并没有想象的那么顺利&#xff0c;还是踩了不少坑。记录一下过程&#xff0c;也许…...

37、Linux中Xsync数据同步备份工具

37、Linux中Xsync数据同步备份工具 一、介绍二、配置集群hostname三、修改xsync文件四、赋权五、安装Rsync六、验证一七、配置免密登录1、生成rsa密钥2、copy机器自身公钥到目标机器3、.ssh/文件目录赋权 八、验证二 ⚠️ 注&#xff1a;本文全程在普通用户下操作&#xff0c;…...

网络基础:构建你的数字世界之桥

I. 引言 A. 什么是网络&#xff1f; 网络是由各种电子设备通过通信线路或无线电波连接起来&#xff0c;以便彼此之间进行数据交换和资源共享的系统。在当今数字化时代&#xff0c;网络已经成为我们生活和工作中不可或缺的一部分&#xff0c;无论是互联网、局域网还是无线通信…...

Python 全栈系列236 rabbit_agent搭建

说明 通过rabbit_agent, 以接口方式实现对队列的标准操作&#xff0c;将pika包在微服务内&#xff0c;而不必在太多地方重复的去写。至少在服务端发布消息时&#xff0c;不必再去考虑这些问题。 在分布式任务的情况下&#xff0c;客户端本身会启动一个持续监听队列的客户端服…...

管理自由,体验简单,使用安全 | 详解威联通全套多用户多权限管理方案【附TS-466C产品介绍】

管理自由&#xff0c;体验简单&#xff0c;使用安全 | 详解威联通全套多用户多权限管理方案【附TS-466C产品介绍】 哈喽小伙伴们好&#xff0c;我是Stark-C~。今天我们来解决一个之前评论区多次被提及的问题--多用户权限管理。 对于我们NAS用户来说&#xff0c;基本都会面临这…...

【Redis】优惠券秒杀

全局唯一ID 全局唯一ID生成策略&#xff1a; UUIDRedis自增snowflake算法数据库自增 Redis自增ID策略&#xff1a;每天一个key&#xff0c;方便统计订单量ID构造是 时间戳 计数器 Component public class RedisIdWorker {// 2024的第一时刻private static final long BEGIN…...

【几何】平面方程

文章目录 平面方程一般式截距式点法式法线式 平面方程 平面方程是用一个方程来表示平面&#xff0c;平面上的所有点代入方程&#xff0c;方程都成立。因为用法的不同&#xff0c;平面方程一般有四种表现形式。 一般式 设 n ⃗ ( A , B , C ) \vec n(A,B,C) n (A,B,C) 为平…...

macOS访问samba文件夹的正确姿势,在哪里更改“macOS的连接身份“?还真不好找!

环境&#xff1a;路由器上需要身份认证的Mini NAS macOS Sonoma 14 这是一个非常简单的问题&#xff0c;但解决方法却藏得比较深&#xff0c;不够直观&#xff0c;GPT也没有给出明确的解决提示&#xff0c;特意记录一下。 macOS很多地方都很自动&#xff0c;有时候让人找不到设…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 iOS 26、iPadOS 26…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

uniapp 小程序 学习(一)

利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 &#xff1a;开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置&#xff0c;将微信开发者工具放入到Hbuilder中&#xff0c; 打开后出现 如下 bug 解…...

什么是VR全景技术

VR全景技术&#xff0c;全称为虚拟现实全景技术&#xff0c;是通过计算机图像模拟生成三维空间中的虚拟世界&#xff0c;使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验&#xff0c;结合图文、3D、音视频等多媒体元素…...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何&#xff0c;是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试&#xff0c;是可以跑通文章里面的代码。训练速度也是很快的。 注意…...