HTTP 协议
2022-02-09 本文已影响0人
Gakki0725
作者:Gakki
01. HTML 简介
- HTTP 协议是 Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
- HTTP 是一个基于 TCP/IP 通信协议来传递数据。HTTP 是一个属于应用层的面向对象的协议。
- HTTP 协议工作于客户端-服务端架构为上。浏览器作为 HTTP 客户端通过 URL 向 HTTP 服务端即 WEB 服务器发送所有请求。WEB 服务器根据接收到的请求后,向客户端发送响应信息。
02. 主要特点
- 简单快速:客户向服务器发送请求服务时,只需传送请求方法和路径。请求方法常用的有:GET、POST、DELETE等。由于 HTTP 协议简单,所以 HTTP 服务器的程序规模小,因此通信速度很快。
- 灵活:HTTP 协议允许传输任意类型的数据对象。传输的类型由 Content-Type 加以标记。
- 无连接:限制每次连接只处理一个请求。服务器处理完请求,并收到客户的应答后,即断开连接,采用这种方式可以节省传输时间。但是却不利于客户端与服务器保持会话连接。
- 无状态:是指协议对于事物处理没有记忆能力。无状态意味着如果后续处理需要前面的信息,它必须重新传递,这样就可能导致每次连接传递的数据量增大。另一方面,在服务器不需要先前信息时,它的应答就比较快速。为了弥补这个缺点,产生了两个 HTTP 状态的技术。即:Cookie 与 Session 。
- 支持 B/S 及 C/S 模式
03. URL
- URL(Uniform Resource Locator):统一资源定位符;负责标识万维网上的各种文档,并使每个文档在整个万维网的范围内具有唯一的标识符 URL。
- 下面以这个URL为例,介绍下普通URL的各部分组成:
https://www.jianshu.com:80080/u/3f6551b9da15.html?id=312312&page=3#work
一个完整的 URL 包括以下部分:- 传输协议:用来传输客户端和服务器交互信息的;常用的传输协议:HTTP、HTTPS、FTP;本例中使用的是 HTTPS 协议。在 " https " 后面的 “ // ” 为分隔符。
- 域名:该 URL 的域名部分为“www.jianshu.com”。一个 URL 中,也可以使用IP地址作为域名使用。
- 端口部分:用来区分同一台服务器上不同的服务的标识,不同服务之间一般是不能使用相同的端口号的。HTTP 端口号 80;HTTPS 默认端口号 443;FTP 默认端口号 21。跟在域名后面的是端口号,域名和端口之间使用 “ : ” 作为分隔符,端口不是一个 URL 必须的部分,如果省略端口部分,将采用默认端口号。
- 路径:以 “ / ” 字符区别路径中的每一个目录名称。
- 查询:以 “ ? ” 为起到,每个参数以 “ & ” 隔开,再以 “ = ” 分开参数名称与数据。
- 片段:以 “ # ” 字符为起点。
04. 报文结构
请求报文响应报文
- HTTP 请求报文和响应报文都由三个部分组成,两种报文格式的区别是开始行不同。
GET 请求:
GET /users/3f6551b9da15/courses?page=1&count=10 HTTP/1.1
Host: www.jianshu.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:96.0) Gecko/20100101 Firefox/96.0
Accept: application/json
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
- 请求行:请求方法( GET ) + 统一资源标识符( /users/3f6551b9da15/courses?page=1&count=10 ) + 所使用的 HTTP 版本( HTTP/1.1 )。如:GET /users/3f6551b9da15/courses?page=1&count=10 HTTP/1.1。
- 请求头部:用来说明服务器要使用的附加信息。从第二行起为请求头部。
- 空行:请求头部后面的空行是必须的。即使第四部分的请求数据为空,也必须有空行。
- 请求数据:也叫主体,可以添加任意的其他数据。
GET 响应:
HTTP/1.1 200 OK
Server: Tengine
Date: Tue, 08 Feb 2022 10:14:34 GMT
Content-Type: application/json; charset=utf-8
Connection: keep-alive
Content-Encoding: gzip
- 状态行:HTTP 版本 ( HTTP/1.1 ) + 状态码 ( 200 ) + 状态码描述 ( OK ) ;如:HTTP/1.1 200 OK。
- 响应头部:用来说明客户端要使用的一些附加信息。字段名 + 冒号 + 值;如:Content-Type: application/json; charset=utf-8。
- 空行:消息报文后面的空行是必须的。
- 响应正文:服务器返回给客户端的文本信息。
HTTP 响应状态码
-
最常见的 HTTP 状态码:
- 200:请求成功
- 301:资源(网页等)被永久转移到其他 URL
- 404:请求的资源(网页等)不存在
- 500:内部服务器错误
-
HTTP 状态码分类共分为 5 类:
分类 | 描述 |
---|---|
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作已完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
常见的 HTTP 状态码
HTTP 常用的请求方式、区别和用途
TCP 连接与释放相关的核心问题
TCP/IP 三次握手四次分离
HTTP 常用的请求方式、区别和用途
HTTP和HTTPS协议?
常见的 HTTP 状态码
GET与POST的区别?
关于Token、Session、Cookie的区别
SSL认证与CA认证的区别