http:hyper text transfer protocol超文本传输协议。互联网应用最广泛的网络协议,主要用于web服务。格式为HTML超文本标记语言来实现。
协议的版本:
http0.9:仅于用户传输html文档
http1.0:1,引用了mime机制:多用途互联网邮件扩展,http可以发送多媒体信息,此机制让http不在单单只支持html格式,还可以支持其他格式进行发送。
2,引用了keep-alive机制,支持持久连接的功能(在首部添加了某个字段而形成的,并非原生就支持此功能)
3,引用支持缓存功能
http1.1:支持更多的请求方法,更加精细的缓存控制,原生直接支持持久连接功能。目前常用的版本
http2.0:提供了http语义优化的传输,能够加速http数据交互,尤其是使用ssl加速机制。大师spdy现在用的还不多。
html文本架构:
<a href="https://s2.51cto.com/wyfs02/M00/8F/A0/wKioL1jnM1HzQDwkAAAWr-XMde8527.png-wh_500x0-wm_3-wmp_4-s_3084636211.png" target="_blank"></a>
html文档生成方式:
静态:事先就编译并定义完成的
<a href="https://s2.51cto.com/wyfs02/M00/8F/A2/wKiom1jnNA6CCMpXAADFW2-ZkYg997.png-wh_500x0-wm_3-wmp_4-s_407477554.png" target="_blank"></a>
1,web服务器向内核注册socket
2,客户端通过浏览器向web服务器发起request请求
3,web服务器收到客户端的request信息
4,如果用户请求的资源在服务器本地,http服务器会向系统内核申请调用
5,内核调用本地磁盘里的数据,并将数据发送http服务
6,http将用户请求的资源通过response报文响应客户端
动态:通过编译语言编写的程序输出html格式的结果。动态语音有:php,jsp,asp,.net。这些语音都必须有相应的解释器。
<a href="https://s4.51cto.com/wyfs02/M00/8F/A0/wKioL1jnNBrTmgPFAADfagRRtK0607.png-wh_500x0-wm_3-wmp_4-s_1689049244.png" target="_blank"></a>
用户请求的是动态内容,http服务会调用后端的解析器,有动态语言去处理用户的请求,需要请求数据的时候,会向内核申请调用,从而向磁盘中获取用户指定的数据,通过解释器运行,运行的结果会生成html格式的文件,然后构建响应报文,最终发回给客户端。
http报文中存在很多行内容,一般是由ASCLL码组成,各字段长度不确定。http报文可分为请求报文与响应报文。
请求报文格式:
请求行:由请求方法字段<method>+请求URL字段<request-URL>+HTTP协议版本<version>组成。
<version>请求的协议版本,格式http/<major>.<minor>
这是用wireshark工具抓取http请求报文的显示结果。在首部后的“\r\n”表示一个回车和换行,以此将该首部与下一个首部隔开
或者使用curl命令获取http请求报文
请求首部
有关键字+关键字的值组成,之间使用“:”进行分隔,格式Name:Value,请求首部的作用是通过客户端将请求的相关内容告知服务器端,首部可以不止一个User-Agent:产生请求的浏览器类型。Accept:客户端可识别的内容类型列表。Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。
· Client-IP:客户端 IP地址
· Host:请求的主机,这在实现基于主机名的虚拟主机时很有用
· Referer:指明了请求当前资源原始资源的URL,使用referer是可以防盗链
· User-Agent:用户代理,一般而言是浏览器
· Accept首部:指客户端可以接受哪些编码的类型
§ Accept:服务端能够发送的媒体的类型
§ Accetp-Charset:接收的字符集
§ Accept-Encoding:编码格式
§ Accept-Lanage:所能接受的语言编码格式
· 条件式请求首部:(在http1.1中才会用到)
当发送请求时,先问问对方是否满足条件,如果满足条件就请求,不满足就不请求
· 跟安全相关的请求:
§ Authorization
§ Cookie
空白行
最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头。
请求实体
请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头是Content-Type和Content-Length。
相应报文格式
起始行+响应首部+空白行+相应实体
状态行:状态行由 HTTP 协议版本字段、状态码和状态码的描述文本 3 个部分组成,他们之间使用空格隔开;
● 状态码由三位数字组成,第一位数字表示响应的类型,常用的状态码有五大类如下所示:
1xx:表示服务器已接收了客户端请求,客户端可继续发送请求;
2xx:表示服务器已成功接收到请求并进行处理;
3xx:表示服务器要求客户端重定向;
4xx:表示客户端的请求有非法内容;
5xx:表示服务器未能正常处理客户端的请求而出现意外错误;
● 状态码描述文本有如下取值:
200 OK:表示客户端请求成功;
201:CREATED上传文件成功后显示
301:Move Permanently,永久重定向,会返回一个新地址,并告诉请求的地址将永久挪到哪个新地址
302:Fonud:临时重定向,临时放到某个地方,会在响应报文中使用“Location:新位置”
304:Not MOdified,资源没有做
400 Bad Request:表示客户端请求有语法错误,不能被服务器所理解;
401 Unauthonzed:表示请求未经授权,该状态代码必须与 WWW-Authenticate 报头域一起使用;
403 Forbidden:表示服务器收到请求,但是拒绝提供服务,通常会在响应正文中给出不提供服务的原因;
404 Not Found:请求的资源不存在,例如,输入了错误的URL;
500 Internal Server Error:表示服务器发生不可预期的错误,导致无法完成客户端的请求;
503 Service Unavailable:表示服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常;
响应头部:响应头可能包括:
Location:Location响应报头域用于重定向接受者到一个新的位置。例如:客户端所请求的页面已不存在原先的位置,为了让客户端重定向到这个页面新的位置,服务器端可以发回Location响应报头后使用重定向语句,让客户端去访问新的域名所对应的服务器上的资源;
Server:Server 响应报头域包含了服务器用来处理请求的软件信息及其版本。它和 User-Agent 请求报头域是相对应的,前者发送服务器端软件的信息,后者发送客户端软件(浏览器)和操作系统的信息。
Vary:指示不可缓存的请求头列表;
Connection:连接方式;
对于请求来说:close(告诉 WEB 服务器或者代理服务器,在完成本次请求的响应后,断开连接,不等待本次连接的后续请求了)。keepalive(告诉WEB服务器或者代理服务器,在完成本次请求的响应后,保持连接,等待本次连接的后续请求);
对于响应来说:close(连接已经关闭); keepalive(连接保持着,在等待本次连接的后续请求); Keep-Alive:如果浏览器请求保持连接,则该头部表明希望WEB 服务器保持连接多长时间(秒);例如:Keep-Alive:300;
WWW-Authenticate:WWW-Authenticate响应报头域必须被包含在401 (未授权的)响应消息中,这个报头域和前面讲到的Authorization 请求报头域是相关的,当客户端收到 401 响应消息,就要决定是否请求服务器对其进行验证。如果要求服务器对其进行验证,就可以发送一个包含了Authorization 报头域的请求;
空行:最后一个响应头部之后是一个空行,发送回车符和换行符,通知服务器以下不再有响应头部。
响应包体:服务器返回给客户端的文本信息;
http请求方法
http通信过程中,每个http请求报文中都会包含一个http请求方法,用于告知客户端请求执行某些具体的操作
GET: 请求指定的页面信息,并返回实体主体。
HEAD: 只请求页面的首部。
POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。
PUT: 从客户端向服务器传送的数据取代指定的文档的内容。
DELETE: 请求服务器删除指定的页面。
OPTIONS: 允许客户端查看服务器的性能。
TRACE: 请求服务器在响应中的实体主体部分返回所得到的内容。
PATCH: 实体中包含一个表,表中说明与该URI所表示的原内容的区别。
MOVE: 请求服务器将指定的页面移至另一个网络地址。
COPY: 请求服务器将指定的页面拷贝至另一个网络地址。
LINK: 请求服务器建立链接关系。
UNLINK: 断开链接关系。
WRAPPED: 允许客户端发送经过封装的请求。
Extension-mothed:在不改动协议的前提下,可增加另外的方法。
比如:
GET /index.html HTTP/1.1
Accept: text/plain /*纯ASCII码文本文件*/
Accept: text/html /*HTML文本文件*/
User-Agent:Mozilla/4.5(WinNT)
说明浏览器使用Get方法请求文档/index.html。浏览器则只允许接收纯ASCII码文本文件和HTML文本文件,其使用的引擎是Mozilla/4.5(Netscape)。
http常用的请求头
Accept:浏览器可接受的MIMIE类型
Accept-Charset:浏览器可接受的字符集
Accept-Encoding:浏览器能够进行解析的数据编码方式
Accept-Language:浏览器所希望的语言种类
Authorication:授权信息
Connection:表示是否需要持久连接。值为“keep-Alive”
Content-Length:表示请求消息正文的长度
Cookie:相关的http扩展头
Cookie:客户端将服务器设置的Cookie返回到服务器
Set-Cookie:服务器向客户端设置Cookie
Cookie2:客户端指示服务器支持Cookie的版本
set-Cookie2:服务器向客户端设置Cookie
本文转自 宏强 51CTO博客,原文链接:http://blog.51cto.com/tanhong/1913843