HTTP协议
HTTP可以在任何互联网协议上,或者其他网络上实现。HTTP假定其下层协议提供可靠的传输,因此任何能提供这种保证协议都可以被其使用。因此,也就是其在TCP/IP协议簇中使用TCP作为传输层。
通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器就会向客户端返回一个状态,比如”HTTP/1.1 200 OK”,以及返回的内容,如请求的文件,错误的消息或者其它信息。
HTTP工作原理
HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本,成功或者错误代码、服务器信息、响应头部和响应数据。
以下是HTTP请求/响应的步骤:
1、客户端连接到Web服务器
一个HTTP客户端,通常是浏览器与Web服务器的HTTP端口建立一个TCP套接字连接。
2、发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。
3、服务器接收请求并返回HTTP响应
Web服务器解析请求、定位请求资源。服务器将资源复写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
4、释放TCP连接
若connection模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接,若connection模式为keepalive,则该连接会保持一段时间,在该时间可以继续接受请求。
5、客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下若干字节的HTML文档和文档字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
在浏览器的地址栏上输入一个地址会发生什么?
在游览器上的地址栏上输入一个地址,发生了这些事情(不完整)
1、浏览器向DNS服务器请求解析该URL中的域名所对应的ip地址。
2、解析出IP地址后,根据该IP地址和默认端口80,和服务器建立TCP连接。
3、浏览器发出读取文件(URL域名后面部分对应的文件)的http请求,该请求报文作为TCP三次握手的第三个报文的数据发送给服务器。
4、服务器对浏览器做出响应,并把对应的html文本发送给浏览器。
5、释放TCP连接。
6、浏览器将该html文本解析并显示内容。
HTTP协议是基于TCP/IP协议之上的应用层协议
1、基于请求/响应的模式
客户端——>服务端——>客户端
2、无状态保存
HTTP是一种不保存状态,及无状态协议。HTTP协议自身不对请求和响应之间的通信状态进行保存。也就是说在HTTP这个级别,协议对于发送过的请求或响应都不做持久化处理(引入Cookie技术来保存)
3、无连接
每次连接只处理一个请求,服务端处理完客户端的请求,并收到客户应答后,断开连接,现在的HTTP/1.1是等待几秒后断开(如果客户端还有请求,就继续用这个连接,创建连接也是需要资源时间的)。
HTTP请求方法(定义了8种)
1、GET:向指定的资源发出“显示”请求。使用GET方法应该只能用在读取数据,而不应当用于产生“副作用”的操作中,GET可能会被恶意访问。
2、HEAD:与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器不传回资源的文本部分。它的好处在于不必传输全部内容的情况下获取该资源的信息。
3、POST:向指定资源提交数据,请求服务器进行处理(提交表单什么的)。数据是包含在请求体(body)当中。
4、PUT:向指定资源位置上传最新内容。
5、DELETE:请求服务器删除Request-URI的所有标识的资源。
6、TRACE:显示服务器收到的请求。
7、OPTIONS:可以让服务器传回该资源所支持的所有HTTP请求方法。可以测试服务器功能是否正常运作。
8、CONNECT:HTTP/1.1协议中预留位置给能够将连接改为管道方式的代理服务器。
其中最常用的是GET和POST请求方法。
1、GET提交的数据放在URL(协议、地址、端口、路径?查询、信息化片段)中的查询部分,以?来分割(http://localhost:8080/happyfa…),参数之间以&相连。POST方法是把提交的数据放在HTTP的body当中。
2、GET提交的数据大小有限制(不是GET本身的限制),POST方法没有限制。
3、GET与POST请求在服务端获取请求数据的方式不同。
状态码
1、200 OK 表示访问成功
2、404 NOT Found 表示没有找到资源
3、403 Forbidden 表示访问被拒绝
4、405 Method Not Allowed 表示访问的服务器不能支持请求中心的方法
5、500 Internal Server Error 表示服务器内部出现问题
6、504 Gateway Timeout 表示当前服务器负载比较大,服务器处理单条请求的时耗很长,出现超时
7、302 Move temporarily 表示临时重定向
8、301 Moved Permanently 表示永久重定向,当浏览器收到这种响应后,后续的请求都会被自动的改成新地址。
接下来我们手写一个http服务器并且实现一个需求。