什么是Http协议
是一种可靠的可以传送文档,声音,图像的一种与服务器交互的方式,它处于应用层。
怎么工作
它是建立在TCP的协议之上的。
- 首先,客户机与服务器要建立连接。
- 客户机发送请求,格式为统一资源定位符(URL)、协议版本号、MIME信息包括请求修饰符、客户机信息和可能的内容。
- 服务器接到请求之后,给予相应的响应,格式为一个状态行,包括信息协议的版本号,成功或错误的代码,MIME信息包括服务器信息,实体信息和可能的内容。
- 返回的信息到达客户机后,断开连接。
URL==统一资源定位符==网页地址
由三部分组成:
- 协议
- 存有资源的主机IP地址,端口号
- 主机资源的具体地址,文件名目录
如:http://www.jianshu.com/users/f36340596a1a/latest_articles
(另: - https的数据是经过加密的
- 域名要经过DNS解析)。
TCP
- SYN(Synchronous)是TCP建立连接时,由客户端发给服务端的握手信号。
- ACK(Acknowledgement) 即确认字符,服务器在接收到SYN信息后返回SYN+ACK给客户端,客户端再以ACK响应,这样才建立了可靠的TCP连接。
请求方法URI协议/版本
请求的第一行是“方法URL议/版本”:GET/sample.jsp HTTP/1.1
以上代码中“GET”代表请求方法,“/sample.jsp”表示URI,“HTTP/1.1代表协议和协议的版本。
根据HTTP标准,HTTP请求可以使用多种请求方法。例如:HTTP1.1支持7种请求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。在Internet应用中,最常用的方法是GET和POST。
URL完整地指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以“/”开头,最后,协议版本声明了通信过程中使用HTTP的版本。
请求头
请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长度等。
Accept:image/gif.image/jpeg./
Accept-Language:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)
Accept-Encoding:gzip,deflate.
GET
GET方法是默认的HTTP请求方法,我们日常用GET方法来提交表单数据,然而用GET方法提交的表单数据只经过了简单的编码,同时它将作为URL的一部分向Web服务器发送,因此,如果使用GET方法来提交表单数据就存在着安全隐患上。例如
Http://127.0.0.1/login.jsp?Name=zhangshi&Age=30&Submit=%cc%E+%BD%BB
从上面的URL请求中,很容易就可以辩认出表单提交的内容。(?之后的内容)另外由于GET方法提交的数据是作为URL请求的一部分所以提交的数据量不能太大
POST
POST方法是GET方法的一个替代方法,它主要是向Web服务器提交表单数据,尤其是大批量的数据。POST方法克服了GET方法的一些缺点。通过POST方法提交表单数据时,数据不是作为URL请求的一部分而是作为标准数据传送给Web服务器,这就克服了GET方法中的信息无法保密和数据量太小的缺点。因此,出于安全的考虑以及对用户隐私的尊重,通常表单提交时采用POST方法。
响应码
2xx:成功
200:OK,请求成功
201:OK,新的资源建立(post命令)
202:请求被接受,但处理未完成
204:OK,但没有内容返回
3xx:重定向:需要用户代理执行更多的动作
301:Moved Permanently永久转移(所请求的资源已被指派为新的固定URL)
302:Found 暂时转移(所请求的资源临时位于另外的URL)
304:文档没有修改(条件GET)
307:Temporary Redirect(临时重定向)
4xx:客户差错
400:Bad Request 请求错误
401:Unauthorized 未认证(该请求要求用户认证)
403:Forbidden 不明原因的禁止
404:Not Found 未找到
5xx:服务器差错
500:Internal Server Error(服务器错误)
501:没有实现
502:错误的网关(网关或上游服务器来的无效响应)
503:Service Unavailable(一般是访问人数过多)
HTTP1.0和1.1
- 1.0
每次请求都要建立新的TCP连接 - 1.1
- 请求可以建立在上次的TCP连接中,减少三次握手,提高效率
- 在Request的消息头新增加了Host域
- 增加了许多Request方法OPTIONS、PUT、DELETE、CONNECT、TARCE