简述HTTP请求过程

2016/8/24 posted in  Java  

HTTP请求是web程序服务的基础,要想写好web程序,必然要对http请求的过程进行掌握。

HTTP请求步骤

  1. 如果是以域名形式进行web访问,则浏览器会先通过DNS服务将域名转化为对应的IP地址,为下一步访问做准备。
  2. 通过IP地址与服务器建立TCP连接
  3. 客户端向服务器端发送Request请求
  4. 服务器端向客户端发送Response响应
  5. 服务器端关闭TCP连接。一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码:Connection:keep-alive。TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

HTTP请求头,响应头字段

请求头

  • Accept: text/html, image/* :客户机支持的数据类型
  • Accept-Charset: UTF-8 :客户机采用的编码
  • Accept-Encoding: gzip,compress:客户机支持的数据压缩格式
  • Accept-Language: en-us,zh-cn:客户机的语言环境
  • Host: localhost:8080 :访问的主机名
  • If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT : 资源的缓存时间,用以判断服务器上的资源是否发生变化
  • Referer: http://www.zhanjingbo.site : 从哪个页面跳转来访问资源的,用以实现防盗链
  • User-Agent: Mozilla/4.0 (compatible;MSIE 5.5;Windows NT 5.0):客户机的软件环境
  • Connection: close/Keep-Alive:请求结束后,是关闭连接还是保持连接
  • Date: Tue, 11 Jul 2000 18:23:51 GMT当前请求时间
  • Range:指示服务器只传输一部分web资源.可以用来实现断点续传功能
    • Range字段可以通过3种格式设置要传输的字节范围:
    • Range: bytes=1000-2000:传输范围从1000到2000字节
    • Range: bytes=1000-:传输第1000个字节以后的所有内容
    • Range: bytes=10000:传输最后1000个字节

响应头

  • Location:这个头配合302状态码使用,重定向地址
  • Server:Apache-Coyote/1.1:服务器类的类型
  • Content-Encoding:服务器通过这个头,数据压缩的格式
  • Content-Type:服务器通过这个头告诉浏览器送回数据的类型
  • Refresh:服务器通过这个头,告诉浏览器隔多长时间刷新一次
  • Connection:keep-alive\close:访问完后的状态