HTTP协议详解
一、TCP协议与HTTP协议
TCP协议主要用于数据传输控制,HTTP协议主要用于应用层的数据交互,两者有本质的区别;
HTTP协议工作在应用层,是第七层。TCP协议在第四层传输层,所以HTTP协议是建立在TCP协议的基础上。HTTP协议主要以客户端发送请求、服务端响应应答为标准。浏览器一般称为客户端,Web服务器一般称为服务端,比较常用的Web服务器比如:Nginx ,Apache。
一般的流程就是:1,客户端打开任意一个端口向服务端的指定端口(默认80端口)发送HTTP请求,首先会建立TCP三次握手,TCP三次握手的目的就是保证数据传输的可靠性、稳定性,TCP三次握手通道建立成功后,会进行数据交互。
2,当客户端请求的数据全部接受完毕后,HTTP服务器会断开TCP连接,整个HTTP连接过程非常短,也被称之为无状态的连接,无状态连接是指客户端每次向服务器发起HTTP请求时,每次请求都会建立一个新的HTTP连接,而不是在一个HTTP连接上进行数据交互。
二、资源定位标识符
HTTP请求的内容资源由统一资源标识符来标识 (uniform resource identifiers URI) 关于资源定位及标识有三种
URI: 统一资源标识符 (uniform resource identifier,URI)
URL:统一资源定位符 (uniform resource locator,URL)
URN:统一资源命名 (uniform resource name, URN)
我们常用的就是URL,对URL,我们详细说明一下,比如:
https://i.cnblogs.com/EditPosts.aspx?opt=1
其实就是:
protocol://host[ :port]/path/.../[?query-string][#anchor]
所以:
protocol:HTTP协议
host:主机或IP
path:路径
query-string: 传递给服务器的参数及字符串, 像opt=1就是
anchor:锚定结束,(上条地址中是没有的)
三,HTTP与端口通信
HTTP Web服务器默认在本机会监听80端口,当然如果是HTTPS默认就会是443端口。在linux中,每个软件程序执行后,会以进程的方式启动,,程序就会启动并监听本地接口的端口。
端口是TCP/IP协议中应用层进程与传输层实体间的通信接口。端口是操作系统可分配的一种资源。应用程序通过系统调用与某个端口绑定后,传输层给该端口的数据会被该进程接收,相对应的进程发给传输层的数据都通过该端口绑定。
TCP/IP协议中引入了一种被称为套接字(socket)的应用程序接口,基于socket接口技术,一台计算机就可以与任何一台具有socket接口的结算及进行通信,而监听的端口在服务端也被称之为socket接口
四,HTTP request和response详解
客户端浏览器向Web服务器发起request,Web服务器接到request后进行处理,会生成相应的response信息返回给浏览器,浏览器收到服务端的response信息后会进行解析处理,最终用户看见的网页内容就是浏览器解析出的response信息。
可以使用curl -v命令打印request和response信息 比如:
1,request
第一部分 :请求行,请求类型,访问的资源以及使用的HTTP协议版本,GET表示request请求的类型, html表示访问资源,HTTP/1.1表示HTTP协议版本
第二部分:请求头部,指定服务器要使用的附加信息,User-Agent表示用户使用的代理软件,常指浏览器,Host表示服务器地址,也就是请求的主机
第三部分:请求行,请求头部后面的空行表示请求发送完毕
第四部分:请求数据,也叫body ,GET方式的请求的body默认为空
2,response
第一部分:响应行,包括HTTP版本号、状态码、状态消息。HTTP/1.1表示版本协议号,200表示返回状态吗,OK表示消息
第二部分:消息报头,响应头部附加信息,Date表示生成响应的日期和时间,Content-Type表示指定MIME类型的HTML(text/html),编码类型....等等
第三部分:空行,表示消息报头响应完毕
第四部分:响应正文,服务器返回给客户端的文本信息。
3,request类型
GET:向特定的资源发出请求,获取服务端数据
POST:向Web服务器提交数据进行处理请求,常指提交新数据
PUT:向Web服务器提交上传最新内容,常指更新数据。
DELETE:请求删除request-URL所标识的服务器资源。
TRACE:回显服务器收到的请求,主要用于测试或诊断
CONNECT:HTTP/1.1协议中预留给能够连接改为管道方式的代理服务器
OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法
HEAD:和GET方式相同,只不过服务器响应时不会返回消息体
五,HTTP 1.0/1.1协议区别
在HTTP/1.1中
1,在一个TCP连接上可以传送多个HTTP请求和响应
2,多个请求和响应过程可以重叠
3,增加了更多的请求头和响应头,比如,Host,If-Unmodified-Since请求头等