HTTP简介


超文本传输协议(Hyper Text Transfer Protocol)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。

HTTP概述


  • HTTP即是一个客户端终端与服务器端之间,请求和应答的标准。
  • HTTP可以在任何互联网协议或其他网络上实现。它假定了其下层协议提供可靠的传输。

HTTP工作原理


  • HTTP协议定义了客户端如何从服务器请求页面,服务器如何传送页面给客户端。采用的是请求/相应模型,客户端发出请求报文(包含请求方法、URL、协议版本、请求头部、请求数据)。服务器则以状态行作为响应(内容包括协议版本、成功或错误代码、服务器信息、响应头部、响应数据)。
  • HTTP请求/响应的流程如下:
    1. 客户端连接到服务器(客户端一般是指浏览器)
    2. 发送HTTP请求
    3. 服务器接收请求并返回HTTP响应
    4. 释放连接TCP连接(服务器端先关闭连接,客户端被动关闭连接。关闭时间取决于connection模式,close是响应完成立马执行,keepalive则会保持连接一段时间,期间可以继续接收请求。)
    5. 客户端浏览器解析HTML内容

HTTP特性


  • HTTP协议是基于TCP/IP协议之上的应用层协议。
  • 基于请求-响应的模式
    请求必定是由客户端发出的,即连接必定由客户端发起。
  • 无状态
    协议本身不会保存传输的数据
  • 无连接
    指完成一次链接的反馈后,服务端马上断开链接,客户端被动断开链接,这样可以节省传输时间。另在http1.1中可以在发送请求时设置为持续链接,即固定时间内无传输之后再断开,可节省持续型连接的传输时间。

HTTP请求方法


HTTP方法是区分大小写的。

  • GET/HEAD 都是向服务发出请求指定资源的请求。不同的是HEAD不传回资源的本文部分,而值传回“关于该资源的信息”(元信息或元数据)

  • POST 提交数据,请求服务器处理,如上传文件、提交信息等。(该请求可以创建新的资源,或者修改现有的资源)

  • PUT 向指定资源位置上传其最新内容。

  • DELETE 请求服务器删除对应资源(Request-URI标识)

  • TRACE 显示服务器收到的请求。主要用于测试或者debug。

  • OPTIONS 传回服务器对应资源所支持的所有HTTP方法。用“*”代替名字可以用于测试服务器功能是否正常运作。

  • CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。

    GET/HEAD/POST关系与区别
    • 通过抓包工具可以看到,当你需要上传数据如登陆、修改自定义图标、搜索等等操作时,使用的是POST指令。可以得知POST指令是专用于上传的。
    • 而HEAD在我理解更多的时候是用于例如爬虫爬取数据时,并不会先GET整个文件,而是先获得一个标志物,再通过标志物判断是否GET文件。
    • 至于GET,GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如tieba.baidu.com/f?kw=%C9%E3%D3%B0。POST方法是把提交的数据放在HTTP包的Body中.

HTTP状态码


所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。
状态代码的第一个数字代表当前响应的类型:

  • 1xx消息——请求已被服务器接收,继续处理
  • 2xx成功——请求已成功被服务器接收、理解、并接受
  • 3xx重定向——需要后续操作才能完成这一请求
  • 4xx请求错误——请求含有词法错误或者无法被执行
  • 5xx服务器错误——服务器在处理某个正确请求时发生错误

URL


  1. 传送协议。
  2. 层级URL标记符号(为[//],固定不变)
  3. 访问资源需要的凭证信息(可省略)
  4. 服务器。(通常为域名,有时为IP地址)
  5. 端口号。(以数字方式表示,若为HTTP的默认值“:80”可省略)
  6. 路径。(以“/”字符区别路径中的每一个目录名称)
  7. 查询。(GET模式的窗体参数,以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据,通常以UTF8的URL编码,避开字符冲突的问题)
  8. 片段。以“#”字符为起点

如在 http://www.luffycity.com:80/news/index.html?id=250&page=1
http ————————是协议
80 —————————是服务器默认网络端口,默认的时候可以省略
/news/index.html——是路径
?id=280&page=1——是查询

HTTP请求格式


  • 第一部分:请求行,第一行,需要表明请求类型,请求对象,以及http协议版本。
  • 第二部分:包含指出目的地的Host,客户端的数据等等
  • 第三部分:空行,必须留一个空行
  • 第四部分:请求主体。如POST需要上传什么、PUT需要上传什么之类的。

HTTP响应格式


  • 第一部分:状态行,由HTTP协议版本号,状态码,状态消息 三部分组成。
  • 第二部分:消息报头,用来说明客户端要使用的一些附加信息,如时间信息。
  • 第三部分:空行,必须留一个空行
  • 第四部分:响应正文,服务器返回给客户端的文本信息。