前端网络相关小结

手写 XMLHttpRequest 不借助任何库

    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function () {
      if (xhr.readyState == 4) {
        if (xhr.status == 200) {
          console.log(xhr.responseText);
        }
      }
    };
    xhr.open('GET', 'url', true);
    //xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=UTF-8");
    xhr.send(null);

当get时,open中的url拼好参数,send中不传参数
当post时,open中的url不带参数,send中传入参数,并且在open后send前设置请求头。

ajax 请求中的两种状态码 

上述代码中有两种状态码,

第一种是 xhr.readyState ,它是浏览器判断请求过程中各个阶段的状态码;

0 - 代理被创建,但尚未调用 open()

1 - open()方法已经被调用

2 - send()方法已经被调用,并且头部和状态已经可以获得

3 - 下载中,responseText 属性已经包含部分数据

4 - 下载操作已完成

第二种是 xhr.status ,它是HTTP 协议中规定的不同结果的返回状态说明。

1xx

信息性状态码,表示接受的请求正在处理

2xx

成功状态码,表示请求正常处理完毕

  • 200 OK:表示从客户端发送给服务器的请求被正常处理并返回
  • 204 No Content:表示客户端发送给服务端的请求得到了成功处理,但在返回的响应报文中不包含实体的主体部分(没有资源可以返回)
  • 206 Patial Content:表示客户端进行了范围请求,并且服务器成功执行了这部分的GET请求,响应报文中包含由Content-Range 指定范围的实体内容

3xx

重定向状态码,表示需要进行附加操作以完成请求

  • 301 Moved Permanently:永久重定向,表示请求的资源被分配了新的URL,之后应使用更改后的URL
  • 302 Found:临时重定向,表示请求的资源被分配了新的URL,希望本次访问使用新的URL

               301和302的区别:前者是永久重定向,后者是临时重定向(之后可能还会更改URL)

  • 303 See Other:表示资源被分配了新的URL,应使用GET方法定向获取请求的资源

              302和303的区别:后者明确表示客户端应该采用GET方式获取资源

  • 304 Not Modified:表示客户端发送附带条件(是指采用GET方法的请求报文中包含if-Match、if-Modified-Since、if-None-Match、if-Range、if-Unmodified-Since中任一首部)的请求时,资源已找到,但未符合条件请求。
  • 307 Temporary Redirect:临时重定向,与302有着相同的含义,307会遵照浏览器标准不会从POST变成GET(不同浏览器可能出现不同的情况)

4xx

客户端错误状态码,表示服务器无法处理请求

  • 400 Bad Request:请求报文中存在语法错误
  • 401 Unauthorized:未经许可,需要通过HTTP认证
  • 403 Forbidden:服务器拒绝该次访问(访问权限出现问题)
  • 404 Not Found:表示服务器上无法找到请求的资源,除此之外也可以是在服务器拒绝请求但是不想给出拒绝原因时使用

5xx

服务器错误状态码,表示服务器处理请求出错

  • 500 Inter Server Error:表示服务器在执行请求时发生了错误,也有可能是web应用存在的bug或某些临时的错误
  • 503 Server Unavalable:表示服务器暂时处于超负载或正在进行停机维护,无法处理请求

http 常用请求方式及其返回状态码

 1、GET

  • GET方法是我们平时最常用的一种请求方式,我们在获取资源时会使用,比如获取文章的数据。如果请求成功会返回状态码 200 OK 以及我们请求的资源信息。

2、POST

  • POST方式用于创建新的资源,比如发布新的文章,请求成功返回状态码 201 Created 以及返回被创建的资源信息。

3、PUT

  • PUT方式用于更新替换资源,比如修改全部文章信息,请求成功返回状态码 200 OK 和返回被修改的资源信息。

4、PATCH

  • PATCH方式用于更新资源,和PUT的区别是PATCH只需要更新部分资源数据。请求成功返回状态码 200 OK 和被修改的资源信息。

5、DELETE

  • DELETE用于删除资源,成功后返回 204 No Content

6、HEAD

  • HEAD方式用于获取请求资源返回的头信息。

7、OPTIONS

  • OPTIONS方法用于获取资源支持的所有HTTP方法。

TCP和UDP的区别

TCP 面向连接的,可靠传输的,消耗资源,速度,应用场景一般为文件传输、发送 / 接收邮件等。

UDP 不面向连接的,不可靠传输的,消耗资源,速度,应用场景一般为即时通信,如QQ语音。 

TCP三次握手四次挥手

客户端发送带有SYN标志的数据包。一次握手,客户端什么都不能确认,服务端能确认对方的发送能力、自身的接收能力正常。

服务端发送带有SYN/ACK标志的数据包。二次握手,客户端能确认对方的发送、接收能力,自身的发送、接收能力正常,服务端能确认对方的发送能力、自身的接收能力正常。

客户端发送带有ACK标志的数据包。三次握手,客户端能确认对方的发送、接收能力,自身的发送、接收能力正常,服务端能确认对方的发送、接收能力,自身的发送、接收能力正常。

为什么要三次握手?

  • 确认双方的发送/接收能力
  • 如果两次握手就能建立连接,容易出现建立多余连接的情况,浪费资源。比如由于网络延迟或不通畅,客户端有可能会多次发起(重发)网络请求,直到服务端ACK/SYN响应。如果后来网络通畅了,多余的请求到达服务端,仅有二次握手的话会导致多余的连接产生。而如果有第三次握手,只要最终客户端没有响应服务端就不会再次建立连接,从而避免了上述情况。

为什么要四次挥手?

类比打电话结束时候的场景。

HTTP/1.1和HTTP/1.0的区别

1、HTTP/1.0默认使用短连接,HTTP/1.1默认使用长连接。

使用短连接的情况下,客户端和服务端每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(JS/CSS/图片),每遇到一个资源,浏览器都会重新建立一个HTTP会话。

而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:

Connection:keep-alive

使用长连接的情况下,当一个网页打开完成后,客户端和服务端之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。keep-alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。

HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。

2引入了更多的缓存控制策略

比如 Etag

所以此时,强缓存标识:expires  cache-control,协商缓存标识:last-modified  Etag

3、支持请求部分资源

HTTP/1.1 支持在请求头引入 range 头域,它允许只请求资源的某个部分,返回码是206,有利于开发者的自由选择以及充分利用带宽和连接。

4、新增错误状态码

如409/410。

URI和URL的区别

URI(Uniform Resource Identifier)是统一资源标识符,可以唯一标识一个资源。

URL(Uniform Resource Location)是统一资源定位符,可以提供资源的路径。它是一种具体的URI,即URL可以用来标识一个资源,而且还指名了如何locate这个资源。

URI的作用像身份证号一样,URL的作用更像家庭住址一样。

HTTP和HTTPS的区别

 1、端口

HTTP默认端口80,HTTPS默认端口443。

2、安全性和资源消耗

HTTP协议运行在TCP上,明文传输,客户端和服务端都无法验证对方的身份。

HTTPS是运行在SSL/TLS之上的HTTP协议,SSL/TLS运行在TCP之上,所有传输内容都经过加密

虽然HTTPS安全性更高,但是消耗的资源也更多

常见设备工作在OSI七层模型的哪一层?

OSI七层模型:

  • 应用层(网关
  • 表示层(网关
  • 会话层(网关
  • 传输层(网关
  • 网络层(路由器
  • 数据链路层(网桥、交换机
  • 物理层(网卡、网线、集中器、中继器、调制解调器) 

http请求头常见字段

  • Accept 设置接受的内容类型
  • Accept-Charset 设置接受的字符编码
  • Accept-Encoding 设置接受的编码格式
  • Accept-Datetime 设置接受的版本时间
  • Accept-Language 设置接受的语言
  • Authorization 设置HTTP身份验证的凭证
  • Cache-Control 设置响应链上所有的缓存
  • Cookie 设置服务端使用Set-Cookie发送的http cookie 
  • Content-Type 设置请求体的MIME类型(适用于POST和PUT请求)
  • Date 设置消息发送的日期和时间
  • If-Match 设置客户端的ETag,当客户端ETag和服务器生成的ETag一致才执行,适用于更新自从上次更新后没有改变的资源
  • If-Modified-Since 设置更新时间,从更新时间到服务端接受请求这段时间内如果资源没有改变,允许服务端返回304 Not Modified
  • If-None-Match 设置ETag,如果和服务端接受请求生成的ETag相同,允许服务端返回304 Not Modified
  • If-Range 设置客户端ETag,如果和服务端接受请求生成的ETag相同,返回缺失的实体部分;否则返回整个新的实体
  • If-Unmodified-Since 设置更新时间,只有从更新时间到服务端接受请求这段时间内实体没有改变,服务端才会发送响应
  • Origin 标识跨域资源请求(服务端设置Access-Control-Allow-Origin响应字段)

http响应头常见字段 

  • Access-Control-Allow-Origin 指定哪些站点可以参与跨站资源共享
  • Cache-Control 告诉服务端到客户端所有的缓存机制是否可以缓存这个对象,单位是秒
  • Content-Type 设置响应体的MIME类型
  • Date 设置消息发送的日期和时间
  • ETag 特定版本资源的标识符,通常是消息摘要
  • Expires 设置响应体的过期时间
  • Last-Modified 设置请求对象最后一次的修改日期
  • Server 服务器名称
  • Set-Cookie 设置HTTP Cookie
  • Status 设置HTTP响应状态

http请求头content-type字段的常见属性 

  • application/x-www-form-urlencoded

       浏览器表单提交的默认方式。在最初始的请求方式中,请求参数都是放在url里的,表单提交的时候,都是以key1=value1&key2=value2的方式写在url后面。

  • multipart/form-data

       这种方式多用于文件上传,表单数据都保存在http的正文部分。

  • application/json 

        告诉服务端消息主体是序列化的json字符串

  • image/jpeg
  • text/xml
  • text/html

什么是简单请求?

需同时满足以下两个条件

  • 请求方法是以下三种方法之一

       · HEAD

       · GET

       · POST

  • HTTP的头信息不超出以下几种字段

       · Accept

       · Accept-Language

       · Content-Language

       · Last-Event-ID

       · Content-Type:只限于三种属性值 application/x-www-form-urlencodedmultipart/form-datatext/plain

什么是复杂请求?

 非简单请求就是复杂请求。

复杂请求在正式请求前都会有预检请求,在浏览器中能看到OPTIONS请求,用于向服务器请求权限信息的。

另外,axios都是复杂请求,ajax可以是简单请求。

nginx反向代理解决跨域问题的原理

因为客户端向服务端发送请求时,会出现跨域问题。而服务端与服务端之间是不存在跨域问题的。

所以其原理就是,以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

这种应该属于直接转发请求。间接转发应该类似于页面重定向,让客户端自动重新进行请求。

具体区别点击此处跳转 ->

  

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会为您提供 PHP 系统需求分析与架构设计的小结。 1. 系统需求分析 在进行 PHP 系统设计之前,需要进行系统需求分析,明确系统的功能需求和性能需求。需要考虑用户角色、数据存储、系统安全、系统稳定性等因素。在进行系统需求分析时,需要与客户和用户进行充分的沟通,确保设计的系统能够满足他们的需求。 2. 架构设计 系统架构设计是系统设计的重要环节,需要考虑系统的整体架构、数据结构和算法等问题。在进行架构设计时,需要考虑系统的可扩展性、可维护性、可靠性等因素。需要采用合适的设计模式和编码规范,确保系统具有良好的可读性和可维护性。 3. 技术选型 在进行 PHP 系统设计时,需要选择合适的技术栈,包括后端技术、前端技术、数据库技术等。需要综合考虑系统的功能需求和性能需求,选择性能稳定、易于维护的技术。 4. 数据库设计 系统的数据库设计是系统设计的重要环节之一,需要考虑数据表的设计、数据存储方式、数据备份和恢复等问题。需要采用合适的数据库技术,如 MySQL、MongoDB 等。 5. 系统安全性设计 在进行 PHP 系统设计时,需要考虑系统的安全性,包括用户身份验证、数据加密、防止 SQL 注入攻击和 XSS 攻击等问题。需要采用合适的安全措施,确保系统的安全性。 6. 系统性能优化 系统的性能是系统设计的重要考虑因素之一,需要考虑系统的响应速度、吞吐量等问题。在进行系统性能优化时,需要考虑系统的硬件环境、网络环境、代码优化等因素。 以上就是 PHP 系统需求分析与架构设计的小结。希望对您有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值