http请求响应的一些内容
1、一些概念
1.1IP地址
设备在某一个网络中的地址,目前最常见的格式: [0-255].[0-255].[0-255].[0-255] 即为四个 0-255 的数字组
成。
作用就是标识一个网络设备(计算机、手机、电视)在某一个具体的网络当中的地址。
127.0.0.1 是本地回环地址
1.1.1 单个网络情况
在单个局域网下,结构非常简单,就是我们所连接的网络设备(网关)给我们分配了一个地址,在这个范围之内我们都可以通过这个地址找到我们的这个设备。
如果设备没有连接任何网络情况下,我们会有一个本地回环地址 127.0.0.1
1.1.2多个网络情况
但是当一个设备同时处于多个网络下(比如同时连接了有线网卡和无线网卡),就会变得稍微复杂一点:
例如:
小明这个同学同时报名了两个课程,在 A 班级小明是班长,所有 A 班级的同学都管他叫班长(叫班长就能找到他)。而在 B 班级小明是课代表,所有 B 班的同学都管他叫课代表(叫课代表就能找到他)。
同样的一个人在不同的环境有不同的身份,这些身份只有特定的环境才生效。
1.2域名
由于 IP 地址都是没有规律的一些数字组成的,很难被人记住,不利于广泛传播,所以就有人想出来要给 IP 起名字(别名)。域名是需要花钱注册的
1.3DNS
通过宽带运营商提供的服务器解析一个域名背后对应的 IP,这个过程叫做 DNS 寻址,帮你完成 DNS 寻址过程的服务器叫做 DNS 服务器。
1.3.1hosts 文件
操作系统在发起对 DNS 服务器的查询请求之前,会优先检查本机的 hosts 文件。如果这个文件中包含了对当前需要解析的域名的配置,则不再发起对 DNS 服务器的请求,直接使用 hosts 文件中的配置。
文件所在路径:
Windows: C:\Windows\System32\drivers\etc\hosts
macOS: /etc/hosts
注意:
本机的 hosts 文件配置只能到影响本机的 DNS 寻址
只有以管理员权限运行的编辑器才有权利修改 hosts 文件
1.4端口
计算机本身是一个封闭的环境,就像是一个大楼,如果需要有数据通信往来,必须有门,这个门在术语中就叫端口,每一个端口都有一个编号,每台计算机只有 65536 个端口(0-65535)。
一般我们把“占门”的过程叫做监听
可以通过在命令行中运行: netstat -an 命令监视本机端口使用情况:
2、求响应流程
- 用户打开浏览器
- 地址栏输入我们需要访问的网站网址(URL)
- 浏览器通过 DNS 服务器获取即将访问的网站 IP 地址
- 浏览器发起一个对这个 IP 的请求
- 服务端接收到这个请求,进行相应的处理
- 服务端将处理完的结果返回给客户端浏览器
- 浏览器将服务端返回的结果呈现到界面上
2.1浏览器和服务器做了什么
3、HTTP
3.1概要
3.1.1定义
HTTP(HyperText Transfer Protocol,超文本传输协议)最早就是计算机与计算机之间沟通的一种标准协议,这种协议限制了通讯内容的格式以及各项内容的含义。
随着时代的发展,技术的变迁,这种协议现在广泛的应用在各种领域,也不仅仅局限于计算机与计算机之间,手机、电视等各种智能设备很多时候都在使用这种协议通讯,所以一般现在称 HTTP 为端与端之间的通讯协议。
Web 属于 B/S 架构的应用软件,在 B/S 架构中,浏览器与服务器沟通的协议就是 HTTP 协议,作为一个合格的 Web 开发者,了解 HTTP 协议中约定的内容是一门必修课。
应用软件架构一般分为两类:
B/S 架构:Browser(浏览器) ←→ Server(服务器),这种软件都是通过浏览器访问一个网站使用,
服务器提供数据存储等服务。
C/S 架构:Client(客户端) ←→ Server(服务器),这种软件通过安装一个软件到电脑,然后使用,服务器提供数据存储等服务。
3.1.2约定内容
请求 / 响应报文格式
请求方法 —— GET / POST
响应状态 —— 200 / 404 / 302 / 304
预设的请求 / 响应
3.1.3约定形式
- 客户端通过随机端口与服务端某个固定端口(一般为80)建立连接 三次握手
- 客户端通过这个连接发送请求到服务端(这里的请求是名词)
- 服务端监听端口得到的客户端发送过来的请求
- 服务端通过连接响应给客户端状态和内容
3.2核心概念
3.2.1. 报文
请求报文
(1)请求行
GET /demo.php HTTP/1.1
请求方式 + 空格 + 请求路径 + 空格 + HTTP 协议版本
(2)请求头
客户端想要告诉服务端的一些额外信息,以下为常见的请求头:
(3)请求体
这次请求客户端想要发送给服务端的数据正文,一般在 GET 请求时很少用到,因为 GET 请求主观上都是去“拿东西”。
响应报文
(1)状态行
HTTP/1.1 200 OK
HTTP 协议版本 + 空格 + 状态码 + 空格 + 状态描述
(2)响应头
服务端想要告诉客户端的一些额外信息,常见的有以下:
如果需要在程序中设置自定义的响应头(不是预设的),建议使用 X-Property-Name
(3)响应体
这次请求服务端想要返回给客户端的数据正文,一般返回的都是 HTML,也可以返回 JavaScript 或者 CSS(需要修改响应头中的响应类型)。
4、状态码
状态代码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。
1xx:指示信息 —— 表示请求已接收,继续处理。
2xx:成功 —— 表示请求已被成功接收、理解、接受。
3xx:重定向 —— 要完成请求必须进行更进一步的操作。
4xx:客户端错误 —— 请求有语法错误或请求无法实现。
5xx:服务器端错误 —— 服务器未能实现合法的请求。
常见状态代码、状态描述的说明如下。
200 OK:客户端请求成功。
400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
401 Unauthorized:请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用。
403 Forbidden:服务器收到请求,但是拒绝提供服务。
404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
500 Internal Server Error:服务器发生不可预期的错误。
503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。