HTTP协议
这两天跟着视频学习了一下有关于HTTP协议方面的知识,作为一个小小的笔记保存在此。
超文本传输协议(HTTP: Hyper Text Transfer Protocol)是现在互联网上应用最广泛的一种网络协议,现在大多数的web应用都需要基于HTTP进行开发。
web的交互流程
流程:客户端根据用户输入的地址信息(URL)请求服务器,服务器在接收到用户的请求后 进行处理,将处理结果响应给客户端,客户端将响应的结果响应给用户。
客户端与服务器之间产生的问题:
现在有IE,GOOGLE,Firefox等不同的浏览器。每一个浏览器都有与服务器进行请求响应的过程,如果这些浏览器同时向服务器提出请求,服务器识别这些请求,然后在处理完这些请求并将处理好的数据发送给浏览器的时候,因为格式的不统一,服务器并不会知道自己要把数据发送给哪一个浏览器。
为了规范浏览器与服务器之间的通讯格式,HTTP协议就成为了客户端和服务器端请求和响应的标准。
简单来说:HTTP协议就是客户端与服务器交互的一种格式标准,也是约束请求与响应的一种规则。
HTTP的介绍
HTTP是1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(Hypertext),最初的目的是为了提供一种能够发布和接收HTML页面的方法。在后来,Ted Nelson组织万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force)共同合作研究,最终发布了一系列RFC,其中最著名的RFC 2616定义了HTTP1.1。https://tools.ietf.org/html/rfc2616
HTTP的特点
1. 简单快速:HTTP请求和响应的格式是基于键值对的,使得HTTP的服务器程序规模小,通讯速度快。
2. 灵活: HTTP允许传输任意类型的数据对象。
3. 无连接:在服务器处理客户端的请求之前,是不需要建立HTTP连接的,在服务器处理完客户端的请求,并未收到客户的应 答后,则断开HTTP连接。
4. 无状态:同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时的相同,即重新开始服务(假设服务器还没更新该页面),因为服务器并不记得曾经访问过这个客户,也不会记得自己为该客户服务过多少次。
5. 支持B/S和C/S模式
持久连接:在HTTP1.0的时候,每一次进行HTTP通信就会断开一次连接,在访问的过程中就会不断的进行建立连接,断开连接,这样是非常浪费资源的。在HTTP1.1版本中,一次HTTP连接就能够处理多个请求,就是持久连接了。
HTTP的交互流程
HTTP连接一次完整的请求与响应有四个步骤
步骤一:客户端与服务器端建立连接
步骤二:客户端发送请求数据到服务器端
步骤三:服务器端接收到请求后,进行处理,然后将处理结果响应客户端
步骤四:关闭客户端和服务器端的连接(HTTP1.1后不会立即关闭)
HTTP协议之请求方式
请求格式的结构:
请求头:请求方式、请求的URL地址、HTTP协议版本
请求行:消息报头、一般用来说明客户端要使用的一些附加信息
空行: 位于请求行和请求数据之间,空行是必须的。
请求体:可以为空。
HTTP的请求方式:GET、POST、HEAD、OPTIONS、PUT、DELETE、TRACE、CONNECT
GET: 请求指定的页面信息,并返回实体主体。
HEAD:类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头
POST:向指定资源提交数据进行处理请求(例如提交表单或上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改
PUT: 从客户端向服务器传送的数据取代指定的文档内容。
DELETE: 请求服务器删除指定的页面。
CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS: 允许客户端查看服务器的性能。
TRACE: 回显服务器收到的请求,主要用于测试和诊断。
GET和POST请求方式的区别
GET请求方式:
请求数据会以?的形式隔开拼接在请求头中,不安全,没有请求实体部分。
HTTP协议虽然没有规定请求数据的大小,但是浏览器对URL的长度是有所限制的,所以GET请求不能携带大量的数据
POST请求方式:
请求数据在请求实体中进行发送,在URL中看不到具体的请求数据,安全,适合数据量大的数据发送。
HTTP协议之响应方式
响应格式的结构:
响应行(状态行):HTTP版本、状态码、状态消息
响应头:消息报头、客户端使用的附加信息
空行:响应头和响应实体之间的,必须的
响应实体:正文、服务器返回给浏览器的信息
HTTP常见响应状态码含义:
HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:
HTTP状态码分类:
分类 分类描述
1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误
常见状态码:
200 OK //客户端请求成功
204 No Content //目前请求成功,但客户端不需要更新其现有页 面。
206 Partial Content //对服务器进行范围请求,只返回一部分数据
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和 WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段 时间后可能恢复正常