一、什么是http协议
数据通信与网络一书中对协议是这样定义的“协议是用来管理数据通信的一组规则。协议规定了通信的内容、通信的方式和通信的时间。协议的核心要素是语法、语义和时序。” 那么什么是http协议呢?它到底是怎样应用到网络传输过程中的呢? 首先,http(超文本传输协议)是基于TCP连接主要用于万维网上存取数据的协议,它规定了浏览器发送数据的格式与服务器返回给浏览器的返回报文的格式。所有的浏览器厂商的基于C/S架构的服务器厂商必须遵循这样的协议,才使得同一种浏览器和服务器能接受不同的服务器和浏览器发送的请求并返回相应的信息。那么它到底是怎样规范浏览器和服务器行为的呢? 它规定浏览器必须以特定的格式向服务器发送请求,服务器也必须以特定的格式返回响应。用面向对象的思维可以这样解释,不同的浏览器和服务器可能会有不同的实现方式,但它们给外部提供的接口都有相同的格式。
二、http协议的两个版本之间的区别
1) http1.0是非持续连接,也就是说每次请求/响应都要建立TCP连接。具体步骤如下:
客户端建立TCP连接,并发送请求----------->服务器发送响应,并关闭连接---------->客户端读取数据,直到文件结束,随后关闭连接
可以明显的看出来,在这种策略中客户端发送N个请求就必须建立N次连接,因为服务器需要N个不同的缓冲区并且每次建立一个连接时需要一个较 慢的启动过程,因此这种非持续的策略加重了服务器的负担,传输效率也很低,因此现在已经被一种更先进的持续连接( http1.1)代替了。
2) 上面已经介绍了http1.1是一种持续的连接方式,即在建立TCP连接之后浏览器可以向服务器发送多个请求而服务器也可以返回多个响应给浏览器, 这种连接状态会一直保持直到浏览器或服务器发送断开请求给对方。相信在理解了http1.0个非持续策略之后这种非持续策略不难理解。
三、http协议的格式
1) 请求报文的格式:
请求报文一般包括请求行、请求头、空行、实体四部分内容。
请求行的格式为: 请求方式+空格+URI+空格+http协议版本(一般为HTTP/1.1)
请求头一般为一些键值对,用来确定浏览器配置和客户端首选的文档格式。
空行一般用来分割请求头和实体内容。
实体内容一般指浏览器向服务器提交的数据内容。
返回报文一般包括响应行、响应头、空行、实体四部分类容。
响应行的格式为:http协议版本(一般为HTTP/1.1+空格+状态码+状态短语)
响应头:与请求头一样,为键值对格式。
空行:分割响应头与实体内容。
实体内容:服务器返回给客户端的内容。
可以使用浏览器的调试工具在“网络”栏查看浏览器的请求报文格式与服务器的响应报文格式,截取部分如下图所示:
四、常见的请求方式(post和get的区别)
post和get是http协议中两种常见的请求格式(还有head和put格式),其中get为浏览器默认的请求格式。下面就总结一下这两种常见的请求格式的区别:
1) 以post方式提交的内容会显示在实体当中,为键值对的形式,不同键之间用“&”连接。类于“name=zhangsan&gender=boy”这种形式。而以get方式 提交的数据内容会直接跟在请求的url地址后并以“?”分割url地址和发送的请求内容。发送的请求内容格式与 以post方式发送的请求的格式相同。
2)以post方式提交的内容因为放在实体当中,所以没有大小限制,而以get方式提交的请求内容会直接跟在url后面所以会有大小限制,一般为1024字 节。
3)从两种不同的提交方式很容易就可以看出来以get方式提交的数据内容不太安全,很容易被别人察觉,因此对于用户比较敏感的数据在提交时使用 post方式提交是一种更好的选择。
五、常见的请求头信息
Accept: 给出客户端能接受的媒体格式
Accept-charset:给出客户端可以处理的字符集
Host:给出服务器的主机地址极端口号
User-agent:给出浏览器的相应信息
Cookie:浏览器保存的Cookie信息
Connection:close/keep-alive 给出浏览器的连接信息
六、常见响应状态码
100----199: 表示成功接受请求,要求客户端继续提交下一次请求才能完成整个过程
200----299: 表示成功接收求情并已处理完成。(常见200,对应的状态吗为OK,表示服务器返回正确结果)
300----399: 表示为了完成请求,客户需要进一步细化请求(常见302与Location联合使用可以进行请求重定向)
400----499: 客户端错误,(常见404表示页面没有找到)
500----599: 服务器内部错误
七、常见的响应头信息
Location:表示重定向地址
Server: 服务器类型
Content-Encoding: 服务器发送文本的编码
Content-Language: 服务器发送文本的语言
Set-Cookie: 发送给客户端的Cookie信息
Refresh: 设置浏览器定时刷新
Connection: 服务器与客户端的连接状态