浅谈超文本传输协议(HTTP)

客户端和服务器端交互的过程

  1. 客户发起连接
  2. 客户发送请求
  3. 服务器响应请求
  4. 服务器关闭连接

概述

 通常,有http客户端发起一个请求,创建一个到服务器的端口指定的端口(默认80端口)的TCP连接。http服务器则在那个端口监听客户端的请求。一旦收到请求,服务器向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。

请求信息->发出的请求信息包括以下几个

  • 请求行
    • 例如GET /images/logo.gif HTTP/1.1,表示从/images目录下请求logo.gif这个文件。
  • (请求)头,
    • 例如Accept-Language: en
  • 空行
  • 其他消息体

请求行和标题必须以<CR><LF>作为结尾。空行内必须只有<CR><LF>而无其他空格。在HTTP/1.1协议中,所有的请求头,除Host外,都是可选的。 

GET /hello.htm HTTP/1.1
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)   #一个标识客户端的字符串(应用程序名称,版本,包含的信息,如主机操作系统和语言)
Host: example.com
Accept-Language: en-us
Accept-Encoding: gzip, deflate

 请求方法

请求方法用来定义操作资源的方式,HTTP/1.1 协议中定义了八种请求方法:

    • GET:读取资源数据
    • POST:新建资源数据
    • PUT:更新资源数据
    • DELETE:删除资源数据
    • HEAD:读取资源的元数据
    • OPTIONS:读取该资源所支持的所有请求方法
    • TRACE:回显服务器收到的请求,主要用于测试或诊断
    • CONNECT:HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经
      由非加密的HTTP代理服务器)

请求头字段:用来传递客户端的更多信息,以及传递解析信息主题的必要信息

User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)   
Host: example.com
Accept-Language: en-us  #可接受的语言
Accept-Encoding: gzip, deflate  #支持的编码类型

#
  • Accept: 客户端接受哪些 Mine 类型。如 Accept: text/html
  • Referer: 从那个页面到的该页面。

 响应头字段:和请求消息类似,首部字段会包括服务器本身的一些信息指示、以及响应消息本身的元数据

Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
Content-Length: 88
Content-Type: text/html
Connection: Closed

常见响应头有:

  • Content-Encoding: 数据的编码类型。如 Content-Encoding: gzip
  • Server: 服务器的名称。如 Server:thin 1.5.0 codename Knife
  • Location: 通知客户端新的资源位置。如 Location: http://www.github.com/login
  • Content-Type: 响应数据的类型。如 Content-Type:text/html; charset=UTF-8

Content-Encoding: 响应数据的编码格式。如 gzip。客户端会根据该值对响应内容解码。



原文地址:https://www.cnblogs.com/Jdrops/p/5355606.html