HTTP请求的步骤
1.从url中读取主机名
2.利用DNS(domain name service)对主机名进行转换,得到IP地址
3.如果有端口号的话,读取端口号
4.根据IP地址和端口号,建立与服务端的TCP(transmission control protocol)/IP连接
5.往服务端发送请求报文
6.客户端得到响应报文
7.断开连接
HTTP的连接方式:
1.串行连接
2.并行连接
3.持久连接:在完成TCP传输后,TCP连接并不会立刻关掉,一般会等到客户端关闭或者服务器主动关掉
客户端如何使用持久连接:
1.HTTP/1.0+ Connecttion: Keep-Alive,如果响应中没有Connecttion: Keep-Alive,就认为服务器不支持keep-alive,会在得到响应报文后就关闭连接
2.HTTP/1.1 persistent
keep-alive有几个参数,timeout指的是服务器将连接保持在活跃状态的时间,max表示服务器还希望为多少个事务保持此连接的活跃状态
如上图,表示服务器最多会为其他另外5个事务保持连接的打开状态,打开状态保持到连接空闲了2分钟之后。代理与网关:在客户端与服务器进行交互的时候,有可能需要通过代理作为中介来完成交互过程。
HTTP状态码
响应报文中HTTP状态码表示了客户端HTTP请求的返回结果,得到响应的结果码,有助于了解我们请求时是否成功,如果错误了,是哪种类型的错误。状态码有5种类型,分别表示了对应的返回响应原因。
1、2XX,表示响应结果为请求被正常处理
200 OK
表示客户端发来的请求在服务端被正常处理。
204 NO Content
表示处理成功,但是响应中没有任何实体。
206 Partial Content
表示服务器成功执行了这部分的请求。
2、3XX,表示浏览器需要执行某些特殊的处理以正确处理请求。
301 Moved Permanently
永久性重定向,表示该资源已经分配了新的URI,原来URI不再使用。
302 Found
临时性重定向,跟301类似,也是请求的资源分配了新的URI,但只是临时的,以后可能会换回来。
304 Not Modified
表示服务器允许请求访问资源,但是没有满足条件。比如你客户端需要请求一个信息,但是要求该信息是今天编辑的,但是资源里确实有该信息,只是这个信息是昨天编辑的,不符合条件,则服务器返回该状态码。
3、4XX,表示客户端是发生错误的原因所在
400 Bad Request
表示请求报文中存在语法错误。
401 Unauthorized
没有认证,表示发送的请求组要进行HTTP认证。
403 Forbidden
表示不允许访问这个资源。
404 Not Found
表示服务器无法找到请求的资源。
4、5XX 表示服务器本身发生错误。
500 Internal Server Error
表示服务器在执行时发生错误。
503 Service unavailable
表示服务器暂时处于超负荷或者正在停机维护,无法处理请求。报文格式
报文格式
其中空行用于区分报文首部和报文主体内容,是由一个回车符和一个换行符组成。
无论是请求报文还是响应报文都需要有报文首部,当然报文主体有的请求报文是没有的。
一般来说,请求报文的格式如下:
其中请求首部还包括其他的内容,不一一列举了。
响应报文格式如下:
最常使用的属性是:
1 URL, 即http访问的地址
2 request method, 报文的请求方式
3 status code, 状态码以及状态短语
4 Accept Encoding, 内容编码
5 Connection, 连接方式
6 Cookie, 添加的cookie内容
7 Host, 目标主机
8 User-Agent, 客户端浏览器的相关信息
9 Set-Cookie, 指定想要在Cookie中保存的内容
部分借鉴于:http://www.cnblogs.com/xing901022/p/4309840.html