日常笔记记录

news2024/10/28 18:17:14

1、Http

1.1 概念

HTTP 是 HyperText Transfer Protocol(超文本传输协议)的简写,它是 TCP/IP 协议集中的一个应用层协议,是客户端与服务端进行交互时必须遵循的规则。它用于定义 Web 浏览器与 Web 服务器之间交换数据的过程以及数据本身的格式,底层是靠 TCP 进行可靠地信息传输。

1.2 URL

URL(统一资源定位符)是 Uniform Resource Locator 的缩写。它用来找到资源所在的位置,并且去访问和得到资源

URL格式:

http://122.225.198.118:5000/api/ERPWeb/DocumentFlow/GetByPage?page_index=1&page_size=15&state=2&server_id=60.191.59.11
http://www.pycxbus.cn/service.aspx
https://a1.easemob.com/1101221025110065/demo/chatgroups
  • http:协议。比如,https、ftp 等协议。
  • 122.225.198.118:服务器地址(IP,域名)
  • 5000:服务端口
  • /api/ERPWeb/DocumentFlow/GetByPage:资源路径(接口路径)
  • page_index=1:参数

1.3 Http报文格式

请求端(客户端)的 HTTP 报文叫做请求报文,响应端(服务器端)的叫做响应报文。

  • 请求报文
    请求报文是由请求方法、请求 URL、协议版本、可选的请求首部字段和内容实体构成的。

    image

    image

  • 响应报文
    响应报文基本上由协议版本、状态码(表示请求成功或失败的数字代码)、用以解释状态码的原因短语、可选的响应首部字段以及实体主体构成。

1.4 Http方法

  • Get 请求资源(一般用于查询)
    参数放在url后,格式?key1=value1&key2=value2

    get方法提交的数据大小长度并没有限制,Http协议规范没有对URL长度进行限制,目前说的get长度有限制,是特定的浏览器及服务器对它的限制。

    浏览器:
    
    IE:对URL的最大限制为2083个字符,若超出这个数字,提交按钮没有任何反应。
    
    Firefox:对Firefox浏览器URL的长度限制为:65536个字符。
    
    Safari:URL最大长度限制为80000个字符。
    
    Opera:URL最大长度限制为190000个字符。
    
    Google(chrome):URL最大长度限制为8182个字符。
    
    服务器:
    
    Apache:能接受的最大url长度为8192个字符
    
    IIS:能接受最大url的长度为16384个字符。
    
    Nginx:可以通过修改配置来改变长度限制。
    client_header_buffer_size 默认值:client_header_buffer_size 1k
    large_client_header_buffers默认值 :large_client_header_buffers 4 4k/8k
    
    
  • Post 传输实体主体(一般用于新增编辑)

    content-type是http请求的响应头和请求头的字段。当作为响应头时,告诉客户端实际返回的内容的内容类型。作为请求头时(post或者put),客户端告诉服务器实际发送的数据类型。

    在前端开发过程中,通常需要跟后端工程师对接接口的数据格式,不同的数据类型对于服务器来说有不同的处理方式,因此我们需要关注不同的conten-type类型

    • application/x-www-form-urlencoded
      代表项目调度系统,浏览器原生form表单默认的提交方式(在不设置enctype的情况下)。此时请求头的格式如下:

      content-type: application/x-www-form-urlencoded;charset=utf-8
      form-data: key1=val1&key2=val2
      

      此时后端获取参数值方法

      framework
      Request["key1"]
      
      netcore
      [HttpPost]
      public void Test([FromForm] FlowRecordQuery query)
      

      此种情况下:非字母或数字的字符会被进行编码(编码方式percent-encoding百分比编码),这种方式不支持二进制数据。

    • multipart/form-data
      用于文件上传接口,与application/x-www-form-urlencoded的区别是支持文件的传输,并且它的传输数据放在request-payload里,并且以bounday进行分隔。

      POST /test.html HTTP/1.1 
      Host: example.org 
      Content-Type: multipart/form-data;boundary="boundary" 
      
      --boundary 
      Content-Disposition: form-data; name="field1" 
      
      value1 
      --boundary 
      Content-Disposition: form-data; name="field2"; filename="example.txt" 
      
      value2
      

      此时后端获取参数值方法

      framework
      Request.Files["file"]
      
      netcore
      和application/x-www-form-urlencoded一致
      
    • application/json

      POST http://www.example.com HTTP/1.1 
      Content-Type: application/json;charset=utf-8
      
      {"title":"test","sub":[1,2,3]}
      

      它用来告诉服务端消息主体是序列化后的JSON字符串,其中一个好处就是JSON 格式支持比键值对复杂得多的结构化数据。

      此时后端获取参数值方法

      framework
      Request.Files["file"]
      
      netcore
      public void Test(FlowRecordQuery query)
      

1.5 Http访问控制(CORS跨域资源共享)

  • 跨域:指不同域名之间相互访问,浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全机制。

  • 同域:指同一协议、同一 ip 地址、同一端口,其中有一个不同就会产生跨域。

image

解决办法:

//请求跨域处理,配置IP白名单
services.AddCors(options =>
    options.AddPolicy("ALL", p =>
        p.WithOrigins(
                Configuration.GetSection("AppSetting:CorsOrigins").Value
            .Split(",", StringSplitOptions.RemoveEmptyEntries)
            .ToArray())
        .AllowAnyHeader()
        .AllowAnyMethod()
        .AllowCredentials())
);

//文件跨域处理
app.UseStaticFiles(new StaticFileOptions
{
    //指定实际物理路径
    FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), "文件目录")),
    OnPrepareResponse = (c) =>
    {
        c.Context.Response.Headers.Add("Access-Control-Allow-Origin", "*");
    },
    //设置URL请求的文件路径
    RequestPath = new PathString("/images")
});

IIS跨域处理

Access-Control-Allow-Headers:Content-Type
Access-Control-Allow-Methods:GET,POST,PUT,DELETE,OPTIONS
Access-Control-Allow-Origin:*

[外链图片转存中…(img-PuUcIudA-1668680914968)]

[外链图片转存中…(img-7ckzdP7x-1668680914969)]

1.6 Http状态码(不是业务状态码)

  • 2** 处理成功响应类
    200:处理成功
    204:处理成功但没有任何返回
  • 4** 客户端错误
    401:未授权(没有加Token或者Token过期)
    403:禁止的动作(没有权限,比如用户没有新增权限,调用新增接口)
    404:资源路径找不到(请求路径不对,注意中英文、空格等)
    405:请求方法不正确(Get接口使用Post请求)
  • 5** 服务端错误
    500:服务器内部错误(服务挂掉、服务运行异常)
    503:服务不可用(IIS应用程序池没有开启)

2、抓包

image

3、Https

大家可能都听说过 HTTPS 协议之所以是安全的是因为 HTTPS 协议会对传输的数据进行加密,而加密过程是使用了非对称加密实现。但其实,HTTPS 在内容传输的加密上使用的是对称加密,非对称加密只作用在证书验证阶段。

HTTPS的整体过程分为证书验证和数据传输阶段,具体的交互过程如下:
image

为什么需要加密?

因为http的内容是明文传输的,明文数据会经过中间代理服务器、路由器、wifi热点、通信服务运营商等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了。劫持者还可以篡改传输的信息且不被双方察觉,这就是中间人攻击。所以我们才需要对信息进行加密。最容易理解的就是对称加密 。

为什么需要CA认证机构颁发证书?

HTTP 协议被认为不安全是因为传输过程容易被监听者勾线监听、伪造服务器,而 HTTPS 协议主要解决的便是网络传输的安全性问题。
首先我们假设不存在认证机构,任何人都可以制作证书,这带来的安全风险便是经典的**“中间人攻击”**问题。

浏览器是如何确保 CA 证书的合法性?

证书包含颁发机构信息、公钥公司信息、域名、有效期、指纹
首先,权威机构是要有认证的,不是随便一个机构都有资格颁发证书,不然也不叫做权威机构。证书分为免费的、收费。免费阿里云有效期1年

浏览器验证证书的合法性:
验证域名、有效期等信息是否正确。证书上都有包含这些信息,比较容易完成验证;
判断证书来源是否合法。每份签发证书都可以根据验证链查找到对应的根证书,操作系统、浏览器会在本地存储权威机构的根证书,利用本地根证书可以对对应机构签发证书完成来源验证;
image

目前项目涉及到微信公众号、小程序项目都需要Https访问

4、Nginx反向代理和负载均衡

1.反向代理:简单来说就是真实的服务器不能直接被外部网络访问,所以需要一台代理服务器,而代理服务器能被外部网络访问的同时又跟真实服务器在同一个网络环境,当然也可能是同一台服务器,端口不同而已(嘉兴公交)。
Http配置

http {
    include       mime.types;
    default_type  application/octet-stream;
    
    server_tokens off;
    add_header X-Frame-Options DENY;
    add_header X-XSS-Protection  "1; mode=block";
    add_header X-Content-Type-Options nosniff;

    sendfile        on;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       8000;
        server_name  127.0.0.1;

        index index.html;
         
        location / {
			proxy_pass http://192.168.3.191:8000;
        }
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    
    server {
        listen       8001;
        server_name  127.0.0.1;

        index index.html;
         
        location / {
			proxy_pass http://192.168.3.192:8001;
        }
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    
    server {
        listen       8001;
        server_name  127.0.0.1;

        index index.html;
         
        location /test {
			proxy_pass http://192.168.3.193:8001;
        }
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

TCP/UDP配置

stream {
    server {
       listen 7001;
       proxy_connect_timeout 10s;
       proxy_timeout 360s;
       proxy_pass 192.168.3.191:7003;
    }
    
    server {
       listen 7001 udp;
       proxy_connect_timeout 10s;
       proxy_timeout 360s;
       proxy_pass 192.168.3.191:7003;
    }
}

2.单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,由反向代理服务器将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡

负载均衡配置

upstream test {  
    server 192.168.3.191:8081;  
    server 192.168.3.192:8081;  
}  
server {  
    listen       8081;                                                        
    server_name  127.0.0.1;                                                 
    client_max_body_size 1024M;  
  
    location / {  
        proxy_pass http://test;  
        proxy_set_header Host $host:$server_port;  
    }  
}  

负载均衡策略

  • 轮询(默认)
    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

    upstream test {  
        server 192.168.3.191:8081;  
        server 192.168.3.192:8081;  
    } 
    
  • 指定权重
    指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
    权重越高,在被访问的概率越大,如下例,分别是30%,70%。

    upstream test {
        server 192.168.3.191:8081 weight=3;
        server 192.168.3.192:8081 weight=7;
    }
    
  • ip_hash
    在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。

    我们可以采用ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。

    每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

    upstream test {
        ip_hash;
        ...  
    } 
    
  • fair
    按后端服务器的响应时间来分配请求,响应时间短的优先分配。

  • url_hash
    按访问url的hash结果来分配请求,使每个url定向到同一个(对应的)后端服务器,后端服务器为缓存时比较有效。

最终总结

upstream test{ 
    ip_hash; 
    server 127.0.0.1:9090 down; (down 表示单前的server暂时不参与负载) 
    server 127.0.0.1:8080 weight=2; (weight 默认为1.weight越大,负载的权重就越大) 
    server 127.0.0.1:6060; 
    server 127.0.0.1:7070 backup; (其它所有的非backup机器down或者忙的时候,请求backup机器) 
} 

5、IIS部署服务

1、安装.NetSDK和Hosting Bundle

image

2、添加网站,选择端口号和资源路径

image

3、设置应用程序池

image

6、常见问题

  • IP地址

    • 0.0.0.0
      用于表示一个无效的,未知的或者不可用的目标
      用作服务端,表示本机上的任意IPV4地址
    • 127.0.0.1
      回环地址,本机地址。用于本机测试
    • 192.168.*.*
      局域网地址,路由器分配
    • loaclhost
      大多数电脑指向 127.0.0.1这个IP地址。在操作系统支持ipv6后,它同时还指向 ipv6 的地址 [::1]
      不是一个IP地址,而是一个域名
  • 前后端开发阶段测试联调?
    局域网内或者同一WiFi下
    1、以0.0.0.0或者本机局域网IP启动服务
    2、电脑关掉防火墙
    3、需要开通端口映射(需要公网访问)
    image
    家里开通公网端口(公网IP一直变化)
    1、让运营商宽带改为桥接模式
    2、使用宽带账号密码方式上网
    3、开启动态域名服务,Tplink路由器提供域名,华为路由器支持花生壳域名
    image
    4、注册花生壳账号,开启域名管理或者内网穿透
    image

  • 域名
    域名简单来说就是一串由英文字符组成的IP地址。通过域名,我们可以很轻松的访问网站。在没有域名的情况下,我们如果需要访问网站的话,则需要输入很复杂的IP地址,如果有了域名,我们只需要记住它的域名即可以进行访问。

  • DNS:进行域名解析,
    一般使用8.8.8.8(Google公司),114.114.114.114
    host文件地址:C:\Windows\System32\drivers\etc

  • 接口参数规范
    下拉框:对象(大多是数值、字符串)
    下拉框多选:数组
    日期:yyyy-MM-dd
    日期时间:yyyy-MM-dd HH:mm:ss
    日期时间范围查询:分为开始时间和结束时间范围查询,
    假如年月范围查询yyyy-MM-01和yyyy-MM-30 23:59:59
    假如时分范围查询yyyy-MM-dd HH:mm:00,必须保证时间格式一致

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

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

相关文章

【Docker】在AlmaLinux 8.10系统中安装Docker-ce过程分享

随着2024年6月30日,官方停止了对CentOS 7的维护,属于CentOS 7的时代终于结束了。当然,对于CentOS 7的维护停止,大家也不用过度紧张,目前仍有部分Linux版本可以提供企业级的生产可用系统服务,比如&#xff1…

Python记录-字典

定义 Python 中的字典(dictionary)是一种内置的数据结构,用于存储键值对(key-value pairs)。字典中的每个键(key)都是唯一的,并且与一个值(value)相关联。键…

vue3学习(二)一款优秀的编辑器

开源项目: https://github.com/Leecason/element-tiptap doc需要改成document,改完之后依然有问题,应该是对vue3兼容不好, 所以在issue中有人回复使用 https://github.com/okijhhyu/element-tiptap-vue3 经过测试,确实…

shiro会话管理和加密

Shiro 会话管理和加密 会话管理 缓存 加密 会话管理 Shiro提供了完整的企业级会话管理功能,不依赖于底层容器(如Tomcat),不管是J2SE还是J2EE环境都可以使用,提供了会话管理,会话事件监听,会话存…

【自动化测试之oracle数据库】MacOs如何安装oracle- client

操作系统为Mac OS,本地在pycharm上跑自动化脚本时,因为有操作oracle数据库的部分,所以需要安装oracle数据库的客户端,并install cx_oracle,本文主要介绍如何在macOS上完成安装,并在python自动化测试代码中配置&#xf…

vue3项目中引入阿里图标库

开篇 本篇的主题是在vue3项目中引入阿里图标库 步骤 注册阿里图标库账号(阿里图标),并创建项目 将图标加入项目中 将需要的图标先加入购物车,随后加入到项目中 生成项目代码 在项目中生成项目代码,便于后续复制到vue项目中 ## 在vue3项目…

信息安全入门——网络安全威胁

目录 前言网络安全威胁概览悄无声息的数据泄露——被动攻击明目张胆的破坏行为——主动攻击网路世界的瘟疫——病毒总结 前言 在数字化时代,信息安全成为了我们每个人都不得不面对的重要议题。网络安全威胁无处不在,它们可能来自网络的暗角,…

MySQL 9从入门到性能优化-慢查询日志

【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客 《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…

【51单片机】第一个小程序 —— 点亮LED灯

学习使用的开发板:STC89C52RC/LE52RC 编程软件:Keil5 烧录软件:stc-isp 开发板实图: 文章目录 单片机介绍LED灯介绍练习创建第一个项目点亮LED灯LED周期闪烁 单片机介绍 单片机,英文Micro Controller Unit&#xff0…

信息安全工程师(68)可信计算技术与应用

前言 可信计算技术是一种计算机安全体系结构,旨在提高计算机系统在面临各种攻击和威胁时的安全性和保密性。 一、可信计算技术的定义与原理 可信计算技术通过包括硬件加密、受限访问以及计算机系统本身的完整性验证等技术手段,确保计算机系统在各种攻击和…

力扣hot100-->递归/回溯

递归/回溯 1. 17. 电话号码的字母组合 中等 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输入&…

c语言中整数在内存中的存储

整数的二进制表示有三种:原码,反码,补码 有符号的整数,三种表示方法均有符号位和数值位两部分,符号位都是用‘0’表示“正,用1表示‘负’ 最高位的以为被当作符号位,剩余的都是数值位。 整数…

智慧旅游微信小程序平台

作者介绍:✌️大厂全栈码农|毕设实战开发,专注于大学生项目实战开发、讲解和毕业答疑辅导。 🍅获取源码联系方式请查看文末🍅 推荐订阅精彩专栏 👇🏻 避免错过下次更新 Springboot项目精选实战案例 更多项目…

Vue3.js - 数据代理方法

1. Vue导入 最简单的方式&#xff0c;通过联网接入Vue3的接口 <script type"text/javascript" src"https://unpkg.com/vue3"></script> 2. Vue实例 2.1 创建Vue实例 const vm Vue.createApp({}) 使用Vue中的createApp方法创建对应实例&a…

115页PPT华为管理变革:制度创新与文化塑造的核心实践

集成供应链&#xff08;ISC&#xff09;体系 集成供应链&#xff08;ISC&#xff09;体系是英文Integrated Supply Chain的缩写&#xff0c;是一种先进的管理思想&#xff0c;它指的是由相互间提供原材料、零部件、产品和服务的供应商、合作商、制造商、分销商、零售商、顾客等…

AI 提示词(Prompt)入门 :ChatGPT 4.0 高级功能指南

这段时间 GPT4 多了很多功能&#xff0c;今天主要是增加了 GPTs Store 的介绍和 创建 GPTs 的简单方法&#xff0c;那么我们开始吧&#xff0c;文末有彩蛋。 这里主要讲解如下几个点&#xff1a; 1&#xff1a; ChatGPT 4.0 插件的使用 2&#xff1a;ChatGPT 4.0 高级数据分…

【小白学机器学习16】 概率论的世界观2: 从正态分布去认识世界

目录 1 从正态分布说起 1.1 正态分布的定义 1.2 正态分布的名字 1.3 正态分布的广泛&#xff0c;和基础性 2 正态分布的公式和图形 2.1 正态分布 2.2 标准正态分布 3 正态分布的认识的3个层次 3.1 第1层次&#xff1a;个体的某个属性的样本值&#xff0c;服从正态分布…

四、大模型(LLMS)langchain面

本文精心汇总了多家顶尖互联网公司在大模型进阶知识考核中的核心考点&#xff0c;并针对这些考点提供了详尽的解答。并提供电子版本&#xff0c;见于文末百度云盘链接中&#xff0c;供读者查阅。 一、大模型langchainmian • 一、什么是 LangChain? • 二、LangChain 包含哪些…

kafka 如何减少数据丢失?

大家好&#xff0c;我是锋哥。今天分享关于【kafka 如何减少数据丢失?】面试题&#xff1f;希望对大家有帮助&#xff1b; kafka 如何减少数据丢失? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Apache Kafka 是一个高吞吐量的分布式消息队列&#xff0c;广泛用…

FPGA第 13 篇,使用 Xilinx Vivado 创建项目,点亮 LED 灯,Vivado 的基本使用(点亮ZYNQ-7010开发板的LED灯)

前言 在FPGA设计中&#xff0c;Xilinx Vivado软件是一款功能强大的设计工具&#xff0c;它不仅支持硬件描述语言&#xff08;HDL&#xff09;的开发&#xff0c;还提供了丰富的图形化设计界面&#xff0c;方便用户进行硬件设计、调试和测试。这里我们将详细介绍&#xff0c;如…