博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HTTP协议基础-3-HTTP消息
阅读量:4302 次
发布时间:2019-05-27

本文共 1921 字,大约阅读时间需要 6 分钟。

HTTP基于客户端 - 服务器体系结构模型和无状态请求/响应协议,该协议通过可靠的TCP / IP连接交换消息来运行。本篇就来学习HTTP消息,可以说请求是一个消息,响应也是这个消息。通过学习HTTP消息,接下来学习HTTP请求和响应会更顺利一些。

HTTP“客户端”是为了发送一个或多个HTTP请求消息而与服务器建立连接的程序(Web浏览器或任何其他客户端)。 HTTP“服务器”是一个程序(通常是Apache Web服务器或Internet信息服务IIS等Web服务器),它接受连接以通过发送HTTP响应消息来提供HTTP请求。

 

1.HTTP消息语法格式

HTTP利用统一资源标识符(URI)来标识给定资源并建立连接。 建立连接后,HTTP消息的传递格式类似于Internet邮件[RFC5322]和多用途Internet邮件扩展(MIME)[RFC2045]所使用的格式。这种HTTP消息,不管是客户端到服务器的请求还是服务器到客户端的响应,都遵循以下消息格式。

HTTP-message   = 
|
; HTTP/1.1 messages

 

2.HTTP消息包含内容

一个完整的HTTP消息包含以下4部分

一个 start-line(起始行)0或者多个标题字段后面跟着CRLF一个空行(指示标题字段的结尾)可选的 消息-正文

下面我们依次来详细解释每一个部分的内容。

 

3. start-line(起始行)

一个start-line通常会有以下语法:

start-line = Request-Line | Status-Line

关于Request-Line 和 Status-Line,我们分别在后面文章介绍HTTP请求和HTTP响应的时候来学习。现在来看看一个请求和一个响应的起始行例子。

 

GET /hello.htm HTTP/1.1     (请求:从客户端发出的起始行)HTTP/1.1 200 OK             (响应:从服务器发出的起始行)

这个请求和响应的起始行,我们后边都会逐一学习和看到(截图)来分析和介绍每一行和每一个字段的含义。

 

4.Header Fields(头字段)

HTTP头字段提供有关请求或响应的所需信息,或有关在消息正文中发送的对象的信息。 有四种类型的HTTP消息头:

General-header:  一般头,这种头字段同时适用于请求和响应消息。

Request-header:    请求头,只是适用于请求消息
Response-header: 响应头,只是适用于响应消息
Entity-header:      实体头,定义关于实体主体的元信息,或者,如果不存在主体,则定义关于请求标识的资源。

以上提到的头都遵循相同的通用格式,每个头字段由一个名称后跟冒号(:)和字段值组成,就像Map中键值对,如下所示:

message-header = field-name ":" [ field-value ]

以下是一些头字段例子

User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3Host: www.example.comAccept-Language: en, miDate: Mon, 27 Jul 2009 12:28:53 GMTServer: ApacheLast-Modified: Wed, 22 Jul 2009 19:15:56 GMTETag: "34aa387-d-1568eb00"Accept-Ranges: bytesContent-Length: 51Vary: Accept-EncodingContent-Type: text/plain

 

5. Message body(消息正文)

消息正文部分对于HTTP消息是可选的,例如,请求消息很多情况下是没有请求正文,但如果它可用,则它用于携带与请求或响应相关联的实体主体。 如果实体主体是关联的,那么通常Content-Type和Content-Length标题行指定相关主体的性质。

消息体是承载来自服务器的实际HTTP请求数据(包括表单数据和上载等)和HTTP响应数据(包括文件,图像等)的消息体。 例如有些响应消息正文就是一个HTML文件,或者一张图片,如果是图片,有可能显示的是二进制数据。下面显示的是邮件正文的简单内容:

            

Hello, World!

下面两篇文章,我们就开始来学习HTTP请求和HTTP响应,相对来说,HTTP响应内容是比较少的。

转载地址:http://yjows.baihongyu.com/

你可能感兴趣的文章
Laravel框架学习笔记之任务调度(定时任务)
查看>>
laravel 定时任务秒级执行
查看>>
浅析 Laravel 官方文档推荐的 Nginx 配置
查看>>
Swagger在Laravel项目中的使用
查看>>
Laravel 的生命周期
查看>>
CentOS Docker 安装
查看>>
Nginx
查看>>
Navicat远程连接云主机数据库
查看>>
Nginx配置文件nginx.conf中文详解(总结)
查看>>
Mysql出现Table 'performance_schema.session_status' doesn't exist
查看>>
MySQL innert join、left join、right join等理解
查看>>
vivado模块封装ip/edf
查看>>
sdc时序约束
查看>>
Xilinx Jtag Access/svf文件/BSCANE2
查看>>
NoC片上网络
查看>>
开源SoC整理
查看>>
【2020-3-21】Mac安装Homebrew慢,解决办法
查看>>
influxdb 命令行输出时间为 yyyy-MM-dd HH:mm:ss(年月日时分秒)的方法
查看>>
已知子网掩码,确定ip地址范围
查看>>
判断时间或者数字是否连续
查看>>