什么是web?
它的全称是World Wide Web,缩写WWW,中文称为万维网。web最基本的构成是网页,而他最大的特单就是网页之间互相间接。
那什么是网页呢?
网页是由多个对象构成的,对象就是图片、视频、动态脚本、html文件等。每个网页都包含了一个最基本的html文件,这个文件包含了对其他对象引用的连接。
对象的寻址问题
既然网页之间互相连接,每个基本的html文件也包含了对其他对象引用的连接,那对象之间是怎么互相准确无误的找到对方的呢?他们是通过URL(统一资源定位器)进行寻址的。
URL的语法格式
protocol:// hostname[:port] /part / [:parameters] [?query] #fragment
其中:
protocol:协议,访问服务器是使用的哪种协议(一般都是使用http协议)
hostname:主机地址,可以是域名也可是IP地址
port:端口,http协议默认的端口是80端口,如果不写就是默认80端口
path:路径,网络资源在服务器中的指定路径
parameter:参数,如果要向服务器传入参数,在这部分输入
query:查血字符串,如果需要从服务器那里查询内容,在这里编辑
fragment:片段,网页中可能会分为不停的片段,如果想访问网页后直接打到指定位置,可以在这个部分设置。
万维网(web)遵循什么协议?
超文本传输协议(HyperText Transfer Protocol)简称http协议
HTTP协议简述
他是遵循C/S(客户机/服务区)结构的。
他是无状态的协议,也就是不记录客户端发过去的之前的请求,例如一分钟前请求一个页面,现在再次请求他会重新给你发,不管之前的状态
在这说一下无状态的好处:有状态的维护会非常复杂,因为要记录之前的状态,还有更新问题,例如之前记录了一个网页,但是后来这个网页改变了,更新就会很不及时(虽然这个可以克服)还有就是客户机或者服务器突然失效,会产生状态不一致,解决这个问题会付出很大的代价。
HTTP连接
http有两种连接方式,非持久性连接换个持久性连接:
非持久性连接的意思是每个TCP连接最多允许传输一个对象,http1.0版本用的就是非持久性连接
持久性连接每个TCP连接可以传输多个对象,http1.1版本用的是持久性连接
例如我们现在要从服务器获取一个网页,这个网页包含了十图片(JPEG)
1.非持久性连接
1)HTTP客户初始化一个与服务器主机www.somehost.com中的HTTP服务器的TCP连接。HTTP服务器使用默认端口号80监听来自HTTP客户的连接建立请求。
2)HTTP客户经由与TCP连接相关联的本地套接字发出-个HTTP请求消息。这个消息中包含路径名/somepath/index.html。
3)HTTP服务器经由与TCP连接相关联的本地套接字接收这个请求消息,再从服务器主机的内存或硬盘中取出对象/somepath/index.html,经由同一个套接字发出包含该对象的响应消息。
4)HTTP服务器告知TCP关闭这个TCP连接(不过TCP要到客户收到刚才这个响应消息之后才会真正终止这个连接)。
5)HTTP客户经由同一个套接字接收这个响应消息。TCP连接随后终止。该消息标明所封装的对象是一个HTML文件。客户从中取出这个文件,加以分析后发现其中有10个JPEG对象的引用。
6)给每一个引用到的JPEG对象重复步骡1~4。
这个过程我们之前上网的时候应该都遇到过,比如打开一个网页,然后里面的图慢慢一个一个的出来,这就是在遇到图片这个对象的时候在重复1-4步骤,时间相应就很长。
2.持久性连接
在持久连接情况下,服务器在发出响应后让TCP连接继续打开着。同一对客户/服务器之间的后续请求和响应可以通过这个连接发送。整个Web页面(上例中为包含一个基本HTMLL文件和10个图像的页面)自不用说可以通过单个持久TCP连接发送:甚至存放在同一个服务器中的多个Web页面也可以通过单个持久TCP连接发送。通常,HTTP服务器在某个连接闲置一段特定时间后关闭它,而这段时间通常是可以配置的。持久连接分为不带流水线(without pipelining)和带流水线(with pipelining)两个版本。如果是不带流水线的版本,那么客户只在收到前一个请求的响应后才发出新的请求。这种情况下,Web页面所引用的每个对象(上例中的10个图像)都经历1个RTT的延迟,用于请求和接收该对象。与非持久连接2个RTT的延迟相比,不带流水线的持久连接已有所改善,不过带流水线的持久连接还能进一步降低响应延迟。不带流水线版本的另一个缺点是,服务器送出一个对象后开始等待下一个请求,而这个新请求却不能马上到达。这段时间服务器资源便闲置了。HTTP/1.1的默认模式使用带流水线的持久连接。
HTTP消息请求
http有两类消息:请求消息和相应消息,分别对应了向服务器请求和服务器做出回应
1.请求消息
是ASCII,人工可读。请求消息包括三个部分:1.请求方法URI协议/版本 2.请求头 3.请求正文
1)请求方法URI协议/版本
请求的第一行是“方法URI协议/版本”例如:GET/sample.jsp HTTP/1.1
以上代码中“GET”代表请求方法,“/sample.jsp”表示URI,“HTTP/1.1代表协议和协议的版本。
方法的类型:
1、OPTIONS
返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性
2、HEAD
向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。
3、GET
向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在Web Application中,其中一个原因是GET可能会被网络蜘蛛等随意访问。Loadrunner中对应get请求函数:web_link和web_url
4、POST
向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form
5、PUT
向指定资源位置上传其最新内容
6、DELETE
请求服务器删除Request-URL所标识的资源
7、TRACE
回显服务器收到的请求,主要用于测试或诊断
8、CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
注意:
1)方法名称是区分大小写的,当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Mothod Not Allowed);当服务器不认识或者不支持对应的请求方法时,应返回状态码501(Not Implemented)。
2)HTTP服务器至少应该实现GET和HEAD/POST方法,其他方法都是可选的,此外除上述方法,特定的HTTP服务器支持扩展自定义的方法。
(2)请求头(Request Header)
请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长度等。例如:
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.
(3)请求正文
请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。请求正文中可以包含客户提交的查询字符串信息:
username=jinqiao&password=1234
在以上的例子的HTTP请求中,请求的正文只有一行内容。当然,在实际应用中,HTTP请求正文可以包含更多的内容。
2.响应消息
http响应消息也是由三个部分组成的:1.响应行 2.响应头 3.响应体
1.响应行
响应行一般由协议版本、状态码及其描述组成 例如: HTTP/1.1 200 OK
常见的响应行代码:
1)1xx:服务器就收客户端消息,但没有接受完成,等待一段时间后,发送1xx多状态码
2) 2xx:成功。代表:200
3) 3xx:重定向。代表:302(重定向),304(访问缓存)
4)4xx:客户端错误。
* 代表:
* 404(请求路径没有对应的资源)
* 405:请求方式没有对应的doXxx方法
5) 5xx:服务器端错误。代表:500(服务器内部出现异常)
2.响应头
响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。
格式:
头名称:值
3.响应体
响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是HTML页面,那么返回的就是HTML代码,如果是JS就是JS代码,如此之类。