首页 > 编程知识 正文

http协议报文结构,http的两种报文分别是

时间:2023-05-03 20:24:06 阅读:136697 作者:450

1.HTTP消息HTTP通信过程包括客户端向服务器发送请求的过程和服务器向客户端回复响应的过程。 在这两个过程中会产生请求消息和响应消息。

那么,什么是HTTP消息?

HTTP消息是用于HTTP协议的交换的信息,HTTP消息本身是由多行数据组成的字符串文本。 将客户端的HTTP消息称为请求消息,将服务器端的HTTP消息称为应答消息。

HTTP消息由哪些部分组成? 各部分有什么作用?

HTTP消息由消息标题和消息主体构成,之间用空行隔开。 消息报头是要在客户端或服务器端处理的请求或响应的内容和属性,可以传递额外的重要信息。 报头包含请求行和请求报头,消息主体主要包含要发送的数据。 通常,不一定有消息主体。

HTTP报文首部的结构:由开头字段名和字段值构成,之间用冒号“:”隔开。 第一个字段格式:第一个字段名称:字段值。

例如,在HTTP报头中,消息主体的对象类型Content-Type:text/html用Content-Type字段表示。

上面的Content-Type是第一个字段名称,text/html是字段值,字段值可以是多个值。 例如,Keep-Alive:timeout=15,max=10。

HTTP报头字段通常有通用报头、请求报头、响应报头、实体报头四种。

通用首部字段:请求和响应消息都使用的标头。

请求首部字段:从客户端向服务器发送请求消息时使用的标头。 添加了请求的添加内容、客户端信息、响应内容相关的优先级等信息。

响应首部字段:从服务器向客户端返回响应消息时使用的标头。 如果添加了响应的附加内容,则会提示客户端添加其他内容信息。

实体首部字段:请求和响应消息的实体部分的标头。 补充了资源内容的更新时间等有关实体的信息。

HTTP消息结构图:

消息头空行消息主体的HTTP消息结构的基本格式示例:

get/http/1.1 host : www.enjoy today.cn connection 3360 keep-alive upgrade-insecure-requests 33601 user-agent 3360 mm lint like Gecko ) chrome/51.0.2704.84 safari/537.36 accept 3360 text/html,537.36accept3360 q=0.9,image/webp,*/*; q=0.8 referer 3360http://www.enjoy today.cn/posts/326 accept-encoding : gzip,deflate,sdchaccept-language 3360 zh q um _ distinct id=15 C4 ef2a C4 e2e4- 0d 13269271 b947-1b2a 120 B- 1fa 400-15 C4 ef2ac 4f 7b 5; un=aGZjYWk=; comment_author=aGZjYWk=; comment _ author _ email=1710600212 @ QQ.com; comment _ author _ URL=http://www.enjoy today.cn; c _ id=duhiatlndmc4mvybjrqtgxmrtotmtpfodg3qjgzqjg1njgxqjqxruyxnjg2qzjfrkmyqji2QQ==; jsession id=adbc 8c3 dad F6 c 815 d 778450 c 193 c 6637.ajp 13 _ worker; hm _ lvt _ ce55 bfda 158556585 A8 b7b 246346 c8ba=1498560244、1498739070、1498833193、1498917432; hm _ lpvt _ ce 55 bfda 158556585 A8 b7b 246346 c8ba=1498917597; cz zdata 1262047894=1598545996-1495973145--|1498917578 username=HFC aisex=man2.请求和响应消息的机制(1) HTTP请求消息

请求行数据格式由请求方法、URI和HTTP协议版本三部分组成,它们之间用空格分隔。

此部分位于数据的第一行,基本格式如下:

GET /index.html HTTP/1.1此部分中的“请求类型”字段指示请求的类型,URI显示请求的资源位置(/index.html )。 HTTP请求类型包括:GET、POST、HEAD、PUT和DELETE。 一般常用的是GET和POST方式。 提供最后的HTTP协议版本

HTTP的版本号。

GET和POST的区别:

(1)get是从服务器上获取数据,post是向服务器传送数据。

(2)生成方式不同

Get:URL输入;超连接;Form表单中method属性为get;Form表单中method为空。

Post只有一种:Form表单中method为Post。

(3)数据传送方式:Get传递的请求数据按照key-value的方式放在URL后面,在网址中可以直接看到,使用?分割URL和传输数据,传输的参数之间以&相连,如:login.action?name=user&password=123。所以安全性差。

POST方法会把请求的参数放到请求头部和空格下面的请求数据字段就是请求正文(请求体)中以&分隔各个字段,请求行不包含参数,URL中不会额外附带参数。所以安全性高。

(3)发送数据大小的限制:通常GET请求可以用于获取轻量级的数据,而POST请求的内容数据量比较庞大些。

Get:1~2KB。get方法提交数据的大小直接影响到了URL的长度,但HTTP协议规范中其实是没有对URL限制长度的,限制URL长度的是客户端或服务器的支持的不同所影响。

Post:没有要求。post方式HTTP协议规范中也没有限定,起限制作用的是服务器的处理程序的能力。

(4)提交数据的安全:POST比GET方式的安全性要高。Get安全性差,Post安全性高。

通过GET提交数据,用户名和密码将明文出现在URL上,如果登录页面有浏览器缓存,或者其他人查看浏览器的历史记录,那么

就可以拿到用户的账号和密码了。安全性将会很差。

其中HTTP协议版本有两种:HTTP1.0/HTTP1.1。HTTP1.0/HTTP1.1的区别:

HTTP1.0对于每个连接都只能传送一个请求和响应,请求完服务器返回响应就会关闭,HTTP1.0没有Host字段。

而HTTP1.1在同一个连接中可以传送多个请求和响应,多个请求可以重叠和同时进行,HTTP1.1必须有Host字段。

请求头部紧跟着请求行,该部分主要是用于描述请求正文,其基本格式如下:

Host: www.enjoytoday.cnConnection: keep-aliveUpgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36......

主要是用于说明请求源、连接类型、以及一些Cookie信息等。

请求正文和请求头部通过一个空行进行隔开,一般用于存放POST请求类型的请求正文,如上的请求体为:

username=hfcai&sex=man (2)HTTP响应报文

HTTP响应报文由状态行(HTTP版本、状态码(数字和原因短语))、响应头部、空行和响应体4个部分构成。

其中响应头部和响应体同样也是通过一个空行进行隔开,如下为一个简单的示例:

HTTP/1.1 200 OK Date: Sat, 01 Jul 2017 14:51:26 GMT Server: Apache/2.4.7 (Ubuntu) Set-Cookie: JSESSIONID=84C993F5E433C4DE9BFBA57150FFC065.ajp13_worker;path=/;HttpOnly Content-Language: zh-CN Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 7333 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html;charset=UTF-8 <html> <head> <title>title of html.</html> </head> <body> <h1>Hello world!</h1> </body> </html>

或者有一些浏览器响应头部在Header中显示,响应体在Reponse中显示。

状态行主要给出响应HTTP协议的版本号、响应返回状态码、响应描述,同样是单行显示。格式为:

HTTP/1.1 200 OK

状态码告知从服务器端返回的请求的状态,一般由一个三位数组成,分别以整数1~5开头组成。各个响应的类型对应的含义:

1XX 请求正在处理

2XX 请求成功 200 OK 正常处理  204 no content 请求处理成功但没有资源可返回 206 Partial Content 对资源的某一部分请求

3XX 重定向 301 Moved Permanenly请求资源的URI已经更新(永久移动),客户端会同步更新URI。

302 Found 资源的URI已临时定位到其他位置,客户端不会更新URI。

303 See Other 资源的URI已更新,明确表示客户端要使用GET方法获取资源。

304 Not Modified 当客户端附带条件请求访问资源时资源已找到但未符合条件请求。

307 Temporary Redirect临时重定向

4XX 客户端错误 400 Bad Request 请求报文中存在语法错误,一般为参数异常。401 Unauthorized 发送的请求需要HTTP认证。

403 Forbiddden 不允许访问,对请求资源的访问被服务器拒绝   404 Not Found 无法找到请求的资源,请求资源不存在。

405 请求的方式不支持。

5XX 服务器错误 500 Internal Server Error 服务器的内部资源出故障,服务器在执行请求时发生了错误。

503 Service Unavailable 服务器暂时处于超负载状态或正在进行停机维护,无法处理请求,服务器正忙。

响应头部主要是返回一些服务器的基本信息,以及一些Cookie值等。如上的响应头为:

Date: Sat, 01 Jul 2017 14:51:26 GMTServer: Apache/2.4.7 (Ubuntu)Set-Cookie: JSESSIONID=84C993F5E433C4DE9BFBA57150FFC065.ajp13_worker;path=/;HttpOnlyContent-Language: zh-CNVary: Accept-EncodingContent-Encoding: gzipContent-Length: 7333Keep-Alive: timeout=5, max=100Connection: Keep-AliveContent-Type: text/html;charset=UTF-8

响应体为请求需要得到的具体数据,可以为任何类型数据,一般网页浏览返回的为html文件内容,如上面的响应体为:

<html> <head> <title>title of html.</html> </head> <body> <h1>Hello world!</h1> </body> </html>

参考:https://blog.csdn.net/chf1142152101/article/details/74162755

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。