HTTP (HyperText Transfer Protocol)超文本传输协议——位于应用层的协议(application-layer protocol)
它依赖于其他协议来完成目标
TCP——提高可靠的传输过程
IP——通过ip地址来传输
Layer2(数据链路层)协议——例如Ethernet,处理单个网络(通过wifi上网)
TCP( Transmission Control Protocol)背!!
• Connection-oriented protocol
TCP连接过程:
看这篇文章:http://t.csdn.cn/vBpSX
HTTP和TCP的关系
HTTP is built over TCP.HTTP是通过TCP来实现的,来传输数据。例如之前的socket,Socket socket=new Soket("10.0.0.1",80)就是创建之后会自动去完成TCP的连接,并产生一个数据的流。
好处:1.No (perceived) packet loss(可靠)2.No out-of-order delivery(按顺序的)3.Congestion/flow control automatically handled(自动处理的拥塞/流量控制)
Web page
URL(Uniform Resource Locator)
定义:A way of locating a resource on the Internet
– a file, an e-mail address, a CGI program …
组成部分:protocol://hostname[:port] /path/filename#section
hostname[:port] ——服务器的名称
path/filename#section——文件在服务器上的位置
#section——书签,
例如:http://www.company.com/index.html (如果不写端口,则自动使用默认的协议的端口号)
使用http这个协议去访问www.company.com(hostname,域名)这个网站,index.html 为我们想要访问这个网站的网页。
该例子没写端口,则使用http协议默认的端口号80,如果http换成FTP,则默认使用文件传输协议端口号。
HTTP主要指定以下几件事:
1.客户端(client)和服务器(sever)如何建立连接
2.客户端如何从服务器请求数据
3.服务器如何响应请求
4.连接如何关闭
HTTP不像TCP协议,HTTP是stateless(无状态的)指的是协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。也就是说,打开一个服务器上的网页和上一次打开这个服务器上的网页之间没有任何联系。HTTP 是一个无状态的面向连接的协议,无状态不代表 HTTP 不能保持 TCP 连接,更不能代表 HTTP 使用的是 UDP 协议,每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求是无直接关系的,它不受前面的请求应答情况直接影响。
举个栗子:当浏览器第一次发送数据给服务器时,服务器响应了;如果同一浏览器,向服务器第二次发送请求时,它还是会响应,但服务器并不知道你就是刚才那个浏览器。简而言之,服务器是不会记住你是谁的,所以是无状态的。
http协议这种特性有优点也有缺点,优点在于解放了服务器,每一次请求“点到为止”不会造成不必要连接占用,缺点在于每次请求会传输大量重复的内容信息。
HTTP的过程:(背课件上的英文就行了,这里为了方便理解)
1.客户端与服务器建立一个TCP的连接
2.客户端发送请求找服务器要“东西”(文件、图片、视频等)
3.服务器接收到请求并响应,即把“东西”发回给客户端
4.客户端收到消息后,TCP连接终止
具体过程如下:
重点!!!:HTTP请求方法——get、post
Get方法和Post方法的区别:Get方法——我想要得到一个东西。Post——我想要登陆服务器或者我想要在你那保存一个东西。
1.对于Get:Query string incorporated in the request URL.(在请求URL中包含的查询字符串)
对于Post:Query string placed in the body of the HTTP request.(位于HTTP请求主体中的查询字符串。)
解释:我在百度搜索栏中输入“1234”,“1234”为我输入的请求的字符串,它会在我的URL中显现,即wd=1234,这是Get方法。
而Post方法,比如我在登陆vpn服务器时,这里我登陆北邮邮箱:此处就是用到Post方法,我们输入的“账号”、“密码”等数据都是无法像Get那样在url中看到的,它是写在请求的body里头的。
2.对于Get:Idempotent: multiple requests have the same effect as a single one.(多个请求与一个请求具有相同的效果。)
对于Post:Non-idempotent: e.g. pressing a shopping button twice would result in two orders!(例如,按两次购物按钮就会得到两个订单!)
解释:对于get,我们每次输入同样的搜索内容,如“123”,它网页所呈现的结果是一样的。但对于post,我们登陆游戏账号,登陆一次,再登陆他可能就会提示你已经登陆过了,或者把已登录的账号挤掉。或者说,我往购物车里加东西,两次添加同样的商品,那购物车就会出现两个订单。简而言之,它所呈现的两次结果是不同的。
3.对于Get:有缓存。对于Post:不能缓存,因此想要在服务器修改内容时用post方法
HTTP剩下的部分感觉没啥理解的地方,就背概念吧,后续需要再更新!