HTTP协议理解
超文本传输协议HTTP规定了浏览器与服务器之间的请求和响应的格式与规则,它是万维网上能够可靠地交换文件的重要基础。
HTTP的操作过程
浏览器分析指向页面的URL
浏览器向DNS系统请求解析域名所对应的服务器IP地址
DNS系统解析出服务器的IP,并返回给主机
浏览器与该服务器的进程建立TCP链接(三次握手,端口默认为80)
浏览器发出HTTP请求:如GET /article/index.html
服务器收到请求并作出相应处理,把文件index.html发送给浏览器
释放TCP链接(四次握手)
浏览器解析index.html文件,将web页显示出来。
HTTP协议的特点
HTTP协议是无状态的,即多次访问一个服务器上的页面,服务器并不知道你曾经访问过,每次访问的响应都当做第一次访问一样。所以,在实际应用中,通常使用CooKie加数据库的方式记录和跟踪用户的活动。
HTTP有非持久连接和持久连接:
采用非持久连接时,网页的每个元素对象(如.png,jpeg图等)的传输都需单独建立一个TCP连接(第三次握手可携带请求信息)
采用持久连接时,仅需建立一次TCP连接,服务器发送响应后仍保持连接,客户和服务器可以继续在这条连接上发送请求和响应报文。
Cookie以及其作用
CooKie是由服务器生成,但存储在用户主机上的文本文件,它保存了服务器和客户之间传递的状态信息,作为识别用户的手段。通过Cookie服务器就能从数据库中查询该用户的活动记录,进而可以执行一些个性化操作
HTTP请求报文中常见的几个方法
方法 意义
GET 请求读取由URL所标志的信息
HEAD 请求读取由URL所标志的信息的首部
POST 给服务器添加信息
CONNECT 用于代理服务器
get和post方法的区别:
一般我们在浏览器输入一个网址访问网站都是GET请求;在FORM表单中,可以通过设置Method指定提交方式为GET或POST,默认时为GET提交方式。
get请求一般不会修改服务器的信息,仅用于请求页面;post请求可能会修改服务器中的资源信息,如提交评论、博客等都是通过post请求实现。
get请求的信息附加在URL后面,这些被显示的暴露在外面。post请求的数据放在包体中,不容易暴露,因此一般用户登录等保密性高的不宜采用get请求,而用post请求。
如这个test.html文件做请求时
<!DOCTYPE html>
<html>
<head>
<title>test</title>
<meta charset="utf-8">
</head>
<body>
<form method = 'get' target="_self">
<input type="text" name="keyword1" >
<input type="text" name="keyword2" >
<input type="hidden" name="hid" value="2">
<input type="submit" name="search" value="搜 索">
</form>
</body>
</html>
当点击确定时,请求的URL是这样的:
file:///E:/test.html?keyword1=111&keyword2=222&hid=2&search=%E6%90%9C+%E7%B4%A2
其中参数search后面是”搜 索”的转码,因为URL的编码格式采用的是ASCII编码。
当form的method值改为post时,提交表单时,表单所要传递的值不会显示在URL上。