标签:http协议
一、http协议基本概念
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
1.套接字
(1)套接字的定义
套接字,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。
(2)套接字的分类
常用的TCP/IP协议的3种套接字类型如下:
①流套接字(SOCK_STREAM):
流套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复发送,并按顺序接收。流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(The Transmission Control Protocol)协议。
②数据报套接字(SOCK_DGRAM):
数据报套接字提供了一种无连接的服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。数据报套接字使用UDP(User Datagram Protocol)协议进行数据的传输。由于数据报套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理。
③原始套接字(SOCK_RAW):
原始套接字(SOCKET_RAW)允许对较低层次的协议直接访问,比如IP、 ICMP协议,它常用于检验新的协议实现,或者访问现有服务中配置的新设备,因为RAW SOCKET可以自如地控制Windows下的多种协议,能够对网络底层的传输机制进行控制,所以可以应用原始套接字来操纵网络层和传输层应用。
2.http协议版本
超文本传输协议已经演化出了很多版本,它们中的大部分都是向下兼容的。
0.9已过时,只接受GET一种请求方法,没有在通讯中指定版本号,且不支持请求头。由于该版本不支持 POST 方法,所以客户端无法向服务器传递太多信息。
HTTP/1.0这是第一个在通讯中指定版本号的HTTP协议版本,至今仍被广泛采用,特别是在代理服务器中。
HTTP/1.1当前版本,持久连接被默认采用,并能很好地配合代理服务器工作。还支持以管道方式同时发送多个请求,以便降低线路负载,提高传输速度。
spdy:加速浏览器获取资源速度。
HTTP/2.0:整合spdy协议的优势。
3.MIME
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
nase64:将二进制数据编码成文本发送,并能够让接受方还原回原来的格式。
二、http报文格式与请求方法
1.http方法:
安全的方法:GET、HEAD
POST、PUT、DELETE、OPTIONS、TRACE
扩展方法:LOCK、MKCOL、COPY、MOVE
GET:请求获取一个资源,需要服务器发送
HEAD:跟GET相似,但其不需要服务发送资源而仅传回响应首部
POST:支持HTML表单提交,表单中有用户填入的数据,这些数据会发送到服务器端,由服务器存储至某位置(例如发送处理程序)
PUT:与GET相反,向服务写入文档;发布系统
DELETE:请求删除URL指向的资源
OPTIONS:探测服务器端对某资源所支持的请求方法
TRACE:追踪请求资源要经过的防火墙、代理或网关等
2.http报文格式
HTTP事务:一次请求以与其对应的响应。
(1)HTTP请求报文格式:
<method><request-url><version> #<获得的方法><请求的资源><http协议版本>
<headers> #<http协议首部>
<entity-body> #<报文主体>
(2)http响应报文格式:
<version><status><reason-phrase> #<http版本><状态码><原因短语>
<headers> #<响应报文首部>
<entity-body> #<报文主体>
(3)http协议首部:
分三类:通用首部、请求首部和响应首部。
(4)http响应报文代码
1XX:信息性状态码
2XX:成功状态码
3XX:重定向状态码
301:Moved Permanebtly 永久重定向,在响应报文中使用首部“Location: URL”指定资源现在所在的位置
302:Found 临时重定向,在响应报文中使用首部“Location:URL”指定临时资源 位置
304:Not Modified,条件式请求中使用
4XX:客户端的错误
403:Forbidden,请求被服务器拒绝
404:Not Found,服务器无法找到请求的URL
405:Method Not Allowed,不允许使用此方法请求响应的URL
5XX:服务器类的错误
500:Internal Server Error,服务器内部错误
502:Bad Gateway:代理服务器从上游收到一条伪响应
503:Service Unavailable,服务器此时无法提供服务,但将来可能可用
(5)http首部
分为五类:通用首部、请求首部、响应首部、实体首部和扩展首部。
①通用首部:
Connection:定义C/S之间关于请求/响应的有关选项
对于http/1.0,Connection keep-alibe
Via:显示了报文经过的中间节点
Cache-Control:缓存指示
②请求首部:
Cilent-IP:请求端IP
Host:请求的主机名和端口号,虚拟主机环境下用于不同的虚拟主机
Referer:指明了请求当前资源的原始资源的URL
User-Agent:用户代理,使用什么工具发出的请求
Accept首部:用户标明客户自己更倾向于支持使用的能力
Accept:指明服务器能发送的媒体类型
Accept-Charset:支持使用的字符集
Accept-Encoding:支持使用的编码方式
Accept-Language:支持使用语言
③条件请求首部:
Expect:期望的行为
If-Modified-Since:是否在指定的时间以来修改过此资源
If-None-Match
跟安全相关的请求首部:
Authorication:客户端提交给服务端的认证数据,如账号和密码
Cookie:客户端发送给服务器端身份标识
Cookie2
④响应首部:
Age:响应持续的时间
Server:向客户端标明服务器程序名称和版本
⑤协商首部:
Accept-Ranges:对当前资源来讲,服务器所能够接受的范围类型
Vary:首部列表,服务器会根据列表中的内容挑选出最适合的版本发送给客户端
跟安全相关的响应首部
Set-Cookie:服务器端在某客户端第一次请求时发给的令牌
Set-Cookie2:
WWW-Authenication:质询,即要求客户端提供账号和密码
⑥实体首部:
Location:资源的新位置
Allow:允许对此资源使用的请求方法
内容首部:
Contern-Encoding
Contern-Language
Contern-Length
Contern-type
Contern-Range
Contern-Location
⑦缓存首部:
ETag:实体标签
Expires:过期标签
Last-Modified:上一次的修改时间
标签:http协议
原文地址:http://zhaibo.blog.51cto.com/8252246/1700068