http,tcp,nginx相关的面试题

目录

1,nginx负载均衡的算法有哪些?

2,http状态码都有哪些?

3,sesssion,cookie,token,jwt的区别?

4,get和post都有哪些区别?

6,跨域访问都有哪些?

7,nginx怎么设置限流?

8,tcp和udp区别


1,nginx负载均衡的算法有哪些?

round robin(默认):轮询方式,依次将请求分配到各个服务器。
weight(权重):根据权重将请求分配到各个机器上,权重大分配的请求多。
ip_hash:根据请求的IP哈希值把请求分配到某个机器上,保证同一个IP分配到同一个机器上。
url_hash:根据请求的url地址的哈希值将请求分配到某个机器上,保证同一个url被分配到同一个机器上。
fair(第三方):根据后端响应的时间来分发,时间段的分配的多。

2,http状态码都有哪些?

1xx系列:信息性状态码,表示服务器已经接收到请求并正在处理,但需要进一步的操作才能完成请求。

- 100 Continue:请求正在进行,客户端应继续发送请求或数据。   
- 101 Switching Protocols:服务器将遵循客户端的请求,并切换到指定的协议。   
- 102 Processing:服务器已经收到请求,正在处理。

2xx系列:成功状态码,表示请求已经成功被服务器接收、理解和处理。

- 200 OK:请求成功,响应包含请求的资源。  
- 201 Created:请求成功,并创建了新的资源。   
- 202 Accepted:请求已被接受,但处理尚未完成。   
- 203 Non-Authoritative Information:请求成功,但返回的信息不是来自于权威数据源。   
- 204 No Content:请求成功,但没有返回任何内容。   
- 205 Reset Content:请求成功,并要求客户端重置文档视图。   
- 206 Partial Content:请求成功,返回部分GET请求的范围。

3xx系列:重定向状态码,表示客户端需要进行进一步的操作才能完成请求。

- 300 Multiple Choices:请求的资源有多个选择。   
- 301 Moved Permanently:请求的资源已被永久移动到新位置。   
- 302 Found:请求的资源已被临时移动到新位置。   
- 303 See Other:请求的资源可以在另一个URI上找到。   
- 304 Not Modified:请求的资源未被修改,客户端可以使用缓存的版本。   
- 307 Temporary Redirect:请求的资源临时从一个URI重定向到另一个URI。   
- 308 Permanent Redirect:请求的资源永久从一个URI重定向到另一个URI。

4xx系列:客户端错误状态码,表示客户端发起的请求有错误或无法完成。

- 400 Bad Request:请求无效,服务器无法理解。   
- 401 Unauthorized:请求需要身份验证。   
- 403 Forbidden:服务器拒绝请求。   
- 404 Not Found:请求的资源未找到。   
- 405 Method Not Allowed:请求方法不被允许。   
- 406 Not Acceptable:请求的资源无法满足客户端请求的响应格式。   
- 408 Request Timeout:请求超时,服务器等待客户端完成请求时发生超时。     
- 410 Gone:请求的资源已被永久删除。    
- 413 Payload Too Large:请求的负载太大。   
- 414 URI Too Long:请求的URI太长。   

5xx系列:服务器错误状态码,表示服务器在处理请求时发生了错误。

- 500 Internal Server Error:服务器内部错误。   
- 501 Not Implemented:服务器不支持请求的功能。   
- 502 Bad Gateway:服务器作为网关或代理时收到了无效响应。   
- 503 Service Unavailable:服务器暂时无法处理请求。   
- 504 Gateway Timeout:服务器作为网关或代理时,等待上游服务器响应超时。   

3,sesssion,cookie,token,jwt的区别?

session:数据存储在服务器,服务端返回sessionid,一般这个sessionid放在cookie中,通过sessionid找到存储的数据。由于数据存储在服务器,数据会比较安全。一般sessionid的维护和存储都是浏览器完成的,当然,系统也可以自己传递sessionid。

cookie:数据通过key,value的方式返回给浏览器,数据也存储在服务器,浏览器访问的时候每次都会携带这些数据。数据通过浏览器或者抓包可以查看到,也可以请求的时候伪造数据,数据安全性比较低,如果cookie数据非常多,每次请求都需要携带大量的cookie数据,会降低请求的效率。

token:一般登录后通过api把token返回,客户端每次请求的时候,都需要把token放入到参数里或者协议头里。这个token的数据也是存储在服务器,数据安全有保证,通过客户端维护token。

jwt:由头,数据,签名三部分组成,由api返回,客户端每次请求都把jwt放入到协议头里传输,为了安全,数据都会进行加密的,签名部分校验数据不被篡改,服务器不存储数据的。

4,get和post都有哪些区别?

传输方式不同,get的数据是放到url后面,post的数据是放在请求体里的。

传输大小不同,get传递的数据会有限制,post提交的数据没有大小限制。(协议上没有限制,但是具体的服务器为了安全,会有大小的限制,可以通过调整参数改变)

安全性,get在浏览器请求的时候,会记录url后面的数据,post提交的数据不会记录。

编码方式,get的编码方式固定,url编码,post通过和其他协议头配合,可以是任意编码。

行为限制,在浏览器中,get可以后退,post无法后退。

5,http的请求方式都有哪些?

POST

GET

HEAD:用于获取报文头。

PUT

PATCH:对PUT方法的补充,用来对已知资源进行局部更新。

OPTIONS:一般用于询问,比如在cors访问中,就先发送options请求。

DELETE

CONNECT:将连接改为管道方式的代理服务器。

TRACE:回显服务器收到的请求,一般用于测试,诊断。

在RESTful风格中,GET用于获取数据,POST创建数据,PUT用于更新数据,DELETE用于删除数据

6,跨域访问都有哪些?

JSONP:通过创建<script>标签的方式,并将返回的数据作为回调函数。这种方式只支持GET访问,特点就是限制少。

CORS:通过在服务器端设置响应头来允许跨域访问,能不能跨域,是服务端决定的。

代理服务器:通过代理服务器请求,然后把数据返回给客户端,对服务器端是无感的,需要配置服务器支持这种请求。

iframe嵌套:利用iframe的跨域通信特性,在不同iframe之间实现数据交换。

7,nginx怎么设置限流?

nginx限流就是限制用户请求速度,防止服务器宕机,是服务降级的一种自我保护机制,主要有三种:正常限制访问频率;突发限制访问频率;限制并发连接数。

正常限制访问频率:限制一个用户的请求频率,nginx中使用ngx_http_limit_req_module模块来限制用户访问频率。

例如:

//定义限流策略,根据($binary_remote_addr)ip限流,(test:10m)名称是test,共享空间是10M,每秒最多2个请求,如果超过就丢掉
limit_req_zone $binary_remote_addr zone=test:10m rate=2r/s;  
server {
    location / {
        limit_req zone=test;   //使用这个限流策略
    }
} 

突发限制访问频率:正常限制访问频率无法面对正常的突发访问增加的情况,无法处理突发流量,

例如:

//定义限流策略,根据($binary_remote_addr)ip限流,(test:10m)名称是test,共享空间是10M,每秒最多2个请求,如果超过就丢掉
limit_req_zone $binary_remote_addr zone=test:10m rate=2r/s;  
server {
    location / {
        limit_req zone=test burst=10 nodelay;   //使用这个限流策略
        //上面的策略是每秒最多处理2个请求,加入同时来了20个请求,把剩下的放入队列中,队列最多放10个,如果队列满了,就丢弃
    }
} 

限制并发连接数:nginx 的 ngx_http_limit_conn_module 模块提供限制连接数的能力,例如:

//现定义策略的名称perip,共享空间10M
limit_conn_zone $binary_remote_addr zone=perip:10m;
server {
    location ~* \.(html)$ {
        limit_conn perip 10; //使用这个策略,设置最大连接数10,如果某个IP同时连接数不能超过10
    }
} 

8,tcp和udp区别

tcp是面向连接的传输协议,传输前需要先建立连接;udp不需要连接,即刻传输协议。

tcp是可靠的,无差错,重发等;udp无法保证可靠,但是传输高效。

tcp有拥塞,流量控制机制,保证数据的传输安全;udp不会考虑网络和流量情况。

tcp协议头长,会占用资源多些;udp协议头短,传输效率高。

tcp是数据流,没有边界,通过序列号保证顺序和确认机制保证可靠;upd有边界,不能保证顺序,没有确认机制。

tcp的特点可靠,保证发送的和最后接收到的数据完全一样;udp特点就是快速,发送端只管发送,至于接收端是否丢包,接收数据顺序是否一样不关心,比如直播一般是udp。

------------------------------------------推荐阅读----------------------------------------------------------------

PHP基础面试题大全(附带详细答案)

PHP高级面试题大全(附带详细答案)

mysql面试题详解(含详细解析)

  • 22
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
当面试过程中可能会涉及到nginx相关问题。以下是一些常见的nginx面试题及其解答: Q1:什么是Nginx? A1:Nginx是一个高性能的开源Web服务器软件,也可以用作反向代理、负载均衡器和HTTP缓存等。它以其高并发能力、低内存消耗和高可靠性而闻名。 Q2:Nginx和Apache有什么区别? A2:主要区别包括: - Nginx是事件驱动的,而Apache是多线程模型。 - Nginx占用更少的内存并能处理更多的并发连接。 - Nginx配置更简洁灵活,对静态文件的处理效率更高。 Q3:如何配置Nginx服务器块(server block)? A3:可以在nginx.conf文件中的http块中添加多个server块来配置不同的虚拟主机。每个server块指定监听端口、服务器名称和相应的location规则。 Q4:如何配置Nginx反向代理? A4:可以使用`proxy_pass`指令将请求转发到后端服务器。例如: ``` location / { proxy_pass http://backend_server; } ``` Q5:如何配置Nginx负载均衡? A5:可以使用`upstream`块定义一组后端服务器,并使用`proxy_pass`指令将请求分发到这些服务器。例如: ``` upstream backend { server backend1; server backend2; } location / { proxy_pass http://backend; } ``` Q6:如何设置Nginx的SSL/TLS支持? A6:需要配置SSL证书和私钥文件,并将其指定给`ssl_certificate`和`ssl_certificate_key`指令。同时,还需在server块中指定监听443端口和ssl参数。 这只是一些常见的nginx面试题及其解答,希望能对你有所帮助。在面试前,建议你对nginx的基本概念、配置指令和常见用法有所了解,并深入研究相关文档和资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

geegtb

只希望写的东西能够帮助到你

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值