1.HTTP简介
HTTP(Hyper Text Transfer Protocol):超文本传输协议
HTTP是一个基于TCP/IP协议来传输数据(HTML文件,图片文件,查询结果等)的,用于万维网(WWW:World Wide Web)服务器与本地浏览器之间的传输协议。
HTTP是一个应用层协议
HTTP默认端口号是80,HTTPS默认端口号是443
现在普遍应用的是HTTP 1.1,最新版本HTTP 2.0
2. HTTP特点
1. 支持客户端/服务器模式:但HTTP协议都是由客户端发送请求后,服务器给予回应。这样就使得服务器无法主动推送消息
2. 简单快速:客户端发送请求只需请求方法和路径。因为HTTP协议简单,使得HTTP服务器的程序规模小,因而通讯很快
3. 灵活:只要客户端和服务器知道如何处理数据内容,HTTP协议允许传输任何类型的数据。正在传输的类型用Content-Type标记
4. HTTP 0.9和1.0使用非持续连接:限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接。HTTP 1.1使用持续连接:不必为每个web对象创建一个新的连接,一个连接可以传送多个对象,采用这种方式可以节省传输时间。
5. 无状态:无状态是指协议对事务处理没有记忆能力,缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量大。另一方面,在服务器不需要先前信息时它的应答就很快
3. 工作流程
一次HTTP操作称为一个事务,其工作过程可分为五步:
(1)首先客户端与服务器建立连接(如:点击某个超链接)
(2)建立连接后,客户端向服务器发送一个Request请求
(3)服务器收到请求后,解析请求返回给客户端一个Response响应
(4)客户端浏览器收到Response解析并展示在窗口
(5)释放TCP连接
Ps:客户端与服务器之间可能存在一个或多个代理服务器
4. HTTP消息结构
客户端请求信息(Request)
由四个部分组成:请求行(request line),请求头部(header),空行,请求数据
图一 Request结构
第一部分:请求行,用来说明请求类型,要访问的资源以及所使用的HTTP版本.
第二部分:请求头部,紧接着请求行(即第一行)之后的部分,用来说明服务器要使用的附加信息
第三部分:空行,请求头部后面的空行是必须的
第四部分:请求数据也叫主体,可以添加任意的其他数据。请求数据也可为空
服务器响应信息(Response)
由四个部分组成:状态行,消息报头,空行,响应正文
图二 Response结构
第一部分:状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。
第二部分:消息报头,用来说明客户端要使用的一些附加信息
第三部分:空行,消息报头后面的空行是必须的
第四部分:响应正文,服务器返回给客户端的文本信息。
5. HTTP请求方法
HTTP1.0定义了三种方法:GET,POST,HEAD
HTTP1.1新增了五种方法:OPTIONS,PUT,DELETE,TRACE,CONNECT
图三 HTTP请求方法
※GET和POST的区别:
1. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连。如EditPosts.aspx?name=bob&id=666。而POST方法则是把提交的数据放在HTTP包的body中。
2. GET提交的数据大小有限制,最多只能有1024字节(因为浏览器对URL长度有限制),而POST方法提交的数据没有限制。
3. GET方法需要使用Request.QueryString来获得变量的值,而POST方法通过Request.Form来获取变量的值。
4. GET方法提交数据,会带来安全问题,比如一个登录页面,通过GET方法提交数据时,用户的账号密码会出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号密码。
6.HTTP状态码
状态码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:
1xx:提示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器错误--服务器未能实现合法的请求
常见状态码:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器理解
401 Unauthorized //请求未经授权
403 Forbidden //服务器收到请求,但拒绝提供服务
404 Not Found //请求资源不存在
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能正常
更多状态码http://www.runoob.com/http/http-status-codes.html
7.HTTP之URL
URI,URL,URN的概念以及区别
HTTP使用URI(Uniform Resource Identifiers)统一资源标识符来传输数据和建立连接。URI是一个通用的概念,由两个主要的子集URL和URN构成。
URL(Uniform Resource Locator)统一资源定位器,是一种特殊类型的URI,包含了用于查找某个资源的足够的信息。
URN(Uniform Resource Name)统一资源命名,是一种通过名字来识别资源,与所处的位置无关
URL是一种强有力的工具。但URL并不完美。它表示的是实际的地址,而不是准确的名字。这种方案的缺点在于如果资源被移走了,URL也就不再有效了。那时,它就无法对对象进行定位了
如果有了对象的准确名称,则不论其位于何处都可以找到这个对象。就像人一样,只要给定了资源的名称和其他一些情况,无论资源移到何处,都能够追踪到它。为了应对这个问题,无论对象搬移到什么地方,URN都能为对象提供一个稳定的名称。
HTTP的URL语法格式
http://<host>:<port>/<path>?<query>#<frag>
1. 协议部分:http表示使用的是http协议,协议名是大小写无关的,http和HTTP等价
2. 域名部分:host为要访问的网站域名,也可使用IP地址作为域名
3. 端口部分:port表示要访问的主机端口,若省略端口,则默认采用80端口
4. 路径部分:path表示要访问的资源文件的路径地址
5. 查询部分:query表示查询,可以设置多个参数,参数之间用‘&’作为分隔符
6. 锚部分:frag表示一个资源内部的一个片段,URL可以指向HTML文档中的一个特点的图片或小节
例如:http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
表示使用http协议,访问域名为www.aspfans.com,访问端口号为8080,访问文件路径为news/index.asp,查询参数boardID=5,ID=24618和page=1,访问index.asp中的name片段。
8.HTTPS
HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单来说就是HTTP的安全版。即在HTTP下加入了SSL层
HTTPS的两种基本的加解密算法类型:
1. 对称加密:密钥只有一个,加解密为同一个密码,且加解密速度快,典型的对称加密算法有DES,AES等
2. 非对称加密:密钥成对出现(根据公钥无法推知私钥,根据私钥也无法推知公钥),加解密使用不同的密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对于对称加密,速度较慢。典型的非对称加密算法有RSA,DSA等
图四 HTTPS的通信过程
HTTPS通信的优点:
1.客户端产生的密钥只有客户端和服务器才能得到
2.加密的数据只有客户端和服务器才能得到明文
3.客户端到服务器的通信是安全的