应用协议----网络基础(二)

URL

URL(uniform resource locator,统一资源定位符)用于定位网络服务

url是一个固定格式的字符串

它表达了:

从网络中的哪台计算机(domain)中的哪个程序(port)寻找哪个服务(path),并标明了获取服务的具体细节(path),以及要用什么样的协议通信(schema)

其中有些细节:

  • http的默认的端口80,默认端口可省略
  • https的默认端口443,默认端口可省略
  • schema、path、domain是必填的,其他的可以根据实际情况填写

HTTP

超文本传输协议(Hypertext Transfer Protocol)是一种用于在Web上进行通信的应用层协议。它是一种无状态、基于请求-想要模式的协议,常用于浏览器雨服务器之间的通信。

99%的情况下,前端开发接触的都是HTTP协议。

该协议规定了两个方面的内容:

  • 传递消息的模式
  • 传递消息的格式

传递消息的模式:

http采用的是请求-响应的消息传递模式,发起请求的成为客户端,接收请求并完成响应的称为服务端。【请求-响应】完成后,一次交互结束。

传递消息的格式:

如上图所示,http的消息格式是一种纯文本的格式,文本分为三个部分:

  • 请求行:包含请求方法,请求的url和协议版本,如:GET /example.html HTTP/1.1
  • 请求头:包含一系列的健值对,每对键值都表示一个请求的特定属性或者要求,如:Accept: text/html,application/xhtml+xml
  • 空行:用来分隔请求头部和请求体的空行
  • 请求体(可选):在一些post方法中,请求体可以包含要发送给服务器的数据
    GET /example.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/95.0.4638.54 Safari/537.36
    Accept: text/html,application/xhtml+xml

而相应格式恰好与之对应,包括

  • 状态行:包含响应的状态码和状态信息,格式为:<协议版本> <状态码> <状态信息>
  • 响应头部:包含一系列的键值对,每对键值对都表示一个响应的特定属性或元数据,格式为:<头部字段名>: <字段值>
  • 空行:用于分隔响应头部和响应体的空行
  • 响应体:包含服务器返回的实际数据,可以是HTML页面、文本、图片等Ï
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1274
Date: Tue, 17 May 2023 10:00:00 GMT

<!DOCTYPE html>
<html>
<head>
  <title>Example Page</title>
</head>
<body>
  <h1>Welcome to the Example Page!</h1>
  <!-- 页面其他内容 -->
</body>
</html>

vscode中的rest client可以更直观的查看http请求

一些常用的关键信息

请求方法:

get:获取

post:提交

delete:删除

put:修改

面试题:get和post有什么区别

一般被问到这个问题 都会从缓存、数据长度限制、安全性等方面去回答,但是根据http1.1 RC7231规范描述 ,各种请求方式之间并没有什么区别,仅仅代表本次请求的【愿望】

以下列举一些常见的请求头

字段名 说明 示例
Accept 能够接受的回应内容类型(Content-Types) Accept: text/plain
Accept-Charset 能够接受的字符集 Accept-Charset: utf-8
Accept-Encoding 能够接受的编码方式列表 Accept-Encoding: gzip, deflate
Accept-Language 能够接受的回应内容的自然语言列表 Accept-Language: en-US
Authorization 用于超文本传输协议的认证的认证信息 Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Cache-Control 用来指定在这次的请求/响应链中的所有缓存机制 都必须 遵守的指令 Cache-Control: no-cache
Connection 该浏览器想要优先使用的连接类型 Connection: keep-alive Connection: Upgrade
Cookie 服务器通过 Set- Cookie (下文详述)发送的一个 超文本传输协议Cookie Cookie: $Version=1; Skin=new;
Content-Length 以 八位字节数组 (8位的字节)表示的请求体的长度 Content-Length: 348
Content-Type 请求体的 多媒体类型

Content-Type: application/x-www-form-urlencoded(默认的表单数据提交格式,将表单字段和值编码为URL参数格式)、

application/json(json格式,常用于发送和接受Json数据)、

application/xml(xml格式)、

multipart/form-data(用于上传文件和发送包含文件的表单数据,支持文件和文本字段的混合)、

text/plain(文本数据)、

application/octet-stream(二进制文件的字节流)、

image/jpeg:表示JPEG格式的图片,文件扩展名通常为.jpg或.jpeg。

image/png:表示PNG格式的图片,文件扩展名通常为.png。

image/gif:表示GIF格式的图片,文件扩展名通常为.gif。

image/bmp:表示BMP格式的图片,文件扩展名通常为.bmp。

image/tiff:表示TIFF格式的图片,文件扩展名通常为.tiff或.tif。

image/webp:表示WebP格式的图片,文件扩展名通常为.webp。

Date 发送该消息的日期和时间 Date: Tue, 15 Nov 1994 08:12:31 GMT
Expect 表明客户端要求服务器做出特定的行为 Expect: 100-continue
Host 服务器的域名(用于虚拟主机 ),以及服务器所监听的传输控制协议端口号 Host: en.wikipedia.org:80 Host: en.wikipedia.org
If-Match 仅当客户端提供的实体与服务器上对应的实体相匹配时,才进行对应的操作。主要作用时,用作像 PUT 这样的方法中,仅当从用户上次更新某个资源以来,该资源未被修改的情况下,才更新该资源 If-Match: "737060cd8c284d8af7ad3082f209582d"
If-Modified-Since 允许在对应的内容未被修改的情况下返回304未修改 If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
If-None-Match 允许在对应的内容未被修改的情况下返回304未修改 If-None-Match: "737060cd8c284d8af7ad3082f209582d"
If-Range 如果该实体未被修改过,则向我发送我所缺少的那一个或多个部分;否则,发送整个新的实体 If-Range: "737060cd8c284d8af7ad3082f209582d"
Range 仅请求某个实体的一部分 Range: bytes=500-999
User-Agent 浏览器的浏览器身份标识字符串 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/21.0
Origin 发起一个针对 跨来源资源共享 的请求 Origin: http://www.example-social-network.com

常见的响应头-Content-Type

Content-Type标注了附带的响应体是什么格式

  1. text/plain: 普通的纯文本
  2. text/html:html文档
  3. text/javascript 或 application/javascript:js代码
  4. text/css:css代码
  5. image/jpeg:jpg图片
  6. attachment:附件
  7. 其他MIME类型

 

posted @ 2023-05-26 15:42  女神怪阿姨  阅读(58)  评论(0)    收藏  举报