TCP/IP笔记 四.应用层(3)——HTTP
1. URL
URL(Uniform Resource Locator) 相当于一个文件名在网络范围的扩展。
1.1 格式schema://host[:port#]/path/.../[?query-string][#anchor]
scheme 指定低层使用的协议(例如:http, https, ftp)
host HTTP服务器的IP地址或者域名(存放资源的地方)
port# HTTP服务器的默认端口是80,这种情况下端口号可以省略。
path 访问资源的路径
query-string 发送给http服务器的数据
anchor- 锚
HTTP (HyperText Transfer Protocol),超文本传送协议 。HTTP 是一个应用层协议,它使用 TCP 连接进行可靠的传送。
(1) 浏览器分析超链指向页面的 URL。
(2) 浏览器向 DNS 请求解析 www.tsinghua.edu.cn 的 IP 地址。
(3) 域名系统 DNS 解析出清华大学服务器的 IP 地址。
(4) 浏览器与服务器建立 TCP 连接
(5) 浏览器发出取文件命令:
GET /chn/yxsz/index.htm。
(6) 服务器 给出响应,把文件 index.htm 发给浏览器。
(7) TCP 连接释放。
(8) 浏览器显示“清华大学院系设置”文件 index.htm 中的所有文本。
注:打开一个网页一般需要多次Request:
(1)首先浏览器获取到index.html页面,然后浏览器就会对index.html进行解析
(2)解析后发现其中还有很多信息,比如图片、css、js等其他引用信息,然后浏览器就会自动对这些信息发出Request请求
(3)当所有的数据都获取完毕后,浏览器就会把网页显示出来。(一般来说,当页面的大体框架获取完成后就会把页面显示出来)
(1)面向事务的客户服务器协议。
(2)HTTP 1.0 协议是无状态的(stateless)。
同一个客户端的这次请求和上次请求是没有对应关系,对http服务器来说,它并不知道这两个请求来自同一个客户端。 为了解决这个问题, Web程序引入了Cookie机制来维护状态.
(3)HTTP 协议本身也是无连接的,虽然它使用了面向连接的 TCP 向上提供的服务。
(4)万维网浏览器就是一个 HTTP 客户,而在万维网服务器等待 HTTP 请求的进程常称为 HTTP daemon,有的文献将它缩写为 HTTPD。
(5)HTTP daemon 在收到 HTTP 客户的请求后,把所需的文件返回给 HTTP 客户。
HTTP有2种消息:
Request(请求报文)——从客户向服务器发送请求报文。
Response(响应报文)——从服务器到客户的回答。
2.3.1 Request
先看Request 消息的结构, Request 消息分为3部分,第一部分叫Request line, 第二部分叫Request header, 第三部分是body. header和body之间有个空行, 结构如下图
第一行中的方法(Method)表示请求方法,比如"POST","GET", URL表示请求的资源, Http/version-number 表示HTTP协议的版本号
当使用的是"GET" 方法的时候, body是为空的。
方法:
Http协议定义了很多与服务器交互的方法,最基本的有4种,分别是GET,POST,PUT,DELETE. 一个URL地址用于描述一个网络上的资源,而HTTP中的GET, POST, PUT, DELETE就对应着对这个资源的查,改,增,删4个操作。 我们最常见的就是GET和POST了。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息.
GET和POST的区别:
(1)GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中.
(2)GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.
(3)GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。
(4)GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.
2.3.2 Response
状态码:
1xx 表示通知信息的,如请求收到了或正在进行处理。
2xx 表示成功,如接受或知道了。
3xx 表示重定向,表示要完成请求还必须采取进一步的行动。
4xx 表示客户的差错,如请求中有错误的语法或不能完成。
5xx 表示服务器的差错,如服务器失效无法完成请求。
状态码更加详细的信息请参见:
http://blog.csdn.net/matrix_laboratory/article/details/8649559
关于HTTP的更加详细信息请参见:
HTTP详解