1.域名解析
服务器是以ip的形式存在的,发送http请求时需要把域名解析为ip地址。一般系统会先查询DNS缓存和hosts文件的信息,看是否存在对应的ip解析记录,没有会发送给DNS服务器,直到得到ip地址;
2.建立TCP连接
http协议是基于TCP协议来实现的,首先就是要通过TCP三次握手与服务器建立连接,一般HTTP默认的端口号为80;
3.浏览器发送请求命令
一旦建立TCP连接,客户端会向服务器发送请求命令,例如 GET/SAMPLE/hello.jsp HTTP/1.1 请求方法+请求URI+HTTP协议版本;
4.客户端发送请求头信息
在发送请求命令后,还会发送一些其他信息,最后以一行空白内容告知服务器已经完成头信息的发送;
5.服务器应答
收到浏览器请求后,服务器会对其进行回应,应答的第一部分是协议的版本号和应答码;
6.服务器回应头信息
服务器会将自身信息发送到浏览器;
7.服务器发送数据
完成所有应答后,会以content-type应答头所描述的格式发送给用户所需求的数据信息;
8.断开TCP连接
四次挥手断开TCP连接,也可以在请求头加上CONNECTION:KEEP-LIVE,来将tcp保持打开状态,便于下次连接。
常见的状态码:
-
200("OK")一切正常。实体主体中的文档(若存在的话)是某资源的表示。
-
400("Bad Request")客户端方面的问题。实体主题中的文档(若存在的话)是一个错误消息。希望客户端能够理解此错误消息,并改正问题。
-
500("Internal Server Error")服务期方面的问题。实体主体中的文档(如果存在的话)是一个错误消息。该错误消息通常无济于事,因为客户端无法修复服务器方面的问题。
-
301("Moved Permanently")当客户端触发的动作引起了资源URI的变化时发送此响应代码。另外,当客户端向一个资源的旧URI发送请求时,也发送此响应代码。
-
404("Not Found") 和410("Gone")当客户端所请求的URI不对应于任何资源时,发送此响应代码。404用于服务器端不知道客户端要请求哪个资源的情况;410用于服务器端知道客户端所请求的资源曾经存在,但现在已经不存在了的情况。
-
409("Conflict")当客户端试图执行一个”会导致一个或多个资源处于不一致状态“的操作时,发送此响应代码。
1XX:通知
2XX: 成功
3XX 重定向
4XX:客户端错误
5XX 服务端错误