Web基础(1)-HTTP

来源:互联网 发布:编程入门课程 编辑:程序博客网 时间:2024/04/27 18:58

1、URL
URL(统一资源定位符)用于标识网络中资源的位置。URL分为绝对URL和相对URL,绝对URL包含资源位置的所有信息;相对URL不包含资源位置所有信息,需要依靠基础URL,常用于HTML代码中。URL中有些字符并不能被安全地传输,必须通过编码才能传输,将需要被编码的字符的ASCII码的十六进制数跟在百分号后即可,比如%20表示空格,%25表示%

语法(绝对URL)

<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

说明

构成 说明 默认值 scheme 获取资源时使用的协议 无 user 访问资源的用户 匿名 password 用户的密码 与浏览器有关 host 服务器的域名或IP地址 无 port 服务器正在监听的端口号,HTTP默认端口号为80 无 path 服务器上资源的位置,使用斜杠与前边URL分开 无 params 服务器根据参数提供相应资源,多个参数之间使用分号分割,使用分号与前边URL分开, 无 query 服务器根据查询字符串提供相应资源,查询字符串为键值对的形式,查询字符串之间使用&分开,使用问号与前边URL分开 无 frag 服务器提供frag指明的部分资源,使用#号与前边URL分开 无

eg

http://www.joes-hardware.com/source/index.htmlftp://anonymous:my_passwd@ftp.prep.ai.mit.edu/pub/gnuhttp://www.joes-hardware.com/hammers;sale=false/index.html;graphics=true 参数http://www.joes-hardware.com/inventory-check.cgi?item=12731&color=blue 查询字符串http://www.joes-hardware.com/tools.html#drills  片段

2、HTTP协议

2.1、HTTP概念
HTTP(超文本传输协议)是一种基于TCP的应用层的协议,被用作客户端和服务器之间通信,可以实现数据可靠地传输。客户端在请求资源之前,首先建立一条客户端和服务器的TCP连接,然后,向服务器发送HTTP请求报文,报文中含有资源的位置,服务器收到报文后,向客户端发送HTTP响应报文,报文中含有客户端需要的资源,一次完整的HTTP事务完成,连接关闭。

2.2、HTTP报文
HTTP报文包含请求报文和响应报文,请求报文用于客户端向服务器请求资源,响应报文用于服务器向客户端返回资源。请求报文和响应报文都由三部分组成,分别是:起始行、首部、主体。起始行用于描述报文的属性,首部用于描述主体的属性,主体即为报文携带的数据。

请求报文的格式

<method> <request-URL> <version><headers><entity-body>

响应报文的格式

<version> <status> <reason-phrase><headers><entity-body>

●字段含义

字段 描述 method 请求方法,客户端希望服务器对资源执行的动作 request-URL 请求的资源在服务器上的位置 version HTTP的版本 headers 可以有零个或多个首部,每个首部由首部名、冒号、空格、首部值组成,首部与主体间使用空行分开 entity-body 主体用来携带需要的数据 status 状态码,描述了请求过程中发生的情况 reason-phrase 用于解释状态码

eg
这里写图片描述

●请求方法

方法 描述 是否包含主体 是否幂等 GET 用于向服务器请求资源 否 是 HEAD 用于向服务器请求资源的信息,响应报文中不包含主体。常用于获取资源之前查询资源的情况,比如资源类型;通过查看响应状态码,判断资源是否存在;通过查看首部,判断资源是否被修改 否 是 PUT 向服务器写入文档或更新文档 是 是 POST 向服务器输入数据,URL中的参数放在主体中 是 否 DELETE 删除指定资源 否 是 OPTIONS 请求服务器告知支持哪些方法(比如GET、POST、PUT) 否 是 TRACE 客户端发送TRACE请求后,服务器发送的响应报文,报文的主体为服务器收到的请求报文。TRACE主要用于诊断,用来验证代理、网关、防火墙的效果 否 是

●请求首部

首部 描述 User-Agent 标识客户端程序 Accept 客户端能够接收的资源类型 Accept-Charset 客户端能处理的字符集 Accept-Encoding 客户端能处理的编码方案 Accept-Language 客户端能接受的语言 Host 客户端的主机和端口号 Date 当前日期 Upgrade 优先使用的协议 Cookie 客户端向服务器发送一个令牌 If-Modified-Since 只有在指定的日期后更新的资源才需要

eg
这里写图片描述
●响应首部

首部 描述 Date 当前日期 Upgrade 优先使用的协议 Server 服务器的信息 Set-Cookie 服务器请求客户保存Cookie Content-Encoding 编码方案 Content-Language 显示主体时最适合的语言 Content-Length 主体长度 Content-Type 主体类型,比如text/html(HTML文档)、text/plain(普通文档)、image/jpeg(Gif格式的图片) Location 资源的新URL Last-modified 资源上次改变的时间 Expires 资源的过期时间

eg
这里写图片描述

●响应状态码

整体范围 已定义范围 分类 100~199 100~101 信息提示 200~299 200~206 成功 300~399 300~305 重定向 400~499 400~415 客户端错误 500~599 500~505 服务器错误

详细说明

状态码 原因短语 含义 100 Continue 客户端在发送数据之前,询问服务器是否接收此数据,服务器如果接收,响应报文中的状态码为100,请客户端继续发送数据 101 Switching 服务器根据客户端的指定,切换协议 200 Ok 请求成功,响应报文中含有客户端需要的资源 201 Created 新的URL已经创建,比如响应客户端的PUT请求 202 Accepted 请求已被接受,但服务器还未执行相应操作 204 No Content 响应报文中不包含主体,比如刷新浏览器,但并没有需要更新的资源 300 Multiple Choice 请求的资源含有多个版本,响应报文中含有资源的多个URL 301 Moved Permanently 资源别永久移动,响应报文中含有新URL,以后再请求此资源应该使用新的URL 302 Found 资源临时移动,响应报文中含有新URL,以后再请求此资源应该使用原先的URL 304 Not Modified 客户端自上次获得资源到现在服务器中资源未被修改,响应报文中不含有主体 400 Bad Request 请求中含有语法错误 403 Forbidden 请求被服务器拒绝 404 Not Found 资源未找到 405 Method Not Allowed 服务器对客户端请求的资源不支持请求报文中的方法 500 Internal Server Error 服务器出错,比如崩溃 501 Not Implemented 客户端请求的动作超出服务器的能力,比如服务器不支持某些方法 502 Bad Gateway 网关或代理从其他服务器收到了错误的响应 503 Service Unavailable 服务器暂时无法提供服务 504 Gateway Timeout 网关或代理服务器在等待其他服务器的响应时超时了

3、HTTP连接

3.1、HTTP事务
HTTP从请求资源到获得资源的过程为一次事务
一次完整的事务过程如下
这里写图片描述

3.2、一次HTTP事务时延的原因
●客户端根据URL解析出IP地址需要一定时间。客户端首先查询自身的DNS缓存,如果找不到,接着查找系统DNS缓存,如果还找不到,接着查找路由器的DNS缓存,最后向域名服务器查找,最终得到域名对应的IP地址
●建立TCP连接的过程需要一定时间
●TCP确认报文会等待同向传输的报文,以便将确认信息放到报文中,等待超过一定时间后,才会单独发送一个报文用于确认
●TCP的Nagle算法会等数据积累到一定量才会发送,造成延迟
●TCP的慢启动机制,会使刚建立的连接数据传输速度比较慢
●HTTP请求与HTTP响应报文的传输需要一定时间

3.3、串行事务处理时延
假如一个Web页面包含三张图片,浏览器需要发起四次HTTP事务,如果每个事务都需要一个新连接,那么TCP产生的时延便会累加,可以通过并行连接、持久连接、管道化连接来提高连接的性能
整个过程如下
这里写图片描述

3.4、并行连接
客户端可以同时打开多条HTTP连接,并行处理HTTP事务
整个过程如下
这里写图片描述
并行连接有时并不能提高连接的性能,比如,当客户端带宽很低时,每个连接传输数据速度很慢,可能并不能提高连接性能。复杂的Web页面可能包含成百上千的内嵌对象,如果为每个对象都打开一个连接,服务器性能会严重下降。浏览器虽然使用了并行连接,但会限制连接个数

3.5、持久连接
在每个事务处理结束之后,仍然保持打开状态的TCP连接称为持久连接。非持久连接会在每个事务结束之后关闭连接。持久连接会消除连接建立的开销,避免了慢启动,并且降低了连接的数量,但可能产生大量的空闲连接,消耗本地资源以及服务器的资源。同时使用并行连接和持久连接是最好的方式。持久连接包含两种类型:HTTP/1.0+”keep-alive”、HTTP/1.1 “persitent”

HTTP/1.0+”keep-alive”连接
客户端如果希望将连接保持在打开状态,可以在请求报文中的首部加入Connection:Keep-alive字段,如果服务器同意保持连接,响应报文首部中会包含Connection:Keep-alive字段,否则发送完响应报文后就会关闭连接。响应报文首部中可以使用Keep-Alive指明服务器连接最多保持多长时间或最多处理多少个事务。

哑代理问题
比较老的代理服务器会将收到的报文原封不动的进行转发,并不会将报文中的Connection首部以及Connnection首部中列出的字段删除(Connection首部是逐跳首部,只适用于单条链路,不能沿着链路向下传输),结果造成客户端和服务器都收到了含有Keep-alive字段的报文,使客户端误以为建立了keep-alive连接,但实际上哑代理并不支持keep-alive连接,造成客户端的请求一直处于被挂起的状态,服务器一直保持连接等待数据传输,代理等待连接关闭,直到连接超时
含有哑代理的数据传输过程
这里写图片描述

keep-alive连接的限制
●客户端必须发送Connection:Keep-alive才可以激活keep-alive连接
●客户端发送的报文中没有Connection首部,服务器在响应后就会关闭连接
●代理服务器或网关在将报文转发之前,必须将Connection首部、以及Connection首部中指明的字段删除
●不能与不支持Connection首部的代理服务器或网关建立keep-alive连接,防止出现哑代理

HTTP/1.1 “persitent”连接
HTTP/1.1默认持久连接是开启的,客户端和服务器可以在报文首部加入Connection:Keep-alive字段,关闭连接。不管报文首部是否含有close字段,客户端和服务器可以在任意时刻关闭空闲连接。当客户端发送了含有close的报文后,客户端便不能在连接上继续发送请求。

3.6、管道化连接
HTTP/1.1允许在持久连接上使用请求管道,在请求的响应到达之前,可以发送其他请求
过程如下
这里写图片描述

4、用户识别
HTTP是一种无状态的协议,不会保存用户的信息,但服务器往往需要识别用户,根据用户身份从而提供个性化服务。服务器可以使用会话跟踪技术识别用户,常用的方法包括:URL重写、隐藏表单域、使用Cookie。

●URL重写
在URL的结尾处,附加用户标识,从而使服务器可以识别用户。使用URL重写技术识别用户时,访问的页面必须是动态生成的,不能使用原先记录的URL进行访问

●隐藏表单域
将用户标识写到HTML表单中,将表单发送给服务器。只有在服务器收到表单后,才能显示与用户相关的页面

●设置Cookie
服务器发送的响应报文中Set-Cookie首部含有为浏览器设置的Cookie,浏览器收到响应报文后,发送请求的报文中将含有服务器提供的Cookie,服务器根据收到的报文中的Cookie就可以识别出用户。Cookie分为会话Cookie和持久Cookie,会话Cokie是临时Cookie,用户退出浏览器,Cookie就会被删除。持久Cookie存储在硬盘,即使用户退出浏览器,Cookie依然存在。如果报文中含有Discard参数或没有Expires参数或Max-age参数,则Cookie是会话Cookie。

Cookie格式

Set-Cookie: name=value [; expires=date] [; path=path] [; domain=domain][; secure]Cookie: name1=value1 [; name2=value2] ...

常见的Set-Cookie属性

属性 描述 NAME=VALUE 强制的,名和值,比如session-id=452-1450808-2699745 Expires 可选的,Cookie的过期时间 Domain 浏览器只可以向Domain指定的域发送Cookie Path 可选的,与Domain一起使用为Path位置处的资源设置Cookie Secure 可选的,只有在使用HTTPS时才会发送Cookie Max-age 可选的,Cookie的生存时间,单位秒 Discard 可选的,会话Cookie

eg
Cookie
这里写图片描述

客户端与服务器使用Cookie交互的过程
这里写图片描述

●图a:浏览器请求 Amazon.com 根页面
●图b:服务器将客户端重定向到新URL
●图c:客户端对重定向的 URL 发起请求
●图d:服务器返回含有两个Set-Cookie的首部,并重定向新的URL
●图e:客户端对重定向的 URL 发起请求,请求报文中含有两个cookie
●图f:服务器返回含有两个Set-Cookie的首部,并重定向到home.html 页面
●图g:客户端对重定向的 URL 发起请求,请求报文中含有四个cookie
●图h:服务器传回页面内容,浏览器渲染页面

参考
HTTP权威指南
HTTP协议漫谈
会话跟踪
Servlet-会话跟踪

0 0
原创粉丝点击