HTTP报文格式

Http是什么?

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议),用于万维网(www:World Wide Web)服务器传输超文本到浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML文件,图片文件,查询结果等)

用于 HTTP 协议交互的信息被称为 HTTP 报文。 请求端(客户端) 的HTTP 报文叫做请求报文, 响应端(服务器端) 的叫做响应报文。HTTP 报文本身是由多行(用 CR+LF 作换行符) 数据构成的字符串文本。

HTTP的工作原理

HTTP消息结构:
一个HTTP请求报文由请求行(request line)请求头(request header)空行请求数据四部分组成。
在这里插入图片描述

请求行

请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段构成。

例如:GET / index/html HTTP/1.1即为GET请求、URL为index.html、HTTP版本为1.1 。

HTTP1.0定义了三种请求方法:GET、POST和HEAD方法。
HTTP1.1新增五种请求方法:OPTIONS、PUT、DELETE、TRACE和CONNECT方法
在这里插入图片描述

GET请求

这是常见的一种请求方式,当客户端要从服务器中读取文档时,当点击网页上的链接或者通过浏览器的地址栏输入网址来浏览网页,使用的都是GET方式。 GET方法要求服务器将URL定位的资源放在响应报文的数据部分,回送给客户端。使用GET方法时,请求参数和对应的值附加在URL后面,利用一个问号(?)代表URL的结尾与请求参数的开始,传递参数长度受限制。如:/index.jsp?id=100&op=bind,这样通过GET方式传递的数据直接表示在地址中, 所以我们可以把请求结果以链接的形式发送。

以火狐搜索“许嵩”为例:
在这里插入图片描述
地址中的“?”之后的部分就是通过GET发送的请求数据,我们可以在地址栏中清楚看到,各个数据之间用&符号分开,显然,这种方式不适合传送私密数据, 另外,由于不同的浏览器对地址的字符限制也有所不同,一般最多只能识别1024个字符,所以如果需要传送大量数据的时候,也不适合GET请求。

POST请求

POST方法可以允许客户端给服务器提供信息较多。POST方法将请求封装在HTTP请求数据中,也就是在body中,以名称/值 键值对的形式出现,可以传输大量数据,这样POST请求方式对传送给的数据大小没有限制,也不会显示在URL中。

HEAD请求

HEAD就像GET,只不过服务端接收到HEAD请求后只返回响应头,而不会发送响应内容,当我们只需要查看某个页面的状态时,使用HEAD是非常高效的,因为在传输的过程中省略了页面内容。

请求头

请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号:分隔。请求头部通知服务器关于客户端请求的信息,典型的请求头有:
User-Agent:产生请求的浏览器类型。
Accept:客户端可识别的内容类型列表
Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机
在这里插入图片描述

空行

最后一个请求之后是一个空行,发送回车和换行符,通知服务器以下不再有请求头

请求数据

请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头Content-Type和Content-Length。
示例
在这里插入图片描述

在这里插入图片描述

HTTP响应消息

HTTP响应也由四部分构成,分别是状态行、效应头、空行、响应正文。

状态行

状态行通过状态码说明所请求的资源情况
在这里插入图片描述
HTTP状态码的因为HTTP Status Code。状态码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。
1xx : 指示信息 – 表示请求已接收,继续处理
2xx : 成功 – 表示请求已被成功接收,理解
3xx : 重定向 – 要完成请求必须进行更进一步的操作
4xx : 客户端错误 – 请求有语法错误或请求无法实现
5xx : 服务器端错误 – 服务器未能实现合法的请求

关于状态码的简介可以看一下HTTP状态码、HTTP和HTTPS

响应头

在这里插入图片描述
Content-Type,内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些Asp网页点击的结果却是下载到的一个文件或一张图片的原因。
在这里插入图片描述

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
HTTP报文格式分为请求报文和响应报文两种类型,下面分别给出它们的格式和示意图: 1. 请求报文格式 请求报文由请求行(request line)、消息报头(header)、空行(blank line)和请求主体(entity body)四个部分组成。 请求行包括请求方法(method)、请求URI(uniform resource identifier)和HTTP协议版本(version)三个字段,它们之间用空格分隔。例如: ``` GET /index.html HTTP/1.1 ``` 消息报头包括若干个字段,每个字段由字段名和字段值两部分组成,中间用冒号和空格分隔。不同的消息报头字段有不同的含义,例如: ``` Host: www.example.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 ``` 空行是为了区分消息报头和请求主体而存在的,它的内容为空,只有一个回车符和一个换行符。 请求主体是可选的,如果请求方法是GET或HEAD,则请求主体为空,否则请求主体就是要发送的数据。 下图是一个请求报文的示意图: ![HTTP请求报文格式示意图](https://img-blog.csdn.net/20180707172607804?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9oYWl6aGFuZy9ibGFuazEyMzQ1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/70) 2. 响应报文格式 响应报文由状态行(status line)、消息报头和响应主体(entity body)三个部分组成。 状态行包括HTTP协议版本、状态码(status code)和原因短语(reason phrase)三个字段,中间用空格分隔。例如: ``` HTTP/1.1 200 OK ``` 消息报头和请求报文的消息报头类似,也由若干个字段组成。例如: ``` Content-Type: text/html; charset=utf-8 Content-Length: 12345 ``` 响应主体是服务器返回的数据,例如HTML页面、JSON数据等等。 下图是一个响应报文的示意图: ![HTTP响应报文格式示意图](https://img-blog.csdn.net/20180707172856219?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9oYWl6aGFuZy9ibGFuazEyMzQ1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/70)

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

降温vae+

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值