1.HTTP协议简介
在浏览器中单击链接的时候,浏览器会向服务器发送一段文本,告诉服务器请求的是哪一个网页。这段文本遵循HTTP协议格式,包含访问方式、所用的HTTP版本、所用的浏览器、当前页面地址等信息。服务器知道了网址,便将网页的内容输出给浏览器。输出的内容既可以是HTML文本,也可以是二进制数据如图片、声音、视频等。浏览器会将HTTP文本显示为网页,将二进制内容还原为图片、声音、视频,予以显示或者播放。
当我们打开浏览器,在地址栏中输入URL,然后我们就看到了网页。 原理是怎样的呢?
实际上我们输入URL后,我们的浏览器给Web服务器发送了一个Request, Web服务器接到Request后进行处理,生成相应的Response,然后发送给浏览器, 浏览器解析Response中的HTML,这样我们就看到了网页。
定义:
HTTP协议: 超文本传输协议(HTTP, HyperText Transfer Protocol)是互联网上应用最为广泛的种网络协议。用于定义WEB浏览器与WEB服务器之间交换数据的过程。
2、URL详解
URL(Uniform Resource Locator) 地址用于描述一个网络上的资源, 基本格式如下
schema://host[:port#]/path/.../[?query-string][#anchor]
scheme 指定低层使用的协议(例如:http, https, ftp)
host HTTP服务器的IP地址或者域名
port# HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如 http://www.cnblogs.com:8080/
path 访问资源的路径
query-string 发送给http服务器的数据
anchor- 锚
URL 的一个例子
http://www.mywebsite.com/sj/test/test.aspx?name=sviergn&x=true#stuff Schema: http host: www.mywebsite.com path: /sj/test/test.aspx Query String: name=sviergn&x=true Anchor: stuff
3、HTTP协议的特点
(1)基千请求/响应模型的协议。 请求和响应必须成对;先有请求后有响应。
(2)HTTP协议默认的端口:80,例如:www.jd.com:80(HTTP服务器的默认端口是80,这种情况下端口号可以省略)。
(3)http协议是无状态的,同一个客户端的这次请求和上次请求是没有对应关系,对http服务器来说,它并不知道这两个请求来自同一个客户端。 为了解决这个问题, Web程序引入了Cookie机制来维护状态.
(4)打开一个网页需要浏览器发送很多次Request
1>当你在浏览器输入URL http://www.cnblogs.com 的时候,浏览器发送一个Request去获取 http://www.cnblogs.com 的html. 服务器把Response发送回给浏览器.
2>浏览器分析Response中的 HTML,发现其中引用了很多其他文件,比如图片,CSS文件,JS文件。
3>浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件。
4>等所有的文件都下载成功后。 网页就被显示出来了。
4、HTTP 协议入门
1)准备工作
编辑一个form.html的表单页面,如下:
点击提交按钮:
先看Request 消息的结构, Request 消息分为3部分,第一部分叫请求行, 第二部分叫请求头, 第三部分是请求体。 请求头和请求体之间有个空行, 结构如下图
1>请求行
请求方式:POST、GET
请求的资源:/WEB12/form.html
协议版本:HTTP/1.1
HTTP/1.0,发送请求,创建一次连接,获得一个web资源,连接断开。
HTTP/1.1,发送请求,创建一次连接,获得多个web资源,保持连接。
2>请求头
请求头是客户端发送给服务器端的一些信息,使用键值对表示key:value
常见请求头 |
描述 (红色掌握,其他了解) |
Referer |
浏览器通知服务器,当前请求来自何处。如果是直接访问,则不会有这个头。常用于:防盗链 |
If-Modified-Since |
浏览器通知服务器,本地缓存的最后变更时间。与另一个响应头组合控制浏览器页面的缓存。 |
Cookie |
与会话有关技术,用于存放浏览器缓存的cookie信息。 |
User-Agent |
浏览器通知服务器,客户端浏览器与操作系统相关信息 |
Connection |
保持连接状态。Keep-Alive 连接中,close 已关闭 |
Host |
请求的服务器主机名 |
Content-Length |
请求体的长度 |
Content-Type |
如果是POST请求,会有这个头,默认值为application/x-www-form-urlencoded,表示请求体内容使用url编码 |
Accept: |
浏览器可支持的MIME类型。文件类型的一种描述方式。 MIME格式:大类型/小类型[;参数] 例如: text/html ,html文件 text/css,css文件 text/javascript,js文件 image/*,所有图片文件 |
Accept-Encoding |
浏览器通知服务器,浏览器支持的数据压缩格式。如:GZIP压缩 |
Accept-Language |
浏览器通知服务器,浏览器支持的语言。各国语言(国际化i18n) |
3>请求体
当请求方式是post的时,请求体会有请求的参数,格式如下:
username=zhangsan&password=123
如果请求方式为get,那么请求参数不会出现在请求体中,会拼接在url地址后面
http://localhost:8080...?username=zhangsan&password=123
再来看Response消息的结构:
1>响应行
Http协议
状态码:
常用的状态码如下:
200 :请求成功。
302 :请求重定向。
304 :请求资源没有改变,访问本地缓存。
404 :请求资源不存在。通常是用户路径编写错误,也可能是服务器资源已删除。
500 :服务器内部错误。通常程序抛异常。
状态信息:状态信息是根据状态码变化而变化的
2>响应头
响应也都是键值对形式,服务器端将信息以键值对的形式返回给客户端
常见请求头 |
描述 |
Location |
指定响应的路径,需要与状态码302配合使用,完成跳转。 |
Content-Type |
响应正文的类型(MIME类型) 取值:text/html;charset=UTF-8 |
Content-Disposition |
通过浏览器以下载方式解析正文 取值:attachment;filename=xx.zip |
Set-Cookie |
与会话相关技术。服务器向浏览器写入cookie |
Content-Encoding |
服务器使用的压缩格式 取值:gzip |
Content-length |
响应正文的长度 |
Refresh |
定时刷新,格式:秒数;url=路径。url可省略,默认值为当前页。 取值:3;url=www.itcast.cn //三秒刷新页面到www.itcast.cn |
Server |
指的是服务器名称,默认值:Apache-Coyote/1.1。可以通过conf/server.xml配置进行修改。<Connector port="8080" ... server="itcast"/> |
Last-Modified |
服务器通知浏览器,文件的最后修改时间。与If-Modified-Since一起使用。 |
3>响应体
响应体是服务器回写给客户端的页面正文,浏览器将正文加载到内存,然后解析渲染 显示页面内容