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://www.mzph.cn/news/761680.shtml

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

相关文章

基于微信小程序的CMS内容管理系统开发笔记

背景调研 内容管理CMS小程序的帮助运营者创建和管理小程序内容,提供一个直观的操作界面,能够轻松地添加、编辑和发布内容,而无需了解复杂的编程知识。可以进行栏目管理,文章管理,编辑文章内容,包括文字、图…

React腳手架已經創建好了,想使用Vite作為開發依賴

使用Vite作為開發依賴 安裝VITE配置VITE配置文件簡單的VITE配置項更改package.json中的scripts在根目錄中添加index.html現在可以瀏覽你的頁面了 安裝VITE 首先,在現有的React項目中安裝VITE npm install vite --save-dev || yarn add vite --dev配置VITE配置文件 …

【UE5】动画蒙太奇简述

项目资源文末百度网盘自取 动画蒙太奇基本功能 动画蒙太奇(Animation Montage) 可以将多个 动画序列(Animation Sequences) 合并为单个资产并通过蓝图播放,还可以将一个蒙太奇动画切分为多个 蒙太奇分段(M…

六大排序精解

排序概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序&#x…

安装nginx和PHP

首先规划四台虚拟机,之前的主从数据库已经两台,其余两台,一个设置nginx,一个是php 首先NGINX的概念,请参考https://blog.csdn.net/hyfsbxg/article/details/122322125。正向代理,反向代理,可以…

【每日八股】Java基础经典面试题4

前言:哈喽大家好,我是黑洞晓威,25届毕业生,正在为即将到来的秋招做准备。本篇将记录学习过程中经常出现的知识点以及自己学习薄弱的地方进行总结🥰。 本篇文章记录的Java基础面试题,如果你也在复习的话不妨…

【独立版】海之心陪诊系统-陪诊陪护小程序-V3.0

商品介绍 陪诊这个词在近两年才出现在人们的视野中,随着人口老龄化,社会信息化。我们的父母很多不会操作信息化的系统,以至于在手机上挂号和线下取号取报告比较困难,年轻人需要工作时间有限,陪诊需求因此而来。 陪诊…

Introduction to Data Mining 数据挖掘

Why Data Mining? • The Explosive Growth of Data: from terabytes to petabytes — Data collection and data availability ◦ Automated data collection tools, database systems, Web, computerized society — Major sources of abundant data ◦ Business: Web, e-co…

vue3 + ts +element-plus + vue-router + scss + axios搭建项目

本地环境: node版本:20.10.0 目录 一、搭建环境 二、创建项目 三、修改页面 四、封装路由vue-router 五、element-plus 六、安装scss 七、封装axios 一、搭建环境 1、安装vue脚手架 npm i -g vue/cli 2、查看脚手架版本 vue -V3、切换路径到需…

flask+ flask_socketio HTTP/1.1“ 400 公网IP 问题解决方案

很经典的一个跨域问题 在服务端改成socketio SocketIO(app, cors_allowed_origins"*")就可以了

数据可视化-ECharts Html项目实战(4)

在之前的文章中,我们学习了如何创建圆环图、嵌套圆环图、蓝丁格尔玫瑰图。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 数据可视化-ECharts Htm…

四、C语言中的数组:如何输入与输出二维数组(数组,完)

本章的学习内容如下 四、C语言中的数组:数组的创建与初始化四、C语言中的数组:数组的输入与元素个数C语言—第6次作业—十道代码题掌握一维数组四、C语言中的数组:二维数组 1.二维数组的输入与输出 当我们输入一维数组时需要一个循环来遍历…

uniApp中使用小程序XR-Frame创建3D场景(1)环境搭建

1.XR-Frame简介 XR-Frame作为微信小程序官方推出的3D框架,是目前所有小程序平台中3D效果最好的一个,由于其本身针对微信小程序做了优化,在性能方面比其他第三方库都要高很多。 2.与Three.js的区别 做3D小程序的同学们对Three.js一定不陌生…

huggingface_hub

文章目录 一、关于 huggingface_hub二、安装三、快速入门指南1、下载文件1.1 下载单个文件 hf_hub_download1.2 下载整个库 snapshot_download 2、登录3、创建一个存储库 create_repo4、上传文件4.1 上传单个文件 upload_file4.2 上传整个存储库 upload_folder 四、集成到 Hub …

图论06-飞地的数量(Java)

6.飞地的数量 题目描述 给你一个大小为 m x n 的二进制矩阵 grid ,其中 0 表示一个海洋单元格、1 表示一个陆地单元格。 一次 移动 是指从一个陆地单元格走到另一个相邻(上、下、左、右)的陆地单元格或跨过 grid 的边界。 返回网格中 无法…

【PyCaret】使用PyCaret创建机器学习Pipeline进行多分类任务

发现一个好东西,PyCaret机器学习Pipeline,记录一下用其进行多分类任务的使用方法。 1、简介 PyCaret是一个开源的、不用写很多代码的Python机器学习库,可以自动化机器学习工作流程,是一个端到端的机器学习和模型管理工具&#xff…

登录与注册功能(简单版)(3)登录时使用Cookie增加记住我功能

目录 1、实现分析 2、步骤 1)新建login.jsp 2)修改LoginServlet: 3)启动访问: 3、安全性考虑 4、最佳实践思路 1)选择安全的认证机制 2)强化会话管理 3)安全地存储用户凭证…

Unity 粒子在UI中使用时需要注意的地方

最近项目中要在UI中挂载粒子特效,美术给过来的粒子直接放到UI中会有一些问题,查询一些资料后,总结了一下 一: 粒子的大小发生变化,与在预制件编辑中设计的大小不同 在预制件编辑模式下,大小正常 实际使用的时候特别大或者特别小 经过检查,发现预制件编辑模式下,默认画布的Rend…

上位机图像处理和嵌入式模块部署(qmacvisual点线测量)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 上面一篇文章,我们完成了直线的拟合操作。在实际场景中,拟合之后更多地是需要进行长度的测量。既然是测量,那么…

【JavaScript 漫游】【040】Blob 对象

文章简介 本篇文章为【JavaScript 漫游】专栏的第 040 篇文章,对浏览器模型中的 Blob 对象进行了总结。 概述 Blob 对象表示一个二进制文件的数据内容,比如一个图片文件的内容就可以通过 Blob 对象读写。它通常用来读写文件,它的名字是 Bi…