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连接,以加快传输速度。

浙公网安备 33010602011771号