网络基础

21 阅读8分钟

网络基础

基础概念:

  1. 客户端:发出消息的一方称之为客户端 Client,发出消息的过程称之为请求 Request

  2. 服务器:回复消息的一方称之为服务器 Server,回复消息的过程称之为响应 Response

  3. 请求:发出消息的过程称之为请求 Request

  4. 响应:回复消息的过程称之为响应 Response

  5. C/S:客户端和服务器的这种交互模式称之为「经典 C/S 结构」

  6. B/S:如果客户端是浏览器,则我们称之为 B/S 结构

URL:

url 全称 uniform resource locator,统一资源定位符。它是一个字符串,用于表达互联网中某个资源的位置。通过 url 地址可以找到互联网上的资源,它可以是页面、图片、视频、音频、css 代码、js 代码、可供下载的文件、或者其他任何东西。

一个完整的 url 地址由多个部分组成

完整的url地址
协议 + 主机 + 端口 + 路径 + 参数 + hash

image.png

协议:

客户端与服务器的沟通方式,固定http或https

  1. 如果在浏览器的地址栏省略了协议,浏览器会自动为你补全
  2. 可以在 Chrome 浏览器的地址栏点击右键,显示完整的地址
  3. https 协议比 http 协议更安全,但往往出现在线上,本地的服务器通常不会是 https

主机:

某台存储资源的计算机,可些Ip地址或域名。

IP地址:是一个网络中计算机的唯一编号,通常一个Ip对应一台计算机

特殊的IP地址,127.0.0.1,它表示本机

域名:Ip地址的别名,好记,使用域名访问时,会自动转化为IP地址

特殊的域名:localhost,它表示本机

端口:

用于确定在那个应用程序中寻找资源

每个服务器程序都会监听一个或多个端口,只有找到相应端口,才能找到相应的服务器程序。

端口是可选,http协议默认端口是80,https协议默认端口是443

路径:

服务器上有很多资源,每个资源有自己的访问路径

路径可选:默认是/

参数:

传递给服务器的参数

可选,?后拼接参数,使用&分割多个参数

hash:

网络通信中hash没什么用,往往作为浏览器的锚链接

http:

超文本传输协议,HyperText Transfer Protocol,用于客户端与服务器之间的通信。

特点:

  1. 每次 请求-响应 都是独立的,相互之间互不干扰(具有这个特点的也叫无状态协议)
  2. 每次 请求-响应 传递的消息都是纯文本(字符串),文本格式必须按照http协议规定格式书写。

image.png

请求的消息格式:

请求消息格式包含三部分:

image.png

请求行:

高度概括了客户端想要干什么

请求行是整个 http 报文的第一行字符串,它包含三个部分:请求方法 路径+参数+hash 协议和版本

请求方法通常包含:GET(获取资源)、POST(提交消息)、PUT(修改数据)、DELETE(删除数据)。其中,GET 和 POST 最为常见。GET 和 DELETE 请求不能有请求体,而 POST 和 PUT 请求可以有请求体。

GET与POST的区别:

  1. 由于 GET 请求没有请求体,所以要传递数据只能把数据放到 url 的参数中

  2. 浏览器自动发出的请求基本都是 GET 请求,而 POST 请求需要开发者手动处理,比如在 form 表单中设置 method 为 POST

  3. 在浏览器中,获取数据一般使用的都是 GET 请求,比如:

    • 在地址栏输入地址并按下回车
    • 点击了某个 a 元素
    • 获取图片、音频、视频
    • 获取 css、js、字体等文件
请求头:

描述了请求的一些额外信息,请求头是一系列的键值对,里面包含了诸多和业务无关的信息,浏览器每次请求服务器都会自动附带很多的请求头,其实这些请求头大部分服务器是不需要的

常见的请求头及含义:

  1. Host:url 地址中的主机

  2. User-Agent:客户端的信息描述

  3. Content-Type: 请求体的消息是什么格式,如果没有请求体,这个字段无意义

    该字段的常见取值为:

    • application/x-www-form-urlencoded

      表示请求体的数据格式和 url 地址中参数的格式一样,比如

      loginId=admin&loginPwd=123123
      
    • application/json

      表示请求体的数据是 json 格式,比如

      { "loginId": "admin", "loginPwd": "123123" }
      
    • multipart/form-data

      一种特殊的请求体格式,上传文件一般选择该格式

请求体:

包含了要给服务器传递的正文数据。请求体是可以省略的

请求体的格式:

  • application/x-www-form-urlencoded:属性名=属性值&属性名=属性值...
  • application/json:{"属性名":"属性值", "属性名":"属性值"}
  • multipart/form-data:使用某个随机字符串作为属性之间的分隔符,通常用于文件上传

请求头中附带一个属性Content-Type来描述请求体使用的格式,不然服务器不知道如何解析

Content-Type: application/x-www-form-urlencoded
Content-Type: application/json
Content-Type: multipart/form-data

响应的消息格式:

响应消息格式包含三部分:

image.png

响应行:

响应行是整个响应字符串的第一行,响应行包含两个部分:

  • 协议版本:表示服务器打算和客户端用什么协议通信
  • 状态码、状态消息:表示服务器对当前请求的状态

状态码:

通常,状态码和状态消息是一一对应的,比如状态码 200 的消息就是 OK。

状态码分为五类:

分类分类描述
1**信息,服务器收到请求,需要请求者继续执行操作
2**成功,操作被成功接收并处理
3**重定向,需要进一步的操作以完成请求
4**客户端错误,请求包含语法错误或无法完成请求
5**服务器错误,服务器在处理请求的过程中发生了错误

通常认为,0~399 之间的状态码都是正常的,其他是不正常的

常见的状态码有:

  1. 200 OK:一切正常。

  2. 301 Moved Permanently:资源已被永久重定向。(有浏览器缓存,下次请求直接请求新地址)

    你的请求我收到了,但是呢,你要的东西不在这个地址了,我已经永远的把它移动到了一个新的地址,麻烦你取请求新的地址,地址我放到了响应头的Location中了

  3. 302 Found:资源已被临时重定向。(没有浏览器缓存,还是会根据请求头中的地址再次发送请求)

    你的请求我收到了,但是呢,你要的东西不在这个地址了,我临时的把它移动到了一个新的地址,麻烦你取请求新的地址,地址我放到了请求头的Location中了

  4. 304 Not Modified:文档内容未被修改。

    你的请求我收到了,你要的东西跟之前是一样的,没有任何的变化,所以我就不给你结果了,你自己就用以前的吧。啥?你没有缓存以前的内容,关我啥事

  5. 400 Bad Request:语义有误,当前请求无法被服务器理解。

    你给我发的是个啥啊,我听都听不懂

  6. 403 Forbidden:服务器拒绝执行。

    你的请求我已收到,但是我就是不给你东西

  7. 404 Not Found:资源不存在。

    你的请求我收到了,但我没有你要的东西

  8. 500 Internal Server Error:服务器内部错误。

    你的请求我已收到,但这道题我不会,解不出来,先睡了

响应头:

和请求头一样,响应头也是由很多个键值对组成的,具体有哪些键值对,完全取决于服务器程序

目前,对我们最重要的键值对是Content-Type,它有多种取值,表示响应体的数据类型。

在 B/S 模式中,浏览器会自动根据响应头中Content-Type的取值,决定如何处理响应体。

  1. text/plain: 普通的纯文本,浏览器通常会将响应体原封不动的显示到页面上
  2. text/html:html 文档,浏览器通常会将响应体作为页面进行渲染
  3. text/javascriptapplication/javascript:js 代码,浏览器通常会使用 JS 执行引擎将它解析执行
  4. text/css:css 代码,浏览器会将它视为样式
  5. image/jpeg:浏览器会将它视为 jpg 图片
  6. attachment:附件,浏览器看到这个类型,通常会触发下载功能
  7. 其他MIME类型
响应体:

响应的主体内容