本篇内容包括:HTTP 协议定义及其特点概述、关于 URL 定义及分类概述、Request 请求、Response 响应 以及 浏览器访问一个网站的全过程 等内容…
HTTP(HyperText Transfer Protocol) 即 超文本传输协议,它是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP 是万维网(www)的数据通信的基础。
HTTP 作为一个应用层协议,它由请求和响应两部分构成,是一个标准的个客户端和服务器模型,它的主要特点:支持客户端/服务器模型、简单快速、灵活、无连接、无状态
客户端向服务器发送服务请求时,只需传路径和请求方法。请求方法包括有 GET、POST、HEAD 等。每种方法规定了客户端与服务器联系的不同类型。由于 HTTP 协议简单,使得 HTTP 服务器的程序规模小,因而通信速度很快
HTTP 允许传输任意类型的数据对象,正在传输的类型由 Content-Type 加以标记,最常见的 4 种 Content-Type 的取值如下:
无连接的含义是限制每次连接只处理一个请求,服务器处理完客户端的请求,然后响应,并收到应答之后,就断开连接,这种方式可以节省传输时间。
HTTP 协议是无状态协议,无状态是指协议对于事务处理没有记忆能力,这种方式的一个坏处就是,如果后续的处理需要用到之前的信息,则必须要重传,这样就导致了每次连接传输的数据量增大。好处就是,如果后续的连接不需要之前提供的信息,响应就会比较快。而为了解决 HTTP 的无状态特性,出现了 Cookie 和 Session 技术.
URL(Uniform Resource Locator),即 统一资源定位器,是因特网的万维网服务程序上用于指定信息位置的表示方法。在万维网(www)上,每一信息资源都有统一的且在网上唯一的地址,该地址就叫 URL,它是 www 的统一资源定位标志,就是指网络地址(就是我们俗称的网址)。
URL 是互联网上标准资源的地址,可以从互联网上得到的资源的位置和访问方法的一种简洁的表示。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
URL由三部分组成:资源类型、存放资源的主机域名、资源文件名。也可认为由4部分组成:协议、主机、端口、路径。
http://host[:port]/[a_path]
http://IP(主机名/域名):端口/访问的资源路径
Request 请求:
请求方式 请求资源 协议/版本
下面是一个请求的报文:
其中:
param1=value1¶m2=value2
的键值对形式编码成一个格式化串,它承载多个请求参数的数据。不但报文体可以传递请求参数,请求 URL也可以通过类似于 /chapter15/user.html? param1=value1¶m2=value2
的方式传递请求参数。常见的报文头的属性:
字段 | 说明 | 示例 |
---|---|---|
Accept | 可接收的响应内容类型 | Accept:text/plain (文本类型) |
Accept-Charset | 可接收的字符集 | Accept-Charset: utf-8 |
Accept-Encoding | 可接受的响应内容的编码方式 | Accept-Encoding: gzip, deflate |
Accept-Language | 可接受的响应内容语言列表 | Accept-Language: en-US |
Accept-Datetime | 可接受的按照时间来表示的响应内容版本 | Accept-Datetime: Oct, 26 Oct 2022 13:31:00 GMT |
Authorization | HTTP协议中需要认证资源的认证信息 | Authorization: Basic OSdjJGRpbjpvcGVuIANlc2SdDE== |
Cache-Control | 请求/回复中的,是否使用缓存机制 | Cache-Control: no-cache |
Connection | 客户端想要优先使用的连接类型 | Connection: keep-alive Connection: Upgrade |
Content-Length | 以8进制表示的请求体的长度 | Content-Length: 348 |
Content-Type | 请求体的MIME类型 | Content-Type: application/x-www-form-urlencoded |
Date | 发送该消息的日期和时间 | Date: Oct, 26 Oct 2022 13:31:00 GMT |
Expect | 表示客户端要求服务器做出特定的行为 | Expect: 100-continue |
From | 发起此请求的用户的邮件地址 | From: user@qq.com |
Host | 服务器域名和端口号,默认端口可省略 | Host: www.baidu.com:80 or www.baidu.com |
If-Match | 主要用于PUT,实体匹配才可以操作 | If-Match: “9jd00cdj34pss9ejqiw39d82f20d0ikd” |
If-Modified-Since | 资源未被修改的情况下返回304未修改 | If-Modified-Since: Dec, 26 Dec 2015 17:30:00 GMT |
User-Agent | 浏览器的身份标识字符串 | User-Agent: Mozilla/ |
… | … | … |
# GET
GET 请求是最常见的一种请求方式,当客户端要从服务器中读取文档时,当点击网页上的链接或者通过在浏览器的地址栏输入网址来浏览网页的,使用的都是GET方式。
GET方法要求服务器将URL定位的资源放在响应报文的数据部分,回送给客户端。GET方法请求参数和对应的值附加在URL后面,利用一个?代表URL的结尾以及附带参数的开始,参数用key=value键值对的方式书写,参数和参数之间用&符号隔开.一般GET请求的参数的大小受限,最大不超过1024.由于参数明文的显示在了URL上面,因此不太适合传递私密的数据.
# POST
对于上面提到的不适合使用 GET 方式的情况,可以考虑使用 POST 方式,因为使用 POST 方法可以允许客户端给服务器提供信息较多
POST 方法将请求参数封装在 HTT P请求数据中,以名称/值的形式出现,可以传输大量数据,这样 POST 方式对传送的数据大小没有限制,而且也不会显示在 URL 中
# GET和POST的区别
# HEAD
HEAD 就像 GET,只不过服务端接受到 HEAD 请求后只返回响应头,而不会发送响应内容。当我们需要查看某个页面的状态的时候,使用 HEAD 是非常高效的,因为在传输的过程中省去了响应内容部分。
Ps1:HTTP是无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,HTTP使用的不是UDP协议(无连接)
Ps2:从HTTP/1.1起,默认都开启了Keep-Alive,保持连接特性,简单地说,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接
Ps3:Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间
HTTP 协议定义了 web 客户端如何从 web 服务器请求页面,以及服务器如何把页面传送给客户端。
HTTP协议采用了 请求/响应 模型,即客户端向服务器发送一个请求报文(请求报文包括请求的方法、url、协议版本,请求头部和请求数据),服务器以一个响应状态行作为响应(响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据)
协议/版本 状态码 状态码说明
HTTP 响应是由四部分构成: 响应行 响应头 空行 响应体
当我们使用浏览器访问一个网站时,其实是基于 HTTP 协议,浏览器作为客户端向服务器端发送一次请求,而服务器端在接收到这次请求后,给浏览器反馈一个响应。下面是具体的过程: