zoukankan      html  css  js  c++  java
  • HTTP协议初步解析

    一、什么是HTTP协议

    HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,定义了Web客户端向Web服务器请求Web页面的方式,以及服务器向客户端传送Web页面的方式。

    定义中的名词解释:
    什么是超文本?
    超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本。
    什么是应用层协议?
    网络的设计者使用分层的方式组织网络协议以及实现这些协议的硬件和软件,历史上比较重要的一个协议组织模型是五层因特网协议栈,从顶层到底层,分别为应用层、运输层、网络层、链路层、物理层。其中应用层常见的协议有HTTP、SMTP、FTP等,运输层协议有TCP、UDP等,网络层有IP等。
     
    二、HTTP协议特点
     
    1. HTTP使用TCP作为它的运输层协议,TCP为HTTP提供可靠数据传输服务。使用了分层结构,HTTP协议不用担心数据丢失,也不用关注TCP从网络的数据丢失和乱序故障中恢复的细节。
    2. HTTP是一个无状态协议,服务器向客户端发送被请求的文件,而不保存任何关于该客户的信息,(需要保存则应当使用cookie)。
    3. HTTP/1.0使用非持续连接,HTTP/1.1使用持续连接。使用持续连接,在客户和服务器中不用多次分配TCP的缓冲区和保持TCP变量,同时避免了每一个传输对象的两倍RTT交付时延。HTTP的默认模式是使用带流水线的持续连接。
     
    三、HTTP报文格式
     
    1. 请求报文
     
    举例如下:
    GET  /somedir/page.html  HTTP/1.1
    Host:  www.someschool.edu
    Connection: close
    User-agent: Mozilla/5.0
    Accept-language: fr
    -------------------------------------------------------
    First line: request line
    Other lines: header line
     
    请求行: 方法字段 - URL字段 - HTTP版本字段
    其中,方法字段可取GET, POST, HEAD, PUT, DELETE等
    默认为GET请求,在URL后附带参数,有大小限制,不超过1K
    表单提交中指明用POST时用POST,在实体中传递,无大小限制
    HEAD方法常用于调试,只返回HTTP报文,不返回请求对象
    Connection: close表示不使用持续连接
     
    常见的请求头:
    Accept: text/html,image/*   客户可接受的数据类型
    Accept-Charset: ISO-8859-1  接受数据需要使用的字符集编码
    Accept-Encoding: gzip,compress  接受的数据压缩格式
    Accept-Language: en-us,zh-cn  接受的语言环境
    Host: www.it315.org:80  虚拟主机名
    If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT  缓存资源的最后获取时间
    Referer: http://www.it315.org/index.jsp  当前的请求来自哪个链接
    User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)  客户端的信息
    Cookie 
    Connection: close/Keep-Alive  指定是否保持连接
    Date: Tue, 11 Jul 2000 18:23:51 GMT  当前时间
     
    2. 响应报文
     
    举例如下:
    HTTP/1.1 200 ok
    Connection: close
    Date: Tue, 09 Aug 2011 15:44:04 GMT
    Server: Apache/2.2.3 (CentOS)
    Last-Modified: Tue, 09 Aug 2011 15:11:03 GMT
    Content-Length: 6821
    Content-Type: text/html
    (Data, Data, Data ...)
    -------------------------------------------------------
    First line: status line
    Last line: entity body
    Other lines: header line
     
    状态行:协议版本 - 状态码 - 状态信息
    状态码和状态信息常见的有:
    200 OK
    301 Moved Permanently
    400 Bad Request
    404 Not found
    505 HTTP Version Not Supported
    -------------------------------------------------------
    100 ~ 199 表示成功接收,客户端需要继续提交才能完成整个过程,200 ~ 299 表示成功接收并已完成整个过程
    300 ~ 399 为完成请求,客户需要进一步细化请求,如302请求重定向,304, 307 通知使用缓存
    400 ~ 499 客户端请求有错误
    500 ~ 599 服务器端出现错误
     
    常见的响应头:
    Location: http://www.it315.org/index.jsp  配合302实现请求重定向
    Server:apache tomcat  服务器的基本信息
    Content-Encoding: gzip  服务器发送数据时使用的压缩格式
    Content-Length: 80  发送数据的大小
    Content-Language: zh-cn  发送数据使用的语言环境
    Content-Type: text/html; charset=GB2312  当前所发送的数据的基本信息
    Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT  缓存相关
    Refresh: 1;url=http://www.it315.org  定时刷新到某个URL
    Content-Disposition: attachment;filename=aaa.zip  与下载有关的头
    Transfer-Encoding: chunked  数据传输类型,数据一块块传输
    Set-Cookie:SS=Q0=5Lb_nQ; path=/search  设置cookie
    ETag: W/"83794-1208174400000"  和缓存相关
    Expires: -1 指定资源缓存的时间,如果取值为0或-1浏览就不缓存资源
    Cache-Control: no-cache  如果为no-cache则通知浏览器不缓存
    Pragma: no-cache   如果为no-cache则通知浏览器不缓存
    由于历史原因,以上三个都用来控制缓存,同时使用
    Connection: close/Keep-Alive  是否保持连接
    Date: Tue, 11 Jul 2000 18:23:51 GMT 当前时间
     
     三、Telnet演示
    telnet cis.poly.edu 80
     
  • 相关阅读:
    2016年第七届蓝桥杯C/C++ A组国赛 —— 第一题:随意组合
    寻找段落
    攻击火星
    图论入门
    实数加法
    求 10000 以内 n 的阶乘
    大整数因子
    计算2的N次方
    大整数减法
    大整数加法
  • 原文地址:https://www.cnblogs.com/yanqiang/p/5565679.html
Copyright © 2011-2022 走看看