http协议解析

1 http的操作过程

    http协议定义了浏览器怎么想万维网请求万维网文档,以及服务器怎么把文档传给浏览器。从层次角度看HTTP是面向事务的应用层协议,它是万维网可以可靠地交换文件的重要基础(不仅传输跳转所必须的信息,也传送任何可以从互联网上得到的信息,如文本、超文本、声音、图片)。

工作过程如下:

    (1)浏览器发送请求,建立tcp连接(双向)

    (2)浏览器发送HTTP请求报文

    (3)服务器返回HTTP响应报文

    (4)释放tcp连接(双向)

    每个web网点都有一个服务进程,不断监听TCP的80端口,以便发现是否有浏览器向它发送连接请求。一旦监听到请求,并建立了TCP连接之后,浏览器就向web服务器发送某个页面请求,服务器接着返回响应。最后tcp释放。请求和响应必须按照HTTP规则进行定义,这就是HTTP协议。

    HTTP之间的交互都是通过一个ASCII串组成,HTTP使用了面向连接的TCP为运输层协议,保证数据可靠性,HTTP不必考虑数据在传输过程中被丢弃之后怎么重传。但是HTTP本身是无连接的,虽然使用tcp连接,但是在通信双方交换HTTP报文之前不需要建立HTTP连接。HTTP是无状态的,就是说同一客户第二次访问同一个服务器页面时,服务器的响应与第一次被访问时的相同。

    HTTP的持续连接方式:非流水线和流水线

    流水线方式特点,客户在收到http的响应报文之前就能够接着发送新的报文请求。于是服务器也可以连续发回响应报文。

2、HTTP报文结构

    http有两种报文,请求报文和响应报文

    HTTP请求报文主要由请求行、请求头部、请求正文3部分组成

   http协议解析

2.1 请求行

由3部分组成,分别为:请求方法、URL以及协议版本,之间由空格分隔

请求方法包括GET、HEAD、PUT、POST、TRACE、OPTIONS、DELETE以及扩展方法,当然并不是所有的服务器都实现了所有的方法,部分方法即便支持,处于安全性的考虑也是不可用的

协议版本的格式为:HTTP/主版本号.次版本号,常用的有HTTP/1.0和HTTP/1.1

2.2 请求头部

请求头部为请求报文添加了一些附加信息,由“名/值”对组成,每行一对,名和值之间使用冒号分隔

常见请求头如下:

请求头

说明

Host

接受请求的服务器地址,可以是IP:端口号,也可以是域名

User-Agent

发送请求的应用程序名称

Connection

指定与连接相关的属性,如Connection:Keep-Alive

Accept-Charset

通知服务端可以发送的编码格式

Accept-Encoding

通知服务端可以发送的数据压缩格式

Accept-Language

通知服务端可以发送的语言

请求头部的最后会有一个空行,表示请求头部结束,接下来为请求正文,这一行非常重要,必不可少

2.3 请求正文

可选部分,比如GET请求就没有请求正文

GET请求示例:

http协议解析

POST请求示例:

http协议解析

 

HTTP响应报文格式:

HTTP响应报文主要由状态行、响应头部、响应正文3部分组成

http协议解析

2.4 状态行

由3部分组成,分别为:协议版本,状态码,状态码描述,之间由空格分隔

状态代码为3位数字,200~299的状态码表示成功,300~399的状态码指资源重定向,400~499的状态码指客户端请求出错,500~599的状态码指服务端出错(HTTP/1.1向协议中引入了信息性状态码,范围为100~199)

这里列举几个常见的:

状态码

说明

200                    

响应成功

302

跳转,跳转地址通过响应头中的Location属性指定JSP中Forward和Redirect之间的区别

400

客户端请求有语法错误,不能被服务器识别

403

服务器接收到请求,但是拒绝提供服务(认证失败)

404

请求资源不存在

500

服务器内部错误

2.5 响应头部

与请求头部类似,为响应报文添加了一些附加信息

常见响应头部如下:

响应头

说明

Server

服务器应用程序软件的名称和版本

Content-Type

响应正文的类型(是图片还是二进制字符串)

Content-Length

响应正文长度

Content-Charset

响应正文使用的编码

Content-Encoding

响应正文使用的数据压缩格式

Content-Language

响应正文使用的语言

响应示例:

http协议解析

 2.6 URI、URL和URN之间的区别

    http://www.tsinghua.edu.cn/publish/newthu/newthu_cnt/faculties/index.html

其中主机域名为:http://www.tsinghua.edu.cn  路径名为:publish/newthu/newthu_cnt/faculties/index.html

默认端口是80。

URL的组成为<协议>://<主机>:<端口>、<路径>

    URI全名为Uniform Resource Indentifier(统一资源标识),用来唯一的标识一个资源,是一个通用的概念,URI由两个主要的子集URL和URN组成

    URL全名为Uniform Resource Locator(统一资源定位),通过描述资源的位置来标识资源

    URN全名为Uniform Resource Name(统一资源命名),通过资源的名字来标识资源,与其所处的位置无关,这样即使资源的位置发生变动,其URN也不会变化

    HTTP规范将更通用的概念URI作为其资源标识符,但是实际上,HTTP应用程序处理的只是URI的URL子集

参考:https://blog.csdn.net/a19881029/article/details/14002273