蓝旭工作室第六周预习:网络请求

一、JSON数据类型

什么是JSON

        JSON(JavaScript Object Notation,JavaScript 对象表示法) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

JSON 的语法规则很简单:

  1. 数据在名称/值对中:数据由键(在双引号中)和值(可以是字符串、数字、对象、数组、布尔值或 null)成对出现。
  2. 数据由逗号分隔:在对象或数组中,值之间由逗号分隔。
  3. 大括号保存对象:对象保存在大括号 {} 中,对象可以包含各种数据,包括数组。
  4. 方括号保存数组:数组保存在方括号 [] 中,数组可以包含对象或其他数组。

例如: 

{  
  "name": "pp",  
  "age": 18,  
  "car": null,  
  "hobbies": ["dancing", "cinema", "running"],   
  "boyfriend": {  
    "name": "lamb",  
    "age":18  
  }  
}

JSON数据类型

简单数据类型
数字型(Number)JavaScript 中的双精度浮点型格式
字符串型(String)零个或多个Unicode字符或转义字符
布尔型(Boolean)true或false
空(Null)空值使用null表示
复杂数据类型
数组(Array)由方括号括起来的一组值构成
对象(Object)由花括号括起来的逗号分割的成员构成

数字型   

        数字型(Number)数据是无符号的整数或浮点数。JSON中的数字型数据遵循JavaScript中的数字表示法,但JSON不支持JavaScript中的特殊数值(如NaN和Infinity)。

        JSON中的数字型可以是整数(int)或浮点数(float)。整数可以是正数、负数或零。浮点数可以使用科学计数法表示。

注意:虽然JSON在语法上不区分整数和浮点数(都是使用数字表示),但在解析时,许多编程语言会将没有小数部分的数字当作整数处理,而将有小数部分的数字当作浮点数处理。此外,JSON不支持八进制和十六进制字面量。所有的数字都必须以十进制表示。

例如:

{  
  "integer": 123,           // 整数  
  "negative_integer": -456, // 负整数  
  "zero": 0,                // 零  
  "float": 123.456,         // 浮点数  
  "float_scientific": 7.89e2 // 浮点数,科学计数法表示,等同于789  
}

字符串型

        字符串型(String)数据需要使用双引号(" ")来定义,不能使用单引号或其他类型的引号。字符串中可以包含零个或多个Unicode字符,并且可以包含一些转义字符,如反斜线(\)用于转义特殊字符。例如:

{  
  "name": "张三",           // 简单的字符串  
  "quote": "这是一个\"引号\"", // 使用反斜线转义双引号  
  "newLine": "第一行\n第二行",  // 使用\n插入换行符  
  "unicode": "你好\u4E16\u754C" // 使用\u表示Unicode字符  
}

布尔型

        布尔型(Boolean)数据只有两个可能的值: ture 和 false。这两个值都是小写,并且不使用引号。例如:

{  
  "isbird": true,  
  "isdog": false  
}

null

        null是一个特殊的值,表示没有值或空引用。在JSON中,null可以被用作任何JSON值的占位符,包括对象成员、数组元素等。例如:

{  
  "name": "张三",  
  "age": null // 表示年龄未知或未设置  
}

数组

        数组用于表示一个有序的值集合。由方括号[]包围,数组中的每个元素之间使用逗号,分隔。数组的值可以是JSON支持的任何数据类型,包括字符串、数字、布尔值、null、对象或数组本身(即嵌套数组)。例如:

{  
  "name": "pp",  
  "scores": [90, 85, 92, 78], // 数字数组 
  "nestedArray": [[1, 2], [3, 4], [5, 6]], // 嵌套数组  
  "mixedArray": ["apple", 3.14, true, null, {"key": "value"}] // 混合类型数组  
}

对象

        对象被表示为键值对(key-value pair)的集合,其中键是字符串,值可以是字符串、数字、对象、数组、布尔值、null或其他JSON值。对象用花括号{}包围。 例如:

{  
  "name": "pp",  
  "age": 18,  
  "car": null,  
  "hobbies": ["dancing", "cinema", "running"]
}

二、HTTP

        HTTP(Hypertext Transfer Protocol)是超文本传输协议的缩写,它是一种应用层协议,用于从万维网(WWW: World Wide Web)服务器传输超文本到本地浏览器的传送协议。

        HTTP 协议是建立在 TCP/IP 协议之上的请求/响应模型,客户端(通常是浏览器)向服务器发送一个请求,服务器返回响应。这个响应包含了请求的资源(如 HTML 文件、图片、视频等)以及其他一些信息(如 HTTP 状态码、响应头部等)。

        HTTP 协议的主要特点包括:

  1. 无连接:HTTP 协议无连接,即每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  2. 无状态:HTTP 协议是无状态的。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
  3. 支持B/S模式:HTTP 支持客户端/服务器模式。
  4. 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有 GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS、CONNECT 等几种。每种方法规定了客户与服务器联系的类型不同。由于 HTTP 协议简单,使得 HTTP 服务器的程序规模小,因而通信速度很快。
  5. 灵活:HTTP 允许传输任意类型的数据。传输的类型由 Content-Type 加以标记。

        HTTP的主要作用是在互联网或内网中传输超文本(如HTML页面),以支持客户端(如Web浏览器)和服务器之间的通信。以下是HTTP协议的主要作用:

  1. Web页面传输:HTTP协议用于从Web服务器传输HTML页面到客户端的Web浏览器。当你在浏览器中输入一个网址(URL)时,浏览器会向该URL对应的服务器发送一个HTTP请求,服务器接收到请求后会返回相应的HTML页面,浏览器再将其渲染并展示给用户。

  2. 资源请求与响应:HTTP不仅用于传输HTML页面,还可以用于请求和传输其他类型的资源,如图片、音频、视频、CSS样式表、JavaScript脚本等。浏览器会根据HTML页面中的引用(如<img>标签中的src属性)向服务器发送请求,以获取这些资源。

  3. 会话管理:HTTP协议支持会话管理,允许服务器跟踪用户的会话状态。虽然HTTP本身是无状态的,但可以通过在请求和响应中携带会话标识符(如Cookie或Session ID)来实现会话跟踪。

  4. 缓存管理:HTTP协议包含了对缓存的支持,允许服务器和客户端对资源进行缓存以提高性能。服务器可以通过在响应头中设置缓存控制指令来告诉客户端如何缓存资源,而客户端则会根据这些指令来决定是否缓存资源以及缓存多长时间。

  5. 内容协商:HTTP协议支持内容协商,允许客户端和服务器就资源的表示形式进行协商。例如,客户端可以请求以特定语言或字符集表示的资源,而服务器则可以根据客户端的请求返回相应的资源表示。

HTTP请求

GET请求指定的页面信息,并返回实体主体
HEAD类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
POST

向指定资源提交数据进行处理请求(例如提交表单或者上传文件)

数据被包含在请求体中

POST请求可能会导致新的资源的建立和/或已有资源的修改

PUT从客户端向服务器传送的数据取代指定的文档的内容
DELETE请求服务器删除指定的页面
CONNECTHTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
OPTIONS允许客户端查看服务器的性能
TRACE回显服务器收到的请求,主要用于测试或诊断

一个GET请求的例子:

GET /index.html HTTP/1.1  
Host: www.example.com  
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36  
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9  
...

一个POST请求的例子:

POST /submit_form HTTP/1.1  
Host: www.example.com  
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36  
Content-Type: application/x-www-form-urlencoded  
Content-Length: 27  
  
name=John+Doe&age=30

 在这个POST请求的示例中,请求主体包含表单数据name=John+Doe&age=30

 HTTP消息结构

        HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。

        一个HTTP"客户端"是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。

        一个HTTP"服务器"同样也是一个应用程序(通常是一个Web服务,如Apache Web服务器或IIS服务器等),通过接收客户端的请求并向客户端发送HTTP响应数据。

        HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。

        一旦建立连接后,数据消息就通过类似Internet邮件所使用的格式[RFC5322]和多用途Internet邮件扩展(MIME)[RFC2045]来传送。

HTTP请求格式

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。如图:

        1.请求行

  • HTTP方法(如GET、POST、PUT、DELETE等)
  • 请求的URL
  • HTTP协议版本(如HTTP/1.1)

        2.请求头部

  • 包含关于请求的各种元数据,如User-Agent(发送请求的浏览器类型)、Content-Type(请求主体的媒体类型)、Accept(客户端能理解的媒体类型)等。

        3.空行 

  • 在请求头部和请求体之间有一个空行,用于分隔它们。这个空行是必需的,它告诉服务器请求头部信息已经结束,接下来的部分是请求体(如果有的话)。 

        4.请求数据

  • 对于POST和PUT请求,主体通常包含要发送到服务器的数据。数据可以是表单数据、JSON数据等,具体取决于Content-Type头部字段的值。

例如: 

POST /api/user HTTP/1.1    //请求行,一个HTTP POST请求,请求的资源路径是/api/user,使用的HTTP协议版本是1.1  
Host: example.com  
Content-Type: application/json  
Content-Length: 41      //请求头部,用于描述请求的属性
  //空行
{  
  "name": "John Doe",  
  "age": 30,  
  "email": "john.doe@example.com"  
}    //请求体,一个JSON对象,包含了要发送给服务器的数据

 HTTP响应格式

HTTP响应也由四个部分组成,分别是:状态行、响应头部、空行和响应体。

  1. 状态行(Status Line)

    • HTTP协议版本(如HTTP/1.1)
    • 状态码(Status Code)
    • 状态消息(Reason-Phrase)

    状态码是一个三位数的数字,用于表示请求的处理结果。常见的状态码有:

    • 200 OK:请求成功
    • 404 Not Found:请求的资源不存在
    • 500 Internal Server Error:服务器内部错误
  2. 响应头部(Response Headers)

    响应头部包含了关于响应的各种元数据,如Content-Type(响应体的媒体类型)、Content-Length(响应体的长度)、Server(服务器类型)等。

  3. 响应体(Response Body)

    响应体包含了服务器返回给客户端的数据,这些数据可以是HTML文档、图片、JSON数据等,具体取决于请求的资源和服务器的配置。

响应状态码

HTTP状态码用于表示HTTP请求的处理结果。它们被分为五类,范围从100到599:

  • 1xx(信息性状态码):接收的请求正在处理。
  • 2xx(成功状态码):请求正常处理完毕。
  • 3xx(重定向状态码):需要进行附加操作以完成请求。
  • 4xx(客户端错误状态码):请求包含错误或无法完成。
  • 5xx(服务器错误状态码):服务器在处理请求的过程中发生了错误。
HTTP/1.1 200 OK  //状态行,一个HTTP/1.1协议的响应,状态码为200,表示请求成功
Content-Type: text/html; charset=utf-8  
Content-Length: 1234  
Server: Apache/2.4.41  //响应头部,描述响应的属性
  //空行
<!DOCTYPE html>  
<html>  
<head>  
    <title>Example Page</title>  
</head>  
<body>  
    <h1>Hello, World!</h1>  
    <!-- 页面内容 -->  
</body>  
</html>    //响应体,一个HTML文档,包含了服务器返回给客户端的页面内容

 

  • 42
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值