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>
说明
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>
●字段含义
eg
●请求方法
●请求首部
eg
●响应首部
eg
●响应状态码
详细说明
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属性
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-会话跟踪
- Web基础(1)-HTTP
- HTTP协议-Web基础-1
- HTTP - WEB 基础 (3)
- 第 1 章:Web基础技术(HTTP请求消息)
- 第 1 章:Web基础技术 (HTTP响应消息 )
- 《图解HTTP》读书笔记(1)之第一章了解Web及网络基础(关键词:计算机网络/HTTP/Web/网络基础)
- http详解(一)-------web的基础
- HTTP协议(web基础)
- HTTP:Web基础
- 《图解HTTP》读书笔记(1)第1章了解Web及网络基础(关键词:HTTP/)
- HTTP学习计划(web的基础)--HTTP概述(1/2)
- Web基础--HTTP标头
- 第 1 章:Web基础技术(HTTP请求与响应)
- HTTP普及帖1:理解Web和网络基础
- HTTP普及帖1:理解Web和网络基础
- 渗透测试 | WEB渗透 | 1-HTTP协议基础
- WEB服务器、应用程序服务器、HTTP服务器区别(基础普及)
- HTTP协议笔记(一):Web网络基础
- vector
- Android NDK 开发(三)JNI 调用Java属性和方法
- 高级语言中各种数据结构在内存中是如何存储的?
- 第七周项目5-排队看病模拟
- 能让你少写1000行代码的20个正则表达式
- Web基础(1)-HTTP
- PAT乙级1010
- 系统会随机给你一个数组(存放都是数字),你需要将里面值累加,最后四舍五入,保留20位小数
- KMP算法的next数组计算原理
- The Differences Between BSD and System V Unix
- ubuntu下安装arm-linux-gcc
- C语言学习——第一篇博客(四)
- IC测试装置
- js的原型总结