封面图片来自Google
概述
Http
超文本传输协议 HypeText Transfer Protocol
- 是一种用于分布式、协作式和超媒体传输的应用层协议。
HTTP
是万维网的数据通信的基础
http
是客户端与服务器做出请求和响应的标准(基于TCP)。
通常,由HTTP客户端发起一个请求,继而创建一个到服务器指定端口(默认80)的
TCP连接
。 HTTP服务器则在该端口上监听客户端的请求,一旦受到请求,就会向客户端返回一些响应,一般包含协议版本、HTTP状态码以及返回的内容
此外,在客户端和服务器中间还可能存在多个中间层,比如代理服务器、网关或者隧道等。
协议版本
- 1999.6 HTTP/1.1
- 2015.5 HTTP/2
- 2018 提出HTTP/3
基于QUIC
,标准制定中..
HTTP消息结构概述
- 客户端请求
- 请求行
- 请求头
- 空行
- 请求主体
body
Example
GET /hello.text HTTP/1.1 //请求行
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi //请求头部
//空行
//请求数据
复制代码
- 服务器响应
- 状态行
- 响应头
- 空行
- 响应正文
body
HTTP/1.1 200 OK //状态行
Date: Mon, 27 Jul 2009 12:28:53 GMT //消息报文
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain
//空行
//响应正文
复制代码
接下来会对一些常见的知识点进行展开
- 客户端请求
- HTTP协议8种请求类型
- 服务端响应
- 常见状态码
- 常见头字段
- 通用头
- 请求头
- 响应头
- 实体头
- 代理 (
Proxieds
) - HTTPS
- TLS加密
- SSL加密
- HTTP2/HTTP3
进一步
HTTP8种请求类型
HTTP/1.1协议种定义了8种方法,以不同的方式操作指定资源:
- GET
读取资源,不产生副作用
- HEAD
与GET
类似,区别在于不会包含响应正文
- POST
请求包含请求正文
- PUT
向指定资源位置上传其最新内容。
- TRACE
回显服务器收到的请求,主要用于测试或诊断
- OPTIONS
这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用'*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。
- CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。
常见响应状态码
1XX 消息
这一类状态码代表请求已经被接受,需要继续处理。这类响应是临时响应。
HTTP/1.0协议中没有定义1XX状态码,所以一般服务器禁止发送1XX响应码
2XX 成功
表示请求已成功被服务器接受、理解,并接受
-
200 OK
表示从客户端发来的请求在服务端被正确处理 -
204 No Content
服务器成功处理了请求,没有返回任何内容 (不含响应正文) -
205 Reset Content
表示请求成功,没有返回响应正文,与204的区别在于要求请求方重置内容 -
206 Partial Content
客户端进行指定内容范围的请求(断点下载)
3XX 重定向
这类状态码百事需要客户端采取进一步的操作才能完成请求。通常用来重定向,后续请求地址在响应的location
域中指明。
-
301 Moved Permanatly
永久重定向,表示资源已经被分配了新的URL -
302 Found
临时重定向,表示资源临时被分配了新的URL -
303 See Other
表示资源存在另一个URL,应使用GET方法获取资源 -
304 Not Modified
表示请求的资源与之前请求头中参数指定的版本相比,没有做修改。 在这种情况下,由于客户端任具有之前下载的副本,因此不需要重新传输资源。 -
307 Temporary Redirect
临时重定向,与302类似。区别在于后续请求仍使用原始的URL
4XX 客户端错误
400 Bad Request
明显的客户端错误:请求报文语法错误、请求超过限制大小、无效的请求或欺骗性路由请求401 Unauthorized
没有认证的请求,表示当前请求需要用户验证。 请求需要包含一个正确的Authorization
证书头信息。 另外,有的网站禁止从特定的IP地址发送的请求,也是返回401。403 Forbidden
表示对请求资源的访问被服务器拒绝404 Not Found
请求失败,表示在服务器上没有找到请求的资源。 广泛适用于当服务器不想解释为何请求被拒绝或有无其他可用响应的适合。 (被强行拒绝,没有为什么)
5XX 服务端错误
500 Internal Server Error
表示服务器端执行请求时候发生了错误501 Not Implemented
表示服务器不支持当前请求所需要的某个功能。503 Service Unavailable
表示临时的服务器停机维护或者过载,会在一段时间以后恢复。
HTTP Headers
HTTP Headers头字段是客户端和服务器进行请求和响应时候传递的额外信息。根据头字段作用大致分组Authentication
、Caching
、Client hints
、Conditional
、Connention Management
、Content negontiation
、Controls
、Cookies
、CORS
、Do not track
、Downloads
、Message Body Information
、Proxies
、Redirects
、Request Context
、Respose Context
、Range Request
、Security
、Server-sent event
、Transfering Code
、Websocket
、Other
参考 | MDN
HTTPS
HTTPS 还是通过了 HTTP 来传输信息,只不过信息通过 TLS或者SSL 协议进行了加密。 图解TSL/SSL | 阮一峰
参考:
水平有限,可能会有许多不准确的地方,欢迎指正!