1 资源定位标识符
HTTP请求的内容资源由统一资源标识符(uniform resource identifiers,URI)来标识
关于资源定位及标识有三种:
1)统一资源标识符(uniform resource identifiers,URI):用来唯一标识一个资源
2)统一资源定位器(uniform resource locator,URL):是一种具体的URI,URL可以用来标识一个资源,而且可以访问或者获取该资源
3)统一资源命名(uniform resource name,URN):通过名字来标识或者识别资源
如下图URI、URL、RUN的区别
URL肯定是一个URI,但是一个URI并不一定是一个URL;URI是资源标识符,所有他只要求具有"标识性",而URL是和URI的主要区别就是,URL除了具有URI的“标识性”以外,还具有定位功能,可以用来描述资源的具体位置,还指明了获取资源所采用的协议。
URN也是URL的一种表现形式,它和URL的区别就是与资源的位置无关,正式由于位置的无关性,被某个URN标识的资源在位置发生变化时,其URI可以保持不变。
- URL资源标识格式:
protocol://host[:port]/path/.../[?query-string][#anchor]
protocol:基于某种协议,常见协议有:HTTP、HTTPS、FTP、RSYNC等
host:服务器的IP地址或者域名
port:服务器的端口号
path:访问资源在服务器的路径
query-string:传递给服务器的参数及字符串
anchor:锚点结束
例:http://www.example.com/newindex/plus/list.php?tid=2#test
2 HTTP与端口通信
端口:是TCP/IP协议中应用层进程与传输层协议实体间的通信接口
TCP/IP协议中引入了一种被称为套接字(socket)的应用程序接口。基于socket接口技术,一台计算机就可以与任何一台具有socket接口的计算机进行通信,而监听的端口在服务器端也称之为socket接口
3 HTTP request与response
3.1 Request请求过程
客户端发起request,request分3部分,分别包括request line(请求行)、request header(请求头部)、body(请求数据),如下图:
使用curl –v 打印requests与response处理流程
1) 请求行(request line)
GET /index.html HTTP/1.1
指定请求类型(GET)、访问的资源(/index.html)及使用的HTTP协议版本(HTTP/1.1)
2) 请求头部(request header)
User-Agent: curl/7.29.0
Host: 192.168.10.10
Accept: */*
指定服务器要使用的附加信息,User-Agent表示用户使用的代理软件,常指浏览器
3) 空行
请求头部后面的空行表示请求头发送完毕
4) 请求数据(body)
可以添加任意数据,GET请求的body内容默认为空,一般POST请求会有内容(例如name=test)
3.2 Response响应过程
Response响应信息:响应状态行、响应头部、空行、响应正文(body)
1) 响应状态行
HTTP/1.1 200 OK
包括HTTP协议版本号(HTTP/1.1)、状态码(200)和状态消息(OK)
2) 响应头部
响应头部附加信息
3) 空行
表示消息头部响应完毕
4) 响应正文(body)
服务器返回给客户端的信息
3.3 Request请求方法
1) Get方法:向特定的资源发出请求,获取服务器端数据
2) POST方法:向Web服务器提交数据进行处理请求,常指提交新数据
3) PUT方法:向Web服务器提交上传最新内容,常指更新数据
4) DELETE方法:请求删除request-URL所标识的服务器资源
5) TRACE方法:回显服务器收到的请求,主要用于测试或诊断
6) CONNECT方法:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
7) OPTIONS方法:返回服务器针对特定资源所支持的HTTP请求方法
8) HEAD方法:HEAD方法跟GET方法相同,只不过服务器响应时不会返回消息体
4 HTTP1.0/1.1协议区别
HTTP/1.0中默认使用短连接(建立连接——数据传输——关闭连接...建立连接——数据传输——关闭连接)
HTTP/1.1中默认使用长连接(建立连接——数据传输...(保持连接)...数据传输——关闭连接)
HTTP的长连接和短连接本质上是TCP长连接和短连接
4.1 短连接
- 客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源,每遇到一个Web资源,浏览器就会重新建立一个HTTP会话。
- 短连接对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制手段。但如果客户请求频繁,将在TCP的建立和关闭操作上浪费较多时间和带宽
4.2 长连接
- 长连接在响应头加入这行代码:Connection:keep-alive
- 当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。
- 长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间。对于频繁请求资源的客户端适合使用长连接。但当client与server之间的连接一直不关闭,随着客户端连接越来越多,server会保持过多连接,导致server端服务受损
5 HTTP状态码
HTTP状态码用来表示Web服务器HTTP response状态的3位数字代码,常见的状态码范围分类如下:
- 100~199:用于指定客户端相应的某些动作
- 200~299:用于表示请求成功
- 300~399:已移动的文件且被包含在定位头信息中指定新的地址信息
- 400~499:用于指出客户端的错误
- 500~599:用于指出服务器的错误
6 HTTP MIME类型支持
浏览器接收到Web服务器的response信息,浏览器会进行解析,在解析页面之前,浏览器必须启动本地相应的应用程序来处理获取到的文件类型。
基于多用途互联网邮件扩展类型(multipurpose internet mail extensions,MIME),可以明确某种文件在客户端用某种应用程序来打开,当改扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。
在HTTP response消息中,MIME类型被定义在Content-Type header中。例如Content-Type:text/html,表示默认指定该文件为HTML类型;exe 文件的Content-Type:application/octet-stream等。