网络相关知识 网络相关知识 面试
connygpt 2024-10-10 05:21 7 浏览
1、http中session和cookies的作用和区别
cookie存在客户端的信息头中,session在服务器端存储,文件、数据库等都可以
一般来说session的验证需要cookie带一个字段来表示这个用户是哪一个session,所以当客户端禁用cookie时,session将失效
cookie就是小一段文本信息
cookie的格式为key:value;key:value
cookie的值由服务器端生成,客户端保存
2、http协议信息头
简要说明请求中accept\accept-encoding、accept-language都代表什么意思
1、请求头
accept:浏览器告诉服务器它所支持的数据类型
accept-charset:浏览器告诉服务器它采用的字符集
accept-encoding:浏览器告诉服务器它所支持的压缩格式
accept-language:浏览器告诉服务器它所采用的语言
host:浏览器告诉服务器我想访问服务器哪台主机
if-modified-since:浏览器告诉服务器它缓存数据时间是多少
referer:浏览器告诉服务器我是从那个网页点过来的(防盗链)
user-agent:浏览器告诉服务器我所使用的浏览器类型、版本等信息
date:浏览器告诉服务器我是什么时间访问的
2、响应头
location:告诉浏览器你去找谁,配合302状态码使用
server:告诉浏览器服务器的类型
content-encoding:告诉浏览器回送的数据采用的压缩格式
content-type:告诉浏览器回送的数据类型
last-modified:告诉浏览器数据的最后修改时间
refresh:用于控制浏览器定时刷新
content- disposition:告诉浏览器需要以下载方式打开的数据
transfer-encoding:告诉浏览器数据是以分块形式回送
3、http正确的响应码
信息响应:1xx:请求已接收到,需要进一步处理才能完成,HTTP1.0 不支持。
100 Continue:上传大文件前使用
由客户端发起请求中携带 Expect:100-continue 头部触发
101 Switch Protocols: 协议升级使用
由客户端发起请求中携带 Upgrade: 头部触发,如升级 websocket 或者 http/2.0
102 Processing:WebDAV 请求可能包含许多涉及文件操作的子请求,需要很长时间
才能完成请求。
该代码表示服务器已经收到并正在处理请求,但无响应可用。这样可
以防止客户端超时,并假设请求丢失
成功响应2xx:成功处理请求
200 OK: 成功返回响应
201 Created: 有新资源在服务器端被成功创建
202 Accepted:服务器接收并开始处理请求,但请求未处理完成。这样一个模
糊的概念是有意如此设计,可以覆盖更多的场景。例如异步、需要长时间处理
的任务。
203Non-Authoritative Information: 当代理服务器修改了 origin server 的
原始响应包体时(例如更换了HTML中的元素值),代理服务器可以通过修改
200为203的方式告知客户端这一事实,方便客户端为这一行为作出相应的处理
203响应可以被缓存。
204 No Content:成功执行了请求且不携带响应包体,并暗示客户端无需
更新当前的页面视图。
205 Reset Content: 成功执行了请求且不携带响应包体,同时指明客户端
需要更新当前页面视图。
206 Partial Content: 使用 range 协议时返回部分响应内容时的响应码
207 Multi-Status: RFC4918,在WEBDAV 协议中以XML 返回多个资源
的状态。
208 Already Reported: RFC5842,为避免相同集合下资源在207响应码
下重复上报,使用208可以使用父集合的响应码。
重定向3xx:重定向使用 Location 指向的资源或者缓存中的资源。在RFC2068
中规定客户端重定向次数不应超过5次,以防止死循环
300 Multiple Choices: 资源有多种表述,通过 300 返回给客户端后由其
自行选择访问哪一种表述。由于缺乏明确的细节,300 很少使用。
301 Moved Permanently: 资源永久性的重定向到另一个 URI中。
302 Found:资源临时的重定向到另一个 URI中。
303See Other: 重定向到其他资源,常用于POST/PUT 等方法的响应中
304NotModified:当客户端拥有可能过期的缓存时,会携带缓存的标识
etag、时间等信息询问服务器缓存是否仍可复用,而304是告诉客户端可以
复用缓存。
307 Temporary Redirect: 类似302,但明确重定向后请求方法必须与原
请求方法相同,不得改变
308 Permanent Redirect: 类似301,但明确重定向后请求方法必须与原请
求方法相同,不得改变
客户端响应4xx
400 Bad Request
1、语义有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求。
2、请求参数有误。
401 Unauthorized
当前请求需要用户验证。该响应必须包含一个适用于被请求资源的 WWW-Authenticate 信息头用以询问用户信息。客户端可以重复提交一个包含恰当的 Authorization 头信息的请求。如果当前请求已经包含了 Authorization 证书,那么401响应代表着服务器验证已经拒绝了那些证书。如果401响应包含了与前一个响应相同的身份验证询问,且浏览器已经至少尝试了一次验证,那么浏览器应当向用户展示响应中包含的实体信息,因为这个实体信息中可能包含了相关诊断信息。
402 Payment Required
此响应码保留以便将来使用,创造此响应码的最初目的是用于数字支付系统,然而现在并未使用。
403 Forbidden
服务器已经理解请求,但是拒绝执行它。与 401 响应不同的是,身份验证并不能提供任何帮助,而且这个请求也不应该被重复提交。如果这不是一个 HEAD 请求,而且服务器希望能够讲清楚为何请求不能被执行,那么就应该在实体内描述拒绝的原因。当然服务器也可以返回一个 404 响应,假如它不希望让客户端获得任何信息。
404 Not Found
请求失败,请求所希望得到的资源未被在服务器上发现。没有信息能够告诉用户这个状况到底是暂时的还是永久的。假如服务器知道情况的话,应当使用410状态码来告知旧资源因为某些内部的配置机制问题,已经永久的不可用,而且没有任何可以跳转的地址。404这个状态码被广泛应用于当服务器不想揭示到底为何请求被拒绝或者没有其他适合的响应可用的情况下。
405 Method Not Allowed
请求行中指定的请求方法不能被用于请求相应的资源。该响应必须返回一个Allow 头信息用以表示出当前资源能够接受的请求方法的列表。 鉴于 PUT,DELETE 方法会对服务器上的资源进行写操作,因而绝大部分的网页服务器都不支持或者在默认配置下不允许上述请求方法,对于此类请求均会返回405错误。
406 Not Acceptable
请求的资源的内容特性无法满足请求头中的条件,因而无法生成响应实体。
407 Proxy Authentication Required
与401响应类似,只不过客户端必须在代理服务器上进行身份验证。代理服务器必须返回一个 Proxy-Authenticate 用以进行身份询问。客户端可以返回一个 Proxy-Authorization 信息头用以验证。
408 Request Timeout
请求超时。客户端没有在服务器预备等待的时间内完成一个请求的发送。客户端可以随时再次提交这一请求而无需进行任何更改。
409 Conflict
由于和被请求的资源的当前状态之间存在冲突,请求无法完成。这个代码只允许用在这样的情况下才能被使用:用户被认为能够解决冲突,并且会重新提交新的请求。该响应应当包含足够的信息以便用户发现冲突的源头。
410 Gone
被请求的资源在服务器上已经不再可用,而且没有任何已知的转发地址。这样的状况应当被认为是永久性的。如果可能,拥有链接编辑功能的客户端应当在获得用户许可后删除所有指向这个地址的引用。如果服务器不知道或者无法确定这个状况是否是永久的,那么就应该使用 404 状态码。除非额外说明,否则这个响应是可缓存的。
411 Length Required
服务器拒绝在没有定义 Content-Length 头的情况下接受请求。在添加了表明请求消息体长度的有效 Content-Length 头之后,客户端可以再次提交该请求。
412 Precondition Failed
服务器在验证在请求的头字段中给出先决条件时,没能满足其中的一个或多个。这个状态码允许客户端在获取资源时在请求的元信息(请求头字段数据)中设置先决条件,以此避免该请求方法被应用到其希望的内容以外的资源上。
413 Payload Too Large
服务器拒绝处理当前请求,因为该请求提交的实体数据大小超过了服务器愿意或者能够处理的范围。此种情况下,服务器可以关闭连接以免客户端继续发送此请求。如果这个状况是临时的,服务器应当返回一个 Retry-After 的响应头,以告知客户端可以在多少时间以后重新尝试。
414 URI Too Long
请求的URI 长度超过了服务器能够解释的长度,因此服务器拒绝对该请求提供服务。这比较少见,通常的情况包括:本应使用POST方法的表单提交变成了GET方法,导致查询字符串(Query String)过长。
415 Unsupported Media Type
对于当前请求的方法和所请求的资源,请求中提交的实体并不是服务器中所支持的格式,因此请求被拒绝。
416 Requested Range Not Satisfiable
如果请求中包含了 Range 请求头,并且 Range 中指定的任何数据范围都与当前资源的可用范围不重合,同时请求中又没有定义 If-Range 请求头,那么服务器就应当返回416状态码。
417 Expectation Failed
此响应代码意味着服务器无法满足 期望 请求标头字段指示的期望值。
418 I'm a teapot
服务器拒绝尝试用 “茶壶冲泡咖啡”。
421 Misdirected Request
该请求针对的是无法产生响应的服务器。 这可以由服务器发送,该服务器未配置为针对包含在请求 URI 中的方案和权限的组合产生响应。
422 Unprocessable Entity (WebDAV)
请求格式良好,但由于语义错误而无法遵循。
423 Locked (WebDAV)
正在访问的资源被锁定。
424 Failed Dependency (WebDAV)
由于先前的请求失败,所以此次请求失败。
426 Upgrade Required
服务器拒绝使用当前协议执行请求,但可能在客户机升级到其他协议后愿意这样做。 服务器在 426 响应中发送 Upgrade 头以指示所需的协议。
428 Precondition Required
原始服务器要求该请求是有条件的。 旨在防止“丢失更新”问题,即客户端获取资源状态,修改该状态并将其返回服务器,同时第三方修改服务器上的状态,从而导致冲突。
429 Too Many Requests
用户在给定的时间内发送了太多请求(“限制请求速率”)。
431 Request Header Fields Too Large
服务器不愿意处理请求,因为它的 请求头字段太大( Request Header Fields Too Large)。 请求可以在减小请求头字段的大小后重新提交。
451 Unavailable For Legal Reasons
用户请求非法资源,例如:由政府审查的网页。
服务端响应5xx
500 Internal Server Error
服务器遇到了不知道如何处理的情况。
501 Not Implemented
此请求方法不被服务器支持且无法被处理。只有GET和HEAD是要求服务器支持的,它们必定不会返回此错误代码。
502 Bad Gateway
此错误响应表明服务器作为网关需要得到一个处理这个请求的响应,但是得到一个错误的响应。
503 Service Unavailable
服务器没有准备好处理请求。 常见原因是服务器因维护或重载而停机。 请注意,与此响应一起,应发送解释问题的用户友好页面。 这个响应应该用于临时条件和 Retry-After:如果可能的话,HTTP头应该包含恢复服务之前的估计时间。 网站管理员还必须注意与此响应一起发送的与缓存相关的标头,因为这些临时条件响应通常不应被缓存。
504 Gateway Timeout
当服务器作为网关,不能及时得到响应时返回此错误代码。
505 HTTP Version Not Supported
服务器不支持请求中所使用的HTTP协议版本。
506 Variant Also Negotiates
服务器有一个内部配置错误:对请求的透明内容协商导致循环引用。
507 Insufficient Storage
服务器有内部配置错误:所选的变体资源被配置为参与透明内容协商本身,因此不是协商过程中的适当端点。
508 Loop Detected (WebDAV)
服务器在处理请求时检测到无限循环。
510 Not Extended
服务器需要对请求进一步扩展才能实现它。
511 Network Authentication Required
511 状态码指示客户端需要进行身份验证才能获得网络访问权限。
4、nginx反向代理
nginx是一个高性能的http和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
占有内存少,并发能力强
正向代理:我们平时需要访问国外的浏览器是不是很慢,比如我们要看推特,看GitHub等等。我们直接用国内的服务器却无法访问国外的服务器,或者是访问很慢,所以我们需要再本地搭建一个服务器来帮助我们去访问。
反向代理:多台服务器,访问的服务器时候,因为服务器中间session不共享,那我们是不是在服务器之间访问需要频繁登录,那这个时候搭建一个过演服务器,对我们是没有任何影响的,我们是登录一次,但是访问所有,这种情况就是反向代理。
对我们来说,客户端对代理是无感知的,暴露的是代理服务器地址,隐藏了真实服务器的地址。
5、nginx的负载均衡
负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
简单来说:现有的请求使服务器压力太大无法承受,所有我们需要搭建一个服务器集群,去分担原先一个服务器所承受的压力,那现在我们有ABCD等等多台服务器,我们需要把请求分给这些服务器,但是服务器可能大小也有自己的不同,所以怎么分? 如何分面更好?又是一个问题。
Nginx给出来三种关于负载均衡的方式
1.轮询法(默认方法)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动别除。
适合服务器配置相当,无状态且短平快的服务使用。也适用于图片服务器集群和纯静态页面服务器集群。
2.weight权重模式(加权轮询)
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
这种方式比较灵活,当后端服务器性能存在差异的时候,通过配置权重,可以让服务器的性能得到充分发挥,有效利用资源。weight和访问比率成正比,用于后端服务器性能不均的情况。权重越高,在被访问的概率越大
3.ip hash
上述方式存在一个问题就是说,在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。
我们可以采用ip hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
6、使用WAF防止DDoS攻击
WAF是Web应用程序防火墙,是一种网络安全技术,可以在应用程序层面防御攻击,包括DDoS攻击。
DDoS攻击者可以利用互联网的广泛性,将恶意流量注入到网站的流量中,导致网站访问不稳定、用户信息丢失或泄露等一系列问题。
WAF能够对不同类型的攻击进行检测并进行过滤,阻止恶意攻击流量,保证站点顺畅、稳定运行。WAF还可以检测网站的异常流量,并及时预先配置或调整相应的策略,避免DDoS攻击。
相关推荐
- 3分钟让你的项目支持AI问答模块,完全开源!
-
hello,大家好,我是徐小夕。之前和大家分享了很多可视化,零代码和前端工程化的最佳实践,今天继续分享一下最近开源的Next-Admin的最新更新。最近对这个项目做了一些优化,并集成了大家比较关注...
- 干货|程序员的副业挂,12个平台分享
-
1、D2adminD2Admin是一个完全开源免费的企业中后台产品前端集成方案,使用最新的前端技术栈,小于60kb的本地首屏js加载,已经做好大部分项目前期准备工作,并且带有大量示例代码,助...
- Github标星超200K,这10个可视化面板你知道几个
-
在Github上有很多开源免费的后台控制面板可以选择,但是哪些才是最好、最受欢迎的可视化控制面板呢?今天就和大家推荐Github上10个好看又流行的可视化面板:1.AdminLTEAdminLTE是...
- 开箱即用的炫酷中后台前端开源框架第二篇
-
#头条创作挑战赛#1、SoybeanAdmin(1)介绍:SoybeanAdmin是一个基于Vue3、Vite3、TypeScript、NaiveUI、Pinia和UnoCSS的清新优...
- 搭建React+AntDeign的开发环境和框架
-
搭建React+AntDeign的开发环境和框架随着前端技术的不断发展,React和AntDesign已经成为越来越多Web应用程序的首选开发框架。React是一个用于构建用户界面的JavaScrip...
- 基于.NET 5实现的开源通用权限管理平台
-
??大家好,我是为广大程序员兄弟操碎了心的小编,每天推荐一个小工具/源码,装满你的收藏夹,每天分享一个小技巧,让你轻松节省开发效率,实现不加班不熬夜不掉头发,是我的目标!??今天小编推荐一款基于.NE...
- StreamPark - 大数据流计算引擎
-
使用Docker完成StreamPark的部署??1.基于h2和docker-compose进行StreamPark部署wgethttps://raw.githubusercontent.com/a...
- 教你使用UmiJS框架开发React
-
1、什么是Umi.js?umi,中文可发音为乌米,是一个可插拔的企业级react应用框架。你可以将它简单地理解为一个专注性能的类next.js前端框架,并通过约定、自动生成和解析代码等方式来辅助...
- 简单在线流程图工具在用例设计中的运用
-
敏捷模式下,测试团队的用例逐渐简化以适应快速的发版节奏,大家很早就开始运用思维导图工具比如xmind来编写测试方法、测试点。如今不少已经不少利用开源的思维导图组件(如百度脑图...)来构建测试测试...
- 【开源分享】神奇的大数据实时平台框架,让Flink&Spark开发更简单
-
这是一个神奇的框架,让Flink|Spark开发更简单,一站式大数据实时平台!他就是StreamX!什么是StreamX大数据技术如今发展的如火如荼,已经呈现百花齐放欣欣向荣的景象,实时处理流域...
- 聊聊规则引擎的调研及实现全过程
-
摘要本期主要以规则引擎业务实现为例,陈述在陌生业务前如何进行业务深入、调研、技术选型、设计及实现全过程分析,如果你对规则引擎不感冒、也可以从中了解一些抽象实现过程。诉求从硬件采集到的数据提供的形式多种...
- 【开源推荐】Diboot 2.0.5 发布,自动化开发助理
-
一、前言Diboot2.0.5版本已于近日发布,在此次发布中,我们新增了file-starter组件,完善了iam-starter组件,对core核心进行了相关优化,让devtools也支持对IAM...
- 微软推出Copilot Actions,使用人工智能自动执行重复性任务
-
IT之家11月19日消息,微软在今天举办的Ignite大会上宣布了一系列新功能,旨在进一步提升Microsoft365Copilot的智能化水平。其中最引人注目的是Copilot...
- Electron 使用Selenium和WebDriver
-
本节我们来学习如何在Electron下使用Selenium和WebDriver。SeleniumSelenium是ThoughtWorks提供的一个强大的基于浏览器的开源自动化测试工具...
- Quick 'n Easy Web Builder 11.1.0设计和构建功能齐全的网页的工具
-
一个实用而有效的应用程序,能够让您轻松构建、创建和设计个人的HTML网站。Quick'nEasyWebBuilder是一款全面且轻巧的软件,为用户提供了一种简单的方式来创建、编辑...
- 一周热门
- 最近发表
- 标签列表
-
- kubectlsetimage (56)
- mysqlinsertoverwrite (53)
- addcolumn (54)
- helmpackage (54)
- varchar最长多少 (61)
- 类型断言 (53)
- protoc安装 (56)
- jdk20安装教程 (60)
- rpm2cpio (52)
- 控制台打印 (63)
- 401unauthorized (51)
- vuexstore (68)
- druiddatasource (60)
- 企业微信开发文档 (51)
- rendertexture (51)
- speedphp (52)
- gitcommit-am (68)
- bashecho (64)
- str_to_date函数 (58)
- yum下载包及依赖到本地 (72)
- jstree中文api文档 (59)
- mvnw文件 (58)
- rancher安装 (63)
- nginx开机自启 (53)
- .netcore教程 (53)