http协议

1 简介(https://www.cnblogs.com/ranyonsue/p/5984001.html)

HTTP协议是超文本传输协议,是用于从万维网服务器传输超文本到本地浏览器得传输协议。

HTTP是一个属于TCP/IP通信协议来传递数据(HTML文件、图片文件等)。它是一个属于应用层得面向对象得协议。

HTTP协议工作于客户端-服务端架构之上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。WEB服务器根据收到得请求后,向客户端发送响应信息。

2 特点

a 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户端与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

b 灵活:HTTP允许传输任意类型的数据对象。

c 无连接:无连接的含义时限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节约传输时间。

d 无状态:HTTP协议时无状态协议。无状态时指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则必须重传,这样可能导致每次传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

e 支持B/S以及C/S模式

3 URL 和 URI 的区别

URI 是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。

WEB上可用的每种资源如HTML文档、图像、视频、程序都是一个用URI来定位的。

它由三部分组成:访问资源的命名机制、存放资源的主机名、资源自身的名称(路径表示,强调资源)

 

URL是uniform resourece locator,统一资源定位器,它是一种具体的URI,既URL可以使用标识一个资源,而且还指明了如何locate这个资源。

它由三部分组成:协议 存有该资源的主机IP地址、主机资源的具体地址。

4 HTTP之URL

HTTP使用统一资源定位符URL,是互联网上用来表示某一处资源的地址。

举个例子;

http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name

从上面的URL可以看出,一个完整的URL包括以下几部分:

a 协议部分:该URL的协议部分为http,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议,如HTTP、FTP等。

b 域名部分。

c 端口

d 虚拟目录部分:从域名后的第一'/'开始到最后一个'/'为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分,本例子中虚拟目录是/news/,非必需部分

e 文件名部分:从域名后的最后一个'/'开始到'?'为止,是文件名部分,如果没有“?”,则从域名后的最后一个‘/’开始到'#'为止,如果没有'?'和'#',那么从域名后的最后一个'/'开始到结束,都是文件名部分。非必须部分。

f 锚部分:从'#'开始到最后,都是锚部分。本例子的锚部分是'name'。非必须部分。

h 参数部分:从'?'开始到'#'为止之间的部分为参数部分,又称搜索部分、查询部分。参数可以允许有多个参数 ,之间用&隔离。

 

5 HTTP之请求消息Request

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:

请求行(request line),请求头部分(header),空行和请求数据四个部分组成。

A、请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本。

B、请求方法包括:GET、HEAD、PUT、POST、TRACE、OPTIONS、DELETE以及扩展方法。

请求头部为请求报文添加一些附加信息,由“名/值”对组成,每行一对,名和值之间使用冒号分隔。

常见请求头如下:

Host           接受请求的服务器地址,可以是IP:端口,也可以是域名

User-Agent 发送请求的应用程序名称

Connection 指定与连接相关的属性,如Connection:Keep-Alive

Accept-Charset 通知服务端可以发送的编码格式

Accept-Encoding 通知服务端可以发送的数据压缩格式

Accept-Language 通知服务端可以发送的语言

请求头部的最后会由一个空行,表示请求头部结束,接下来为请求正文。

C、请求正文

可选部分,比如GET请求就没有请求正文。当遇到连续两个\r\n时,Header部分结束,后面的数据全部是Body。

HTTP响应报文格式主要由状态行、消息报头、空行、响应正文3部分组成

1 状态行

由3部分组成,HTTP协议版本号、状态码、状态消息三部分组成。

2 消息报头,用来说明客户端要使用的一些附加消息

3 空行,消息报头后面的空行是必须的

4 响应正文 服务器返回给客户端的文本信息。HTTP响应如果包含body,也是通过\r\n\r\n来分隔的。注意body的数据类型由content-type头来确定,如果时网页,body就是文本,如果是图片,body就是图片的二进制数据。

当存在cotent-encoding时,body数据是被压缩的,最常见的压缩方式是gzip,所以,看到content-encoding:gzip时,需要将body数据先解压缩,才能得到真正的数据。压缩的目的在于减少body的大小。

 

HTTP状态码

状态码有三位数字组成,第一个数字定义了响应的级别,共分物种类别:

1xx:指示信息--表示请求已接受,继续处理

2xx:成功--表示请求已被成功接受、理解。

3xx:重定向--要完成请求必须进行更进一步的操作

4xx:客户端错误--请求有语法错误或请求无法实现

5xx:服务器端错误--服务器未能实现合法的请求

常见状态码:

200 OK                             #客户端请求成功

400 Bad Request             #客户端请求有语法错误,不能被服务器所理解

401 Unauthorized             # 请求未经授权,这个状态码

HTTP 的版本分1.0和1.1 ,目前HTTP协议的版本就是1.1,但是大部分服务器也支持1.0版本,主要区别在于1,1版本运行多个HTTP请求服用一个TCP连接,以加快传输速度。

 

posted @ 2018-03-01 15:00  会开车的好厨师  阅读(118)  评论(0)    收藏  举报