后期会简单做一个视频进行讲解.
3.名词解释:
HTTP无状态:无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。从另一方面讲,打开 一个服务器上的网页和你之前打开这个服务器上的网页之间没有任何联系
如果你要实现一个购物车,需要借助于Cookie或Session或服务器端API(如NSAPI and ISAPI)记录这些信息,请求服务器结算页面时同时将这些信息提交到服务器
当你登录到一个网站时,你的登录状态也是由Cookie或Session来“记忆”的,因为服务器并不知道你是否登录
优点:服务器不用为每个客户端连接分配内存来记忆大量状态,也不用在客户端失去连接时去清理内存,以更高效 地去处理WEB业务
缺点:客户端的每次请求都需要携带相应参数,服务器需要处理这些参数
容易犯的误区:
1、HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP 连接,更不能代表HTTP使用的是UDP协议(无连接)
2、从HTTP/1.1起,默认都开启了Keep-Alive,保持连接特性,简单地说,当一个网页打开完成后,客户端和服务器之间用于传输HTTP 数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接
3、Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间
-------------------------------------
4.实践:
先查看鼠标点击一个链接后,浏览器发出了怎样的HTTP请求。
Chrome浏览器下,按F12进入开发者模式,点击Network后,在页面中随意点击链接测试,出现下图。
上面的news.baidu.com 就是点击新闻后发出的一条信息相关内容,在图中我们大致可以看到 有请求主机,IP地址,请求方式,以及返回的状态码(200)
HTTP请求介绍
http请求由三部分组成,请求行,请求头,请求主体。
下面给出一个实例:
1 POST /login.php HTTP/1.1 // 请求行 包含请求方法,请求地址,协议版本
2 HOST: www.XXX.com // 请求头
3 // 空一行,表示请求头结束
4 username=admin & password=admin // 请求正文 Cookie相关信息
请求方法中GET把请求信息直接标注在URL上,POST多用于提交数据,提交信息在后面的是请求正文中。
常见的请求头如下:
referer: 包含一个URL,用户从该URL代表的页面出发访问当前请求的页面
user-agent: 客户端将它的操作系统,浏览器,和其他属性告诉服务器
Host: 请求主机名和端口号,默认80
Connection: 当前连接是否保持
Accept-Language: 指定接受的自然语言
Cookie: 表示请求者身份
x-forword-for: 代表请求段IP,可以有多个,中间以逗号隔开
HTTP响应介绍
HTTP相应内容如下:
状态码:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受 (200成功)
3xx:重定向--要完成请求必须进行更进一步的操作 (302跳转)
4xx:客户端错误--请求有语法错误或请求无法实现 (404请求资源不存在)
5xx:服务器端错误--服务器未能实现合法的请求 (500 服务器内部错误)
常见HTTP响应头:
Server: WEB服务器名称 如:Server: Apache/1.3.6(Unix)
Content-Type: 正文媒体类型
Content-Length: 正文长度(字节)
Keep-Alive: 保持连接时间
Date: 格林时间
Location: 表示客户端应该到哪里去提取文档,当客户端收到后会再次发送请求
Set-Cookie: 向客户端设置Cookie信息
0x 02 手工模拟HTTP发送
没开启Telnet服务的同学手动百度一下 如何开启Telnet服务,这里不多说了
进入CMD界面开启telnet:
telnet www.baidu.com 80
显示空白黑屏界面,在键盘上同时按“Ctrl”键和“]”键,显示如下界面
欢迎使用 Microsoft Telnet Client
Escape 字符为 'CTRL+]'
Microsoft Telnet>
按“Enter”键 显示空白界面,输入HTTP请求(注意HOST: 后面有个空格)
GET /index.html HTTP/1.1
HOST: www.baidu.com
之后连续按两次“Enter”键,完成HTTP请求发送,显示如下信息
至此,已经成功完成HTTP发送模拟。
5. nc连接实例: