那些简单的HTTP协议

本文正在参与 “网络协议必知必会”征文活动


1. 什么是HTTP?

  • HTTP(超文本传输协议):是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII码形式给出;而消息内容则具有一个类似MIME的格式。

什么是文本?文本就是html,字符串等等 而超文本则是图片,音乐,视频等等 http端口号是80

2. TCP/IP协议基础

  • TCP/IP协议中最重要的就是分层,分为应用层,传输层,网络层,链路层

应用层向用户提供应用服务。其中应用服务包括(HTTP协议,FTP协议,DNS服务) 传输层向应用层提供数据传输。该层包括两个协议,TCP(传输控制协议)和UDP(用户数据报协议) 网络层规定了通过什么传输路线将数据包传给对方计算机。(数据包是网络传输的最小数据单位) 链路层用来连接网络的硬件部分。(硬件包含控制系统,网卡,硬件的设备驱动和光纤等物理可见部分)

  • HTTP请求图解

发送端从应用层向下走,接收端从链路层向上走。直到传输到应用层,才算接受到HTTP请求。 发送端在向接收端发送请求时,每经过一层都会被添加上该曾的首部信息;接收端则在每一层删掉头部信息,这个过程被称为封装

  • 区分IP与IP地址

IP是网际协议,位于网络层。具有把数据包传送给对方的功能。其中传送的条件,就包括IP地址MAC地址(是一个用来确认网络设备位置的位址,每一个网卡都有唯一MAC地址,是基于物理的) IP地址就像是我们的家庭住址一样,如果你要写信给一个人,你就要知道他(她)的地址,这样邮递员才能把信送到。计算机发送信息就好比是邮递员,它必须知道唯一的“家庭地址”才能不至于把信送错人家。只不过我们的地址是用文字来表示的,计算机的地址用二进制数字表示

  • TCP三次握手

TCP位于传输层,会把大数据割成报文段为单位的数据包(方便传输),而且能够确认数据是否被送达到对方。 为了确保数据能送达对方,TCP采用三次握手 图解 握手中使用了TCP标志,SYN和ACK,若握手过程在某个阶段中断,则TCP协议会再次以相同的顺序发送相同的数据包。

  • 同样位于应用层的DNS服务

DNS服务提供通过域名查找IP地址,和通过IP地址查找域名的功能。 (我们既可以通过域名也可以通过IP地址访问对方的计算机,但是IP地址不符合我们的记忆习惯,所以推出了域名)

  • URL(统一资源定位符)

简单理解,假如我们要访问www.baidu.com,那么www.baidu.com就是URL,它是我们访问web页面的网页地址。

简单的HTTP协议

1. 请求和响应

HTTP协议规定,请求从客户端发出,响应从服务器返回。

1.1 客户端发送请求报文

  • HTTP请求由三部分构成,请求行、请求首部、请求主体
(请求行 ↓)
POST(方法)   /from/entry(URL)   HTTP/1.1(协议版本)
(请求首部字段 ↓)
HOST:hackr.jp
Connection:keep-alive
(内容实体 ↓)
name=ueno&age=37
复制代码

1.2 服务器响应报文

  • HTTP响应也由三部分构成。分别是 状态行、响应首部、响应主体
(状态行 ↓)
HTTP/1.1(协议版本)   200(状态码) OK(状态码的原因短语)
(响应首部字段 ↓)
Date:。。。
Content - Length:
Content - Type:
(主体) ↓
<html>
...
复制代码

2. HTTP是不保存状态的协议

  • 什么是不保存状态?

HTTP不对请求和响应报文进行保存,请求响应结束就谁也不记得这件儿事了。

  • 为了实现保存状态,引入了Cookie技术

3. HTTP方法

  • 注意方法一定要用大写
方法 功能
GET 请求访问资源
POST 传输实体的主体
HEAD 返回响应首部
PUT/DELETE 上传和删除文件,一般web网站不使用
OPTIONS 查询针对URL指定资源支持的方法
TRACE 将之前的请求通信返回给客户端
CONNECT 要求用隧道协议连接代理 格式:CONNECT 代理服务器名:端口号 HTTP版本
## 4. HTTP状态码
  • 1xx:指示信息:表示请求已接收,继续处理
  • 2xx:成功:表示请求已被成功接受、理解、接受
状态码 响应结果
200 OK 表示客户端发来的请求都被正常处理了
204 No Content 表示客户端请求被正常处理,但是不返回实体的主体部分(一般用于客户端只向服务器发送信息)
206 Partial Content 表示客户端进行了范围请求
  • 3xx:重定向:要完成请求必须进行更进一步的操作
状态码 响应结果
301 Moved Permanently 永久重定向
302 Found 临时重定向
303 See Other 与302功能一直,但是这里明确强调要用GET方法获取资源
304 Not Modified 资源已找到,但未符合条件请求
  • 4xx:客户端错误:请求有语法错误或请求无法实现
状态码 响应结果
400 Bad Request 表示请求报文中存在语法错误
401 Unauthorized 表示发送的请求需要通过HTTP认证
403 Forbidden 表示不允许访问资源
404 Not Found 表示服务器上没有请求的资源
  • 5xx:服务器端错误:服务器未能实现合法的请求
状态码 响应结果
500 Internal Server Error 表示服务器在执行请求的时候发生了错误
503 Service Unavailable 表示服务器超负载或停机维护,无法处理请求
不少状态码返回的都是错误的,一般用户不会察觉,经常会出现web应用程序错误还返回200 OK 的情况。

Guess you like

Origin juejin.im/post/7034366608143286280