Linux__计算机网络(应用层/HTTP协议)

     重点知识:
          ·理解应用层协议,学习HTTP协议
          ·理解传输层的作用和TCP的机制和特性
          ·理解网络层的作用和IP协议
          ·理解数据链路层的作用和ARP协议
          ·理解TCP/IP协议
          ·分析网络问题的工具和方法


应用层
     最贴近于实际,解决日常需求的网络应用,就是在这一层,也是和用户最紧密的。
     协议
     协议是一种“约定”,而在计算机学科,一般而言,协议,就是网络协议的简称,网络协议是通信计算机双方必须遵守的一组约定,例如如何去建立连接,怎样去互相识别等等。只有遵守这个约定,计算机之间才能相互通信交流。他的三要素是:语法,语义,时序
     先举一个简单的例子,例如一个网络版的计算器,他是怎么工作的呢?首先要由客户端将需要处理的数据发送给服务端,然后服务器获取到数据,进行运算,再把结果返回给客户端。而这个时候就需要一些约定,不能出现你发你的,我收我的,这样可能导致双方都得不到正确的处理。因此需要有约定:    
     约定一:
          ·客户端发送形如“1+1”的字符串,这个字符串有两个操作数,都是整形;
          ·两个数字之间有一个字符是运算符,运算符只能是+;
          ·数字和运算符之间没有空格;
     约定二:
          ·定义一个结构体来表示我们需要交互的信息;
          ·发送数据时将这个结构体按照一个规则转换成字符串,接收到数据的时候在按照相同的规则把字符串转化为结构体;
          ·类似于这样的过程,我们称之为“序列化”和“反序列化”

HTTP协议
     关于HTTP协议,百度词条上是这么说的:

超文本传输协议 (HTTP,HyperText Transfer Protocol)是 互联网 上应用最为广泛的一种 网络协议 。所有的 WWW 文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收 HTML 页面的方法。1960年美国人 Ted Nelson 构思了一种通过 计算机 处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和 互联网工程工作小组 (Internet Engineering Task Force )共同合作研究,最终发布了一系列的 RFC ,其中著名的RFC 2616定义了HTTP 1.1。

其实,这就是一种约定,是被定义好的,现成的可用的,被大家接受的协议,供我们参考使用。要认识HTTP,首先我们来认识一下URL;

     urlencode和urlecode
在url里像/?:等等的字符,已经被url当做特殊意义理解了。因此这些字符不能随意出现。当出现这些字符,就会被转义,转义规则如下:
     将需要转码的字符转为16进制,然后从右到左,取4位(不足四位直接处理),每两位做一位,前面加上%,编码成%XY格式。

HTTP协议格式
     HTTP请求

·首行:[方法]+[url]+[版本]
·Header:请求的属性,冒号是分割的键值对;煤堆属性之间使用\n分割;遇到空行表示Header部分结束
·Body:空行后面的内容都是Body。Body允许为空字符串。如果Body存在,则在Header终会有一个Content-Length属性来标识Body的长度
     HTTP响应

·首行:[版本号]+[状态码]+[状态码解释]
·Header:请求的属性,冒号分割的键值对;每组属性之间使用\n分割;遇到空行表示Header部分结束
·Body:空行后面的内容都是body,Body允许为空字符串。如果Body存在,则在Header中会有一个Content-Length属性来标识Body的长度。如果服务器返回了一个html页面,那么html页面内容就是在body中。
HTTP的方法

方法
说明
支持的HTTP协议版本
GET
获取资源
1.0、1.1
POST
传输实体主体
1.1、1.1
PUT
传输文件
1.1、1.1
HEAD
获得报文首部
1.1、1.1
DELETE
删除文件
1.1、1.1
OPTIONS
询问支持的方法
1.1
TRACE
追踪路径
1.1
CONNECT
采用隧道协议代理链接
1.1
LINK 建立和资源之间的联系
1.0
UNLINE 断开连接关系 1.0
其中最常用的就是GET和POST方法

HTTP的状态码

  类别 原因短语
1XX informational(信息性状态码) 接受的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕
3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
4XX Client Error(客户端错误状态码) 服务器无法处理请求
5XX Server Error(服务器错误状态码) 服务器处理请求出错
     最常见的状态码,比如200(OK),404(Not Found),403(Forbidden),302(Redirect,重定向),504(Bad Gateway)

HTTP常见Header
     ·Content-Type: 数据类型(text/html)等
     ·Content-Length: Body的长度
     ·Host: 客户端告知服务器,所请求的资源是在哪个知己的哪个端口上;
     ·User-Agent: 声明用户的操作系统和浏览器版本信息
     ·referer: 当前页面是从哪个页面跳转过来的
     ·location: 搭配3XX状态码使用,告诉客户端接下来要去哪里访问
     ·Cookie: 用于在客户端储存少量信息,通常用于实现会话(session)的功能;