TCP协议与HTTP协议
TCP协议主要用于数据传输控制,而HTTP协议主用用于应用层面的数据交互
HTTP协议属于应用层协议,是建立在TCP协议基础之上的,HTTP协议以客户端请求和服务器端应答为标准,浏览器通常称为客户端,而Web服务器称之为服务器端.客户端打开任意一个端口向服务端的指定端口(默认为80)发起HTTP请求,首先会发起TCP三次握手,TCP三次握手的目的是建立可靠的数据连接通道,TCP三次握手通道建立完毕,进行HTTP数据交互
当客户端请求的数据接收完毕后,HTTP服务器端会断开TCP连接,整个HTTP连接过程非常短.HTTP连接也称为无状态的连接,无状态连接是指客户端每次向服务器发起HTTP请求时,每次请求都会建立一个新的HTTP连接,而不是在一个HTTP请求基础上进行所有数据的交互
资源定位标识符
- HTTP请求的内容资源由统一资源标示符(uniform resource identifiers,URI)来标识,关于资源定位及标识有三种:URI、URL、URN
- 统一资源标示符(uniform resource identifiers,URI),用来唯一标识一个资源
- 统一资源定位器(uniform resource locator,URL),是一种具体的URI,URL可以用来标识一个资源,而且可以访问或者获取该资源
- 统一资源命名(uniform resource name,URN),通过名字来标识或识别资源
- 三种资源标识,其中URL资源标识方式使用最为广泛,完整的URL标识格式为
protocol://host[:port]/path/.../[?query-string][#anchor]
- 参数详解
- protocol:基于某种协议,常见协议有HTTP、HTTPS、FTP、RSYNC等
- host:服务器的IP地址或域名
- port:服务器的端口号,如果是HTTP80端口,默认可以省略
- path:访问资源在服务器的路径
- query-string:传递给服务器的参数及字符串
- anchor:锚点
- 示例
http://www.baidu.com/newindex/plus/list.php?tid=2#baidu
- protocol:HTTP协议
- host:
www.baidu.com
- path:newindex/plus/list.php
- quert-string:tid=2
- anchor:baidu...............
HTTP与端口通信
- 端口是TCP/IP协议中应用层进程与传输层协议实体间的通信接口,端口是操作系统可分配的一种资源,应用程序通过系统调用与某个端口绑定后,传输层传给该端口的数据会被该进程接收,相应进程发给传输层的数据都通过该端口输出
- 在网络通信过程中,需要唯一识别通信两端设备的端点,就是使用端口识别运行于某主机中的应用程序.如果没有引入端口,则只能通过PID进程号进行识别,而PID进程号是系统动态分配的,不同的系统会使用不同的进程标识符,应用程序在运行之前没有明确的进程号,如果需要运行后再广播进程号则很难保证通信的顺利进行
- TCP/IP协议中引入了一种被称为套接字(socket)的应用程序接口.基于socket接口技术,一台计算机就可以与任何一台具有socket接口的计算机进行通信,而监听的端口在服务器端也称之为socket接口
HTTP request与response
- 客户端浏览器向Web服务器发起request,Web服务器接到request后进行处理,会生成相应的response信息返回给浏览器,客户端浏览器接收到服务器返回的response信息,会对信息进行解析处理,最终用户看到浏览器展示Web服务器的网页内容
- UNIX/Linux系统中执行curl -v命令可以打印Web服务器的request及response详细处理流程
- curl -v www.baidu.com
- request请求方法
- GET:向指定资源发出请求,获取服务器端数据.
- POST:向Web服务器提交数据进行处理请求,常指提交新数据
- PUT:向Web服务器提交上传最新内容,常指更新数据
- DELETE:请求服务器删除Request-URL所标识的资源。
- TRACE:回显服务器收到的请求,主要用于测试或诊断。
- CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。
- OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法
- HEAD:与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。
HTTP状态码
- 100~199:用于指定客户端相应的某些动作(请求已被服务器接收,继续处理)
- 200~299:用于表示请求成功
- 300~399:已移动的文件且被包含在定位头信息中指定新的地址信息
- 400~499:用于指出客户端的错误
- 500~599:用于指出服务器错误
HTTP状态码 | 状态码英文 | 状态码中文含义 |
---|---|---|
100 | continue | HTTP/1.1 新增状态码,表示继续,客户端继续请求HTTP服务器 |
101 | switching protocols | 服务器根据客户端的请求协议,切换到HTTP的新版本协议 |
200 | ok | HTTP请求完成,常用于GET、POST请求中 |
301 | moved permanently | 永久移动,请求的资源已被永久的移动到新URI |
302 | found | 临时移动,资源临时被移动,客户端应继续使用原有URI |
304 | not modified | 文件未修改,请求的资源未修改,服务器返回此状态码时,常用于缓存 |
400 | bad request | 客户端请求的语法错误,服务器无法解析或者访问 |
401 | unanthorized | 请求要求用户的身份认证 |
402 | payment required | 此状态码保留,为以后使用 |
403 | forbidden | 服务器理解请求客户端的请求,但是拒绝执行此请求 |
404 | not found | 服务器没有该资源,请求的文件找不到 |
405 | method not allowed | 客户端请求中的方法被禁止 |
406 | not acceptable | 服务器无法根据客户请求的内容特性完成请求 |
499 | client has closed connection | 服务器处理的时间过长 |
500 | internal server error | 服务器内部错误,无法完成请求 |
502 | bad gateway | 服务器返回错误代码或者代理服务器错误的网关 |
503 | service unavailable | 服务器无法响应客户端请求,或者后端服务器异常 |
504 | gateway time-out | 网关超时或者代理服务器超时 |
505 | HTTP version not supported | 服务器不支持请求的HTTP协议的版本,无法完成处理 |
HTTP MIME类型支持
- 浏览器接受到Web服务器的response信息,浏览器会进行解析,在解析页面之前,浏览器必须启动本地相应的应用程序来处理获取到的文件类型
- 在HTTP response消息中,MIME(multipurpose internet mail extensions,多用途互联网邮件扩展类型)类型被定义为Content-Type header中,例如Content-Type header:text/html,表示默认指定该文件为HTML类型,在浏览器会以HTML格式来处理