HTTP协议及报文详解

哈喽~茫茫人海看到这篇文章就是缘分,是不是整天沉浸在代码的海洋中?在正式进入主题前,为了让效果更好,更容易去理解,先让自己心情放轻松喽。哈哈哈哈!!嗝?在这里插入图片描述
先让我们回顾下什么是HTTP:
HTTP–Hyper Text Transfer Protocol,超文本传输协议,是一种建立在TCP上的无状态连接,整个基本的工作流程是客户端发送一个HTTP请求,说明客户端想要访问的资源和请求的动作,服务端收到请求之后,服务端开始处理请求,并根据请求做出相应的动作访问服务器资源,最后通过发送HTTP响应把结果返回给客户端。

下面我要开始正式装*了啊:
在这里插入图片描述
一、HTTP请求

HTTP请求是客户端往服务端发送请求动作,告知服务器自己的要求。

HTTP请求由状态行、请求头、请求正文三部分组成:

1)状态行:包括请求方式Method、资源路径URL、协议版本Version;

2)请求头:包括一些访问的域名、用户代理、Cookie等信息;

3)请求正文:就是HTTP请求的数据。

我们知道请求方式很多,比较常用的就是增删改查(GET、POST、PUT、DELETE),其中GET方式仅仅为获取服务器资源,方式较为简单,因此在请求方式为GET的HTTP请求数据中,请求正文部分可以省略,直接将想要获取的资源添加到URL中。

而POST请求的格式我们可以看下面这张图:在这里插入图片描述
二、HTTP响应

2.1 响应数据格式

服务器收到了客户端发来的HTTP请求后,根据HTTP请求中的动作要求,服务端做出具体的动作,将结果回应给客户端,称为HTTP响应。

 HTTP响应由三部分组成:状态行、响应头、响应正文;

状态行:包括协议版本Version、状态码Status Code、回应短语;

响应头:包括搭建服务器的软件,发送响应的时间,回应数据的格式等信息;

响应正文:就是响应的具体数据。

 备注:我们主要关心并且能够在客户端浏览器看得到的是三位数的状态码,不同的状态码代表不同的含义,其中

在这里插入图片描述
具体HTTP响应实例如下图:

在这里插入图片描述
2.2 常见状态码的含义

   200---OK/请求已经正常处理完毕
   
   301---/请求永久重定向

   302---/请求临时重定向

   304---/请求被重定向到客户端本地缓存

    400---/客户端请求存在语法错误

    401---/客户端请求没有经过授权

    403---/客户端的请求被服务器拒绝,一般为客户端没有访问权限

    404---/客户端请求的URL在服务端不存在

    500---/服务端永久错误

    503---/服务端发生临时错误

2.3 HTTP响应模型

服务器收到HTTP请求之后,会有多种方法响应这个请求,下面是HTTP响应的四种模型:

单进程I/O模型

服务端开启一个进程,一个进程仅能处理一个请求,并且对请求顺序处理;

多进程I/O模型

服务端并行开启多个进程,同样的一个进程只能处理一个请求,这样服务端就可以同时处理多个请求;

复用I/O模型

服务端开启一个进程,但是呢,同时开启多个线程,一个线程响应一个请求,同样可以达到同时处理多个请求,线程间并发执行;

复用多线程I/O模型

服务端并行开启多个进程,同时每个进程开启多个线程,这样服务端可以同时处理进程数M*每个进程的线程数N个请求。

三、HTTP报文格式

HTTP报文是HTTP应用程序之间传输的数据块,HTTP报文分为HTTP请求报文和HTTP响应报文,但是无论哪种报文,他的整体格式是类似的,大致都是由起始、首部、主体三部分组成,起始说明报文的动作,首部说明报文的属性,主体则是报文的数据。现在让我们继续来看下这两种报文格式

1.http请求报文
在这里插入图片描述
请求报文的起始由请求行构成(有些资料称为状态行,名字不一样而已,都是指的一个东西),用来说明该请求想要做什么,由< Method>、< URL>、< Version> 三个字段组成,注意每个字段之间都有一个空格。

    其中<Method>字段有不同的值:

            GET   --- 访问服务器的资源

            POST  --- 向服务器发送要修改的数据

            HEAD  --- 获取服务器文档的首部

            PUT   --- 向服务器上传资源

            DELETE--- 删除服务器的资源

    <URL>字段表示服务器的资源目录定位

    <Version>字段表示使用的http协议版本

    首部部分由多个请求头(也叫首部行)构成,那些首部字段名有如下,不全:

            Accept     指定客户端能够接收的内容格式类型

            Accept-Language 指定客户端能够接受的语言类型

            Accept-Ecoding  指定客户端能够接受的编码类型

            User-Agent      用户代理,向服务器说明自己的操作系统、浏览器等信息

            Connection      是否开启持久连接(keepalive)

            Host            服务器域名	

    主体部分就是报文的具体数据。                 

2.http响应报文
在这里插入图片描述
响应报文的起始由状态行构成,用来说明服务器做了什么,由< Version>、< Status-Code>、< Phrase>三个字段组成,同样的每个字段之间留有空格;

    <Status-Code> 上边已经说明; 

    首部由多个响应头(也叫首部行)组成, 首部字段名如下,不全:

            Server    服务器软件名,Apache/Nginx

            Date      服务器发出响应报文的时间

            Last-Modified   请求资源的最后的修改时间

            ...

    主体部分是响应报文的具体数据。

好了,今天就先到这里,请多多指教!

在这里插入图片描述

简要总结post与get区别:https://blog.csdn.net/weixin_44209472/article/details/88317720

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HTTP(Hypertext Transfer Protocol)是一种用于传输超文本的协议,它定义了客户端和服务器之间进行通信的规则。HTTP协议使用请求-响应模型,客户端发送请求,服务器返回响应。 HTTP协议报文格式包括请求报文和响应报文。 1. 请求报文格式: - 请求行:包含请求方法、请求目标和HTTP协议版本。 - 请求头部:包含一系列键值对,用于传递请求的附加信息,如User-Agent、Content-Type等。 - 空行:用于分隔请求头部和请求体。 - 请求体:可选,用于传递请求的数据,如表单数据、JSON数据等。 2. 响应报文格式: - 状态行:包含HTTP协议版本、状态码和状态描述。 - 响应头部:包含一系列键值对,用于传递响应的附加信息,如Content-Type、Content-Length等。 - 空行:用于分隔响应头部和响应体。 - 响应体:可选,用于传递响应的数据,如HTML页面、JSON数据等。 HTTP协议的功能包括: 1. 建立连接:客户端与服务器之间建立TCP连接。 2. 请求方法:定义了客户端对服务器资源的操作方式,常见的有GET、POST、PUT、DELETE等。 3. 请求头部:传递请求的附加信息,如User-Agent、Cookie等。 4. 响应状态码:表示服务器对请求的处理结果,常见的有200(成功)、404(未找到)、500(服务器内部错误)等。 5. 响应头部:传递响应的附加信息,如Content-Type、Content-Length等。 6. 会话管理:通过Cookie和Session来管理用户的会话状态。 7. 缓存控制:通过Cache-Control、Expires等头部字段来控制缓存策略。 8. 安全性:通过HTTPS协议进行数据加密传输,保证通信安全。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值