HTTP(S)协议概述

Posted zoxygenz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP(S)协议概述相关的知识,希望对你有一定的参考价值。

HTTP(S)协议概述

HTTP协议

HTTP(HyperText Transfer Protocol)超文本传输协议

定义:

? -规定了浏览器和服务器之间相互通信的规则

? -万维网交换信息的基础

? -允许将html文档从Web服务器传送到Web浏览器

特点:

? -HTTP协议建立在TCP协议的基础之上

? -HTTP协议是无状态的

URL与URI

统一资源定位符(Uniform Resource Locator,URL),统一资源名称(Uniform Resource Name,URN)是URI的子集

Web上地址的基本形式是URI,它有两种形式:

  • 一种是URL,这是目前URI的最普遍形式

  • 另一种就是URN,这是URL的一种更新形式,URN不依赖于位置,并且有可能减少失效连接的个数。但是其流行还需假以时日,因为它需要更精密软件的支持。


    易混区分
URL URI
具体名称 Uniform Resource Lacator,
统一资源定位符
Uniform Resource Identifier,
统一资源标识符
含义 WWW上,每一信息资源都有统一的且唯一的地址
该地址就是URL
广义上的资源标识,既包括网络也可涵盖本地等
凡是标识资源的均可称为URI
组成 三部分:
【协议/服务方式】
【该资源的主机IP地址(时含端口号)】
【主机资源的具体地址】
e.g. [协议]??/[主机地址]:(端口)/[路径]
两段:
【特定协议】
及【协议内容的语法和语义】
e.g. [协议名]??/[用户名]:[密码]@[服务器地址]:[服务器端口号]/[路径]?[查询字符串]#[片段ID]

HTTP方法

常见:

GET:获取资源

? -获取请求页面的指定消息

? -请求参数在请求头

? -请求长度有限制


POST:传输实体主体

? -获取请求页面的指定消息

? -请求参数在请求正文


HEAD:(只)返回报文首部


OPTIONS:询问支持的方法


PUT:传输文件

*但是实际上大多使用POST方式上传


DELETE:删除文件


TRACE:类比ping形式的请求


支持版本:

方法 说明 支持的HTTP协议版本
GET 获取资源 1.0、1.1
POST 传输实体主体 1.0、1.1
PUT 传输文件 1.0、1.1
HEAD 获得报文首部 1.0、1.1
DELETE 删除文件 1.0、1.1
OPTIONS 询问支持的方法 1.1
TRACE 追踪路径 1.1

HTTP状态码

常见状态码:

2XX-成功 表示正常请求处理完毕?

? 200:OK,客户端请求成功

? 204:No Content,请求处理成功,但是没有资源返回(页面不更新)

? 206:Partial Content,客户端进行了范围请求(资源一部分请求)


3XX-重定向 需要进行附加操作以完成请求??

? 301:Move Permanently,永久性重定向,表示资源已经被分配信达URL,以后应使用资源现在所指的URL

*注意:对于某些使用 HTTP/1.0 协议的浏览器,当它们发送的 POST 请求得到了一个301响应的话,接下来的重定向请求将会变成 GET 方式。

? 302:Move Temporarily,临时重定向,表示资源已经被分配了新的URI,希望用户(本次)使用新的URI

? 304,Not Modified,服务器资源未改变,可直接使用未过期的缓存(无关)


4XX-客户端错误 服务器无法处理请求?

? 400:Bad Request,请求语法中存在报文错误,需要修改再次发送

? 401:Unauthorized,该状态码表示需要通过HTTP认证

? 403:Forbidden,请求访问的资源服务拒绝

? 404:Not Found,服务器上没有找到资源


5XX-服务器错误 服务器处理请求错误??

? 500:Internal Sever Error,服务器内部错误(php.INI关闭了display_errors,一般在服务器端源代码出现错误时出现)

? 502:Bad Gateway,作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效响应

? 503:Service Unavailable,服务器当前不能处理客户端的请求(超载或停机维护)


? 600:源站没有返回响应头,只能返回实体内容


状态码总结:

状态码 类别 原因
1XX 信息性 请求正在处理
2XX 成功 请求正常处理完毕
3XX 重定向 需要进行附加操作以完成请求
4XX 客户端错误 服务器无法处理请求
5XX 服务器错误 服务器处理请求错误

HTTP 首部

通用字段

? Cache-Con:控制缓存

? connection:连接的管理

? Date:创建报文的日期时间


请求字段

? Host:请求资源的主机和端口号

? User-Agent:客户端操作系统,浏览器等其他信息

? Referer:访问当前页面的上一个页面

? Cookie:请求者的身份凭证

? Accept:客户端希望接收的MIME类型消息

? Accept-Charset:指定客户端接收的字符集


响应字段

? Server:服务器所使用的Web服务名字

? Set-Cookie:向客户端设置Cookie

? Last-Modified:通知浏览器资源修改的最后时间

? Content-Length:正文长度

? Location:引导用户转向与请求URI不同的资源(重定向新资源位置)


实体字段

? Allow:通知客户端能够支持的HTTP方法

? Content-Encoding:告知客户端服务器对实体主体部分采用的字符编码

? Content-Language:告知客户端实体部分采用的语言

? Content-Location:给出与报文主体部分相对应实际的URI

? Content-Type:说明实体部分对象的媒体类型


HTTP请求过程

DNS查询

-DNS解析(域名解析服务器)

? a)首先会搜索浏览器自身的DNS缓存(缓存时间比较短,大概只有1分钟,且只能容纳1000条缓存)

? b)如果浏览器自身的缓存里面没有找到,那么浏览器会搜索系统自身的DNS缓存

? c)如果还没有找到,那么尝试从 hosts文件里面去找

? d)在前面三个过程都没获取到的情况下,就递归地去域名服务器去查找

建立TCP连接

-TCP连接建立(三次握手)

  拿到域名对应的IP地址之后,User-Agent(一般指浏览器)会以一个随机端口(1024<端口<65535)向服务器的WEB程序(常用的有httpd,nginx)等的80端口。

? 这个连接请求(原始的http请求经过TCP/IP4层模型的层层封包)到达服务器端后(这中间有各种路由设备,局域网内除外),进入到网卡,然后是进入到内核的TCP/IP协议栈(用于识别连接请求,解封包,一层一层的剥开),还有可能要经过Netfilter防火墙(属于内核的模块)的过滤,最终达到WEB程序,最终建立了TCP/IP的连接

HTTP请求

-发起HTTP请求(建立连接后)

? HTTP请求报文由三部分组成:请求行,请求头、空格、请求正文

? 请求行:用于描述客户端的请求方式(GET/POST等),请求的资源名称(URL)以及使用的HTTP协议的版本号

? 请求头:用于描述客户端请求哪台主机及其端口,以及客户端的一些环境信息等

? 空行:空行就是 (POST请求时候有)

? 请求正文:当使用POST等方法时,通常需要客户端向服务器传递数据。这些数据就储存在请求正文中(GET方式是保存在URL地址后面,不会放到这里)

关闭TCP连接

-TCP链接关闭(四次挥手)

? Web服务器向浏览器发送了请求数据,它就要关闭TCP连接

? 在头部添加代码connection:keep-alive则会仍然保持打开状态


HTTPS

认识HTTPS

? HTTPS(Hyper Text Transfer Protocol Secure)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但是利用SSL/TLS来加密数据包。目的是提供对网站服务器的身份认证(防冒充),保护交换数据的隐私(防窃听)与完整性(防篡改)。实现方式有通过建立基于HTTP的加密连接TLSSSL两种。

? HTTP协议和安全协议同属于应用层。具体一点来说,安全协议工作在HTTP之下,传输层之上:安全协议像运行HTTP的进程提供一个类似TCP的套接字,供进程向其中注入报文,随后安全协议将报文加密并注入运输层套接字;或是从运输层获取加密报文,解密后交给对应进程。严格来说,HTTPS并不是一个单独的协议,而是对工作在一加密连接(TLS或SSL)上的常规HTTP协议的称呼。

? HTTPS报文中的任何东西都被加密,包括所有的报头和荷载。除了可能的选择密文攻击之外,一个攻击者所能知道的只有在两者有一连接这一事实。

TLS/SSL

? 安全传输层协议 TLS(Transport Layer Security)及其前身 安全套接字协议 SSL(Secure Sockets Layer)是为互联网提供安全及数据完整性保障的加密方式。

HTTPS流程

TLS协议关键点

(具体详细过程、字段含义可根据实际Https数据流跟踪分析)

1.客户端握手请求

·Client Hello

? -Random 发送随机数1(与服务器端共同生成)

? -Session ID 会话ID,身份标记

? -Cipher Suite 支持密码的套件

? -Compression Method 压缩方法

2.服务端端握手回应

·Server Hello

? -Random 发送随机数2(共同生成)

? -Session ID 会话ID(初次访问或已过期回发为0)

? -Cipher Suite 从客户端支持的密码套件中指定一种

? -Compression Method 指定压缩方法(若为空值null或0则为不压缩)

·Certificate

? -Certificates 发送证书链,供客户端依据证书路径进行验证

·Server Key Exchange,Server Hello Done

? -Server Key Exchange 包含密钥交换算法所需要的额外参数

? -Server Hello Done 表征握手结束

3.客户端密钥交换,准备完成

·Client Key Exchange,Change Cipher Spec,Encrypted Handshake Message

? -Client Key Exchange 交换共享公钥

? -Change Cipher Spec 进入准备加密状态

? -Encrypted Handshake Message 告知完成客户端所有握手准备内容

4.服务端准备完成

·(Server)New Session Ticket,Change Cipher Spec,Encrypted Handshake Message

? -New Session Ticket 更新客户端存储的session状态

? -Change Cipher Spec 进入准备加密状态

? -Encrypted Handshake Message 告知完成服务端所有握手准备内容

5.数据交换

·Application Data


HTTPS-TLS
HTTPS-TLS
zOxygeNz
2020-07
TLS [HandShake](Full)(session ID,CS,Comp)(extensions)[ChangeCipherSpec]FinishedServerHello(session ID,CS,Comp)(extensions)Certificate(Server)ServerKeyExchangeCertificate(Server)CertificateRequestServerHelloDone*Certificate(Client)ClientKeyExchangeCertificateVerfy[ChangeCipherSpec]FinishedClientHello(Protected)Data ExchangeClientServer

推荐图文

图书类:

-《图解http》

-《Web之困:现代Web应用安全指南》

文章类:

-http://tools.ietf.org/html/rfc5246

-https://www.cnblogs.com/liuxiannan/p/https.html

-https://github.com/yorkeyanyy/Halforest-Field

-https://www.freebuf.com/articles/network/202504.html

































以上是关于HTTP(S)协议概述的主要内容,如果未能解决你的问题,请参考以下文章

B/S大文件上传详解及实例代码

使用Let's Encrypt搭建永久免费的HTTPS服务

HTTPS概述

HTTP、HTTPS、SSL/TLS概述

HTTP协议图解

JavaWebHttp网络协议包 --- 网络协议包概述;Http请求协议包内部空间;Http响应协议包内部结构;第二版互联网通信流程图