(043)系统学习PHP之细说HTTP协议

Posted 狂人节奏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(043)系统学习PHP之细说HTTP协议相关的知识,希望对你有一定的参考价值。

  简  介  

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于客户端-服务端架构上。浏览器作为HTTP客户端 通过URLHTTP服务端 发送所有请求信息。Web服务器根据接收到的请求后,向客户端发送响应信息

  • 客户(Client):Web浏览器或其他任何客户端,通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。

  • 服务端Server):常见有Apache、nginx、IIS(Internet Information Services)等,通过接收客户端的请求并向客户端发送HTTP响应数据。

  •  统一资源标识符(Uniform Resource Identifiers, URI):用来传输数据和建立连接。

特点:

  •  无连接:每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。节省传输时间。

  •  无状态:对于事务处理没有记忆能力。意味着如果后续处理需要前面的信息,则它必须重传。

  •  支持B/S及C/S模式。

        客户端向服务器发送一个请求,请求头包含请求的方法、URL、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。服务器以一个状态行作为响应,响应的内容包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。

 http工作原理 

一次HTTP操作称为一个事务,其工作整个过程如下:

1 ) 、地址解析

如用客户端浏览器请求这个页面:http://localhost.com:8080/index.htm 

  协议名:http

 主机名:localhost.com

 端口:8080

 对象路径:/index.htm

 2)、封装HTTP请求数据包  

把以上部分结合本机自己的信息,封装成一个HTTP请求数据包

3)封装成TCP包,建立TCP连接TCP的三次握手

         在HTTP工作开始之前,客户机(Web浏览器)首先要通过网络与服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能进行更高层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80。这里是8080端口

4)客户机发送请求命令

        建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URI:Uniform Resource Identifier)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。

5)服务器响应

       服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

       实体消息是服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据

6)服务器关闭TCP连接

 一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码

 Connection:keep-alive

TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

 客户端请求消息 

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成;

实例:

 GET /hello.txt HTTP/1.1

 User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3

 Host: www.example.com

 Accept-Language: en, mi

请求方法

根据HTTP标准,HTTP请求可以使用多种请求方法。

HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。

HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

序号 方法 描述
1 GET 请求指定的页面信息,并返回实体主体。
2 HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
3 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
4 PUT 从客户端向服务器传送的数据取代指定的文档的内容。
5 DELETE 请求服务器删除指定的页面。
6 CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
7 OPTIONS 允许客户端查看服务器的性能。
8 TRACE 回显服务器收到的请求,主要用于测试或诊断。

 服务器响应消息 

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。服务端响应:

 
   
   
 
  1. HTTP/1.1 200 OK

  2. Date: Mon, 27 Jul 2009 12:28:53 GMT

  3. Server: Apache

  4. Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT

  5. ETag: "34aa387-d-1568eb00"

  6. Accept-Ranges: bytes

  7. Content-Length: 51

  8. Vary: Accept-Encoding

  9. Content-Type: text/plain

输出结果:

 
   
   
 
  1. Hello World! My payload includes a trailing CRLF.

 HTTP状态码 

HTTP状态码的英文为HTTP Status Code。HTTP状态码分类

分类 分类描述
1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误


下面是常见的HTTP状态码:

  •  200 – 请求成功

  •  301 – 资源(网页等)被永久转移到其它URL

  •  404 – 请求的资源(网页等)不存在

  •  500 – 内部服务器错误

 – END – 

以上是关于(043)系统学习PHP之细说HTTP协议的主要内容,如果未能解决你的问题,请参考以下文章

043-PHP简单获得一个类对应的反射信息

细说http - tcp - udp - socket - protobuf协议

[Python3] 043 多线程 简介

《图解HTTP》学习笔记之入门

django 搭建上传文件系统——细说Form Validation(二)

043Java中逻辑运算之实现位与操作