http-协议分析

网友投稿 223 2022-09-13


http-协议分析

Text Transfer Protocol 超文本传输协议,是互联网应用最为广泛的一种网络协议,主要用于Web服务。通过计算机处理文本信息,格式为HTML(Hyper Text Mark Language)超文本标记语言来实现。

0.9:仅于用户传输html文档

1.0

1.引入了MIME(Multipurpose Internet Mail Extesions)机制:多用途互联网邮件扩展,引入这个技术之后,1.1支持更多的请求方法,更加精细的缓存控制,原生直接支持持久连接功能(presistent)。

2.0提供了HTTP语义优化的传输,spdy : google引入了的一个技术,能够加速加速机制,但是spdy现在用的还不多。

目前常用的版本就是1.0版本和1.1版本。

html文本介绍

html文本架构

TITLE

H1

H2

ToGoogle

html文档的生成方式

静态事先就编辑并定义完成的

动态通过编译语言编写的程序后输出html格式的结果动态语言有:php,jsp,asp,.net

备注:这些脚本都必须有相应的解释器,比如说 php需要有php解释器等等

静态和动态的方式

静态1、Web服务器向内核注册socket2、客户端通过浏览器,向Web服务器发起request请求3、Web服务器收到客户端的request信息4、如果用户请求的资源在服务器本地的话,Message(请求报文)客户端  -→  服务器端由客户端向服务器端发出请求,不同的网站用于请求不同的资源(html文档)

2.response Message(响应报文)服务器端 -→ 客户端是服务器予以响应客户端的请求

请求报文格式介绍

请求行 + 请求首部 + 空白行 + 请求实体

例如:

                      # 这里一定要是一个空白行

1.请求行由请求方法字段+请求URL字段+HTTP协议版本组成,用来标识客户端请求的资源时使用的请求方法,请求的资源,请求的协议版本是什么,它们直接使用“空格”进行分隔!

这次请求的方式是什么,也就是请求方法

请求的是哪个资源,哪个URL。可以是相对路径,如/p_w_picpaths/log.jpg,也可以是绝对路径,如请求的协议版本是什么,首部,首部可能不止一个。各种所可以使用的首部信息

3.空白行

请求首部之后会有一个空白行,通过发送回车字符和换行符,用于通知服务器端以下的内容将不会再出现请求首部的信息。

4.请求实体你需要请求的内容到底是什么

请求实体,你到底请求的内容是什么

响应报文格式介绍

起始行 + 响应首部 + 空白行 +  响应实体

例如:

                       # 这里一定要是一个空白行

1.起始行也称之为状态行,用于服务器端响应客户端请求的状态信息,由版本号 + 状态码 + 原因短语组成,例如“ HTTP/1.1 200 OK”

响应时客户端请求的是什么版本,服务器端就需要响应什么版本

请求的状态码是什么 202,403等

响应的状态码的信息是什么,原因短语,这个状态码所响应的意义,易读信息

一大堆的响应首部

响应体

2.响应首部

响应时客户端请求的是什么版本,服务器端就需要响应什么版本

请求的状态码是什么 202,403等

响应的状态码的信息是什么,原因短语,这个状态码所响应的意义,易读信息

一大堆的响应首部

响应体类似请求报文,起始行后面一般有若干个头部字段。每个头部字段都包含一个名字和一个值,两者之间用冒号分割。格式Name:Value。例如:Content-Type: test/html; charset=utf-8Content-Length: 78

3.空白行最后一个响应首部信息之后就是一个空行,通过发送回车符和换行符,通知客户端空行下无首部信息

4.响应实体响应实体中装载了要返回给客户端的数据。这些数据可以是文本,也可以是二进制(例如图片,视频)

响应时客户端请求的是什么版本,服务器端就需要响应什么版本

请求的状态码是什么 202,403等

响应的状态码的信息是什么,原因短语,这个状态码所响应的意义,易读信息

一大堆的响应首部

响应体

HTTP请求方法

在HTTP通信过程中,每个HTTP请求报文中都会包含一个HTTP请求方法,用于告知客户端向服务器端请求执行某些具体的操作,下面列举几项常用的HTTP请求方法。

HTTP请求方法

描述

GET

用于客户端请求指定资源信息,并返回指定资源实体

HEAD

GET相似,但其不需要服务器响应请求的资源,而返回响应首部(只需要响应首部即可,就是告诉我有或者没有,不需要缓存界面给我)

POST

基于HTML表单向服务器提交数据,服务器通常需要存储此数据,通常存放在mysql这种关系型数据库中

PUT

GET相反,是向服务器发送资源的,服务器通常需要存储此资源(存放的位置通常是文件系统)

DELETE

请求服务器端删除URL指定的资源

MOVE

请求服务器将指定的页面移至另一个网络地址

OPTIONS

探测服务器端对请求的URL所支持使用的请求方法

TRACE

跟一次请求中间所经历的代理服务器、防火墙或网关等。

常用的HTTP请求方式是GET, POST, HEAD

HTTP的状态码

状态码

说明

1XX

信息性状态码,用于指定客户端相应的某些操作

2XX

成功状态码,我请求一个资源,这个资源在,这就表示请求成功了。

3XX

重定向的状态码,有时会返回的是一个新地址,而非结果

4XX

客户端类错误,你请求的资源不存在,或者你请求的时候,我们这个资源拒绝你访问,你没有权限

5XX

服务器类的错误信息。向服务器发起请求,服务器发现需要运行一个脚本,从而调用解析库。如果在调用过程中出错就会出现这种情况。或者你的脚本有语法错误,也可能会导致这个问题。

常用状态码说明

状态码

说明

200

服务器成功返回网页,这是成功的HTTP请求返回的标准状态码

201

CREATED 上传文件成功后显示

301

Move Permanently,永久重定向,会返回一个新地址,并告诉我们你所请求的地址将永久挪到那个新地址去了

302

Fonud,临时重定向,临时放到某个地方,会在响应报文中使用“Location:新位置”;

304

Not Modified,资源没有做任何修改

403

Forbidden 请求被拒绝

404

Not Found 请求的资源不存在

405

Method Not Allowed 你使用的方法不被允许,不支持

500

Internal Server Error:服务器内部错误

502

Bad Gateway,代理服务器从上游服务器收到一条伪响应;上一层服务器返回了一个无法理解的报文,所以代理服务器就会表示错误。

503

Service Unavailable,服务暂时不可用

HTTP首部介绍

· 通用首部

· 请求首部

· 响应首部

· 实体首部:专门用来表示实体中资源内部的类型、长度、编码格式等

· 扩展首部:非标准首部,可有程序员自行创建

通用首部

· Connection:定义C/S之间关于请求、响应的有关选项在的时候,如果他想使用持久连接,那么他所设置的选项即为

Connection:keep-alive

· Cache-Control:缓存控制,实现更精细的缓存控制方式。在1.1上比较常见

请求首部

· Client-IP :客户端 IP地址

· Host :请求的主机,这在实现基于主机名的虚拟主机时很有用

· Referer :指明了请求当前资源原始资源的URL,使用referer是可以防盗链

· User-Agent:用户代理,一般而言是浏览器

· Accept首部:指客户端可以接受哪些编码的类型

§ Accept:服务端能够发送的媒体的类型

§ Accetp-Charset:接收的字符集

§ Accept-Encoding:编码格式

§ Accept-Lanage:所能接受的语言编码格式

· 条件式请求首部:(在是否需要持久连接。值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。

Content-Length:表示请求消息正文的长度;

Cookie:这是最重要的请求头信息之一;

Cookie相关的HTTP扩展头

1)Cookie:客户端将服务器设置的Cookie返回到服务器;

2)Set-Cookie:服务器向客户端设置Cookie;

3)Cookie2 (RFC2965)):客户端指示服务器支持Cookie的版本;

4)Set-Cookie2 (RFC2965):服务器向客户端设置Cookie。

Cookie的流程

服务器在响应消息中用Set-Cookie头将Cookie的内容回送给客户端,客户端在新的请求中将相同的内容携带在Cookie头中

Host:初始URL中的主机和端口;

If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答;

Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。

User-Agent:浏览器类型

HTTP最常见的响应头

HTTP最常见的响应头如下所示:

Allow:服务器支持哪些请求方法(如GET、POST等);

Content-Encoding: 文档的编码(Encode)方法。

Content-Length: 表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。

Content-Type: 表 示后面的文档属于什么MIME类型。

Accept-Ranges: bytes  该响应头表明服务器支持Range请求,以及服务器所支持的单位是字节(这也是唯一可用的单位).我们还能知道:服务器支持断点续传,以及支持同时下载文件的多个部分,也就是说下载工具可以利用范围请求加速下载该文件.Accept-Ranges: none 响应头表示服务器不支持范围请求.

Date:当前的GMT时间。

Expires:指明应该在什么时候认为文档已经过期,从而不再缓存它。

Last-Modified: 文档的最后改动时间。

Location:表示客户应当到哪里去提取文档。

Refresh:表示浏览器应该在多少时间之后刷新文档,以秒计。

HTTP最常见的实体头

实体头用作实体内容的元信息,描述了实体内容的属性,包括实体信息类型,长度,压缩方法,最后一次修改时间,数据有效性等。

Allow:GET,POST

Content-Encoding:文档的编码(Encode)方法,例如:gzip,

Content-Language:内容的语言类型,例如:zh-cn;

Content-Length:表示内容长度,eg:80,可参考“2.5响应头”;

Content-Location:表示客户应当到哪里去提取文档,例如:charset=GB2312       主类型/子类型;

HTTP的事务

包含了一个HTTP请求,和对应请求的响应就叫做一个主标记和次标记

常用的MIME类型

MIME类型

文件类型

test/html

html、htm文本类型

text/plain

text文本类型

p_w_picpath/jpeg

jpeg图像类型

p_w_picpath/gif

gif图像类型

vedio/mpeg4

音频标记类型

application/vnd.ms-powerpoint

动态资源的标记方式

URI和URL

· URI(Uniform Resource Identifier) 同一资源标示符用于标识某一互联网资源名称的字符串,通过这种标识来允许你用户对资源可通过特定的协议进行交互操作。在Web上可用的每种资源,包括HTML文档、图像、视频片段、程序等, 由一个通用资源标识符进行定位。所以我们可以使用URI来标识每个资源的名称

· URL(Uniform Resource Locator)(统一资源定位符)用于描述一个特定服务器上某资源的特定位置。例如:Gateway Interface 通用网关接口web服务器发现需要执行脚本了,就通过CGI协议跟后端的应用程序打交道,把用户的请求动态交给服务器,这个服务器的结果通过CGI协议返回给响应头信息

先看看客户端(浏览器)从服务器请求数据经历如下基本步骤:

1.用户发起一个1.0中提出来的,因为他使用的是绝对日期,如果服务端和客户端时钟不同步的话(实际上这种情况非常常见),缓存可能就会认为文档已经过了保质期。 4、服务器接收到请求,然后判断资源是否变更,是则返回新内容,否则返回304,未变更,更新过期时间。

HTTP 响应头的信息

(1).  HTTP 返回码:

1xx:client的请求server已经接收,正在处理

2xx:成功  表示 client请求,server端已经接收、理解并处理

3xx:client 请求被重定向其他的server【其他的URL】

4xx:表示client请求不正确,server不能识别

5xx:server端服务不正常

(2). Cache-Control:

web 站点对缓存的设置: Cache-Control指定请求和响应遵循的缓存机制

缓存分类

1)私有缓存:常见就是我们的浏览器里内置的缓存。

2)公有缓存:常见的就是代理缓存

先看Cache-Control可选的参数:private、public 、no-cache、max-age、must-revalidate等

no-cache: 响应不会被缓存,而是实时向服务器端请求资源

no-store :在任何条件下,响应都不会被缓存,并且不会被写入到客户端的磁盘里,这也是基于安全考虑的某些敏感的响应才会使用这个。

Private:指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当前用户的部分响应消息,此响应消息对于其他用户的请求无效。不能再用户间共享。

Public:响应会被缓存,并且在多用户间共享。正常情况, 如果要求 HTTP 认证,响应会自动设置为 private。

max-age:指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应,例如: Cache-control: max-age=5 表示当访问此网页后的5秒内再次访问不会去服务器。

must-revalidate :响应在特定条件下会被重用,以满足接下来的请求,但是它必须到服务器端去验证它是不是仍然是最新的(强制所有缓存都验证响应)。

proxy-revalidate : 类似于 must-revalidate, 它要求对公共缓存进行验证

(3). Connection:

server 是否支持长连接;如果keep-alive 说明web的server 支持长连接。

但是TCP 的长连接是双向的;必须是client和server 都支持长连接;才可以建立长连接。

一般client 【浏览器】都是默认支持长连接;所以只要sever端支持长连接;就可以建立长连接。

通过curl的-w参数我们可以自定义curl的输出,%{http_code}代表http状态码


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:详解Java并发编程之volatile关键字
下一篇:人员高密场景AP部署经验分享
相关文章

 发表评论

暂时没有评论,来抢沙发吧~