HTTP协议介绍(分析tinyhttpd【上】)

来源:互联网 发布:navicat for linux 64 编辑:程序博客网 时间:2024/06/03 16:59

概述

超文本传输协议(HyperText Transfer Protocol,HTTP)是从服务器传输数据到客户端的传输协议。

HTTP 的主要特点

  • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。由于HTTP协+ 议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
  • 灵活:HTTP允许传输任意类型的数据对象。传输的类型由 Content-Type 加以标记。
  • 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  • 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

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

  • 客户发起连接
  • 客户发送请求
  • 服务器响应请求
  • 服务器关闭连接 //因为是无连接的,所以响应完毕就断开了连接

HTTP报文

请求端(客户端)的HTTP报文叫做请求报文,响应段(服务器端)的叫做响应报文。HTTP报文本身是由多行(CR+LF作换行符’\r\n’)数据构成的字符串文本
请求报文和响应报文的结构:
这里写图片描述

这里写图片描述

请求行

请求消息的第一行就是请求行。它指明使用的请求方法、资源标示符、和 HTTP 版本。如
GET /hello.htm HTTP/1.1

请求方法

GET:获取资源

GET 方法用来请求访问已被 URI 识别的资源。指定的资源进服务器端解析后返回响应内容。换言之,如果请求的资源是文本(静态页面请求),那就保持原样返回;如果是像CGI 那样的程序(动态页面请求),则返回经过执行后的输出结果。
这里写图片描述
这里写图片描述

POST:传输实体主体

POST 的主要目的是用来传输实体的主体,不是获取响应的主体内容
这里写图片描述
这里写图片描述
请求方法用来定义操作资源的方式,HTTP/1.1 协议中定义了八种请求方法:
GET:读取资源数据
POST:新建资源数据
PUT:更新资源数据
DELETE:删除资源数据
HEAD:读取资源的元数据
OPTIONS:读取该资源所支持的所有请求方法
TRACE:回显服务器收到的请求,主要用于测试或诊断
CONNECT:HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)
此外,除了上述方法,特定的HTTP服务器还能够扩展自定义的方法。

资源标示符

URL(Uniform Resource Locator) 地址用于描述一个网络上的资源, 基本格式如下
如:schema://host[:port#]/path/…/[?query-string][#anchor]
scheme 指定低层使用的协议(例如:http, https, ftp)
host HTTP服务器的IP地址或者域名
port# HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如 http://www.cnblogs.com:8080/
path 访问资源的路径
query-string 发送给http服务器的数据
anchor- 锚
更多关于URL的资料请参考URL详解

请求头字段

用来传递客户端的更多信息,以及传递解析消息主体的必要信息。如

User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT)Host: example.comAccept-Language: en-usAccept-Encoding: gzip, deflate

常见请求头字段有

  • Accept: 客户端接受哪些 Mine 类型。如 Accept: text/html
  • Accept-Encoding: 支持的编码类型。如 gzip, deflate, sdch
  • Accept-Language: 可接受的语言。如 en-US,en;q=0.8
  • User-Agent:一个标识客户端的字符串。如 User-Agent: Mozilla/5.0 - (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/38.0.2125.101 Safari/537.36
  • Cookie: Cookie。如 sessionid=c8422b97-98e2-4bc6-aa31-9b667d6ca4a5; theme=4;
  • Referer: 从那个页面到的该页面。

空行

指示头字段区完成,消息主体开始(如果有消息主体的话)。

响应消息

状态行

由http版本、状态码、状态描述文字构成。如
HTTP/1.1 200 OK

状态码

HTTP 状态码(HTTP Status Code)是用以表示网页服务器 HTTP 响应状态的3位数字代码。
所有的状态码的第一个数字代表了响应的五种状态之一:
1xx:代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行 结束。
2xx:代表请求接收、理解并且接受。
3xx:代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目 标)在本次响应的Location域中指明。当且仅当后续的请求所使用的方法是GET或者HEAD时,用户浏览器才可以 在没有用户介入的情况下自动提交所需要的后续请求。
4xx:代表了客户端看起来可能发生了错误,妨碍了服务器的处理。除非响应的是一个HEAD请求,否则服务器就应 该返回一个解释当前错误状况的实体,以及这是临时的还是永久性的状况。
5xx:代表了服务器在处理请求的过程中有错误或者异常状态发生,,也有可能是服务器意识到以当前的软硬件资源 无法完成对请求的处理。

常见状态码有:

200: 请求已经成功,请求所希望的响应头或者数据体将随着此响应返回
202: 服务器已接受请求,但尚未处理。正如它可能被拒绝一样,最终该请求可能会也可能不会被执行。在异步操作的场合下,没有比发送这个状态码更方便的做法了
204: 服务器成功处理了请求,但不需要返回任何实体内容,并且希望返回更新了的元信息
304: 被请求的资源内容没有发生更改
400: 包含语法错误,无法被服务器解析
403: 服务器已经接收请求,但是拒绝执行
404: 请求失败,请求所希望得到的资源未在服务器上发现
408: 请求超时。客户端可以再次提交这一请求而无需任何修改
500: 服务器内部错误,无法处理请求
502: 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效响应
504: 作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应

响应头字段

和请求消息类似,首部字段会包括服务器本身的一些信息指示、以及响应消息本身的元数据。如
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。客户端会根据该值对响应内容解码。

消息主体

消息主体是请求消息的承载数据。比如在提交POST表单,并且表单方法不是GET时,表单数据就是打包在消息主体内的。消息主体是可选的。

参考资料

  • HTTP协议详解
  • HTTP协议全览
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 外来媳妇转上海户口没有档案怎么办 公务员考试笔试差9分面试怎么办 想从事人事方面的工作没经验怎么办 教师资格考试后户籍转走认定怎么办 总经理离职了作为高管的我怎么办 企业换总经理想换供应商应该怎么办 换了晶振时间还快怎么办 职场两个人都想要你的情况下怎么办 造价起步工资太低又结婚了怎么办 3d保存时写入文件出错怎么办 无经验想在工地承包点小活怎么办 一级建造师挂靠后中标后怎么办 用360对系统修补漏洞很慢怎么办 如果美国和俄罗斯开战中国会怎么办 戴牙冠前临时补牙材料掉了怎么办 设备间在业主家里每次上锁怎么办 成都安全员证原件丢了并过期怎么办 记不施工员证书号了怎么办 优易学车学员版登录不了怎么办 先科移动dvd主板坏了怎么办 离职单位不出劳动解除书怎么办 离职后一级建造师注册证怎么办 京牌货车报废挂靠公司不给办怎么办 二建挂靠注册证书到期了怎么办 二建证书挂靠公司不给钱怎么办 二建拿到证书原单位不解锁怎么办 凯云软件清单锁定只读了怎么办 苹果笔记本鼠标触摸板没反应怎么办 苹果笔记本键盘和触摸板失灵怎么办 苹果手机输入密码显示已停用怎么办 苹果7p手机刷机黑屏了怎么办 苹果5s来电接听屏幕卡顿怎么办? 手机摔了一下触屏失灵怎么办 小米手机摔了一下触屏失灵怎么办 苹果6sp触摸ic坏了怎么办 苹果4s屏幕摔裂了怎么办 新换的手机内屏颜色太亮怎么办 苹果手机摔了一下屏幕失灵怎么办 苹果手机6s屏幕坏了怎么办 苹果6s屏幕摔坏了怎么办 苹果手机屏幕进油了屏幕变暗怎么办