
HTTP小常识
发布日期:2021-05-07 03:17:45
浏览次数:22
分类:原创文章
本文共 5016 字,大约阅读时间需要 16 分钟。
HTTP简介:
- HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,适用于从万维网服务器传输超文本到本地浏览器的传送协议;
- HTTP是一个基于TCP/IP协议来传递数据(HTML文件、图片、查询结果等);
HTTP工作原理:
- HTTP协议工作于C/S架构(客户端-服务器)为上,浏览器作为HTTP客户端通过URL向HTTP服务器即WEB服务器发送所有请求;
HTTP三点注意事项:
i. HTTP是无连接:无连接的含义是限制每次连接只处理一个请求;服务器处理完客户端的请求,并收到客户端的应答后,即断开连接,采用这种方式可以节省传输时间;
ii.HTTP是媒体独立的:只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送;客户端以及服务器指定使用适合的MIME-type内容类型;
iii.HTTP是无状态的:HTTP协议是无状态的协议;无状态是指协议对于事务处理没有记忆能力;缺少状态意味着如果后续处理需要前面的信息时,则它必须重传,这样可能导致每次连接传送的数据量增大;另一方面,在服务器不需要先前信息时它的应答就较快;
以下图展示了HTTP协议通信的流程:
HTTP的消息结构:
- HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息(基于TCP/IP协议),是一个无状态的请求/响应协议;
- HTTP客户端是一个应用程序,通过链接到服务器达到向服务器发送一个或多个HTTP的请求的目的;
- HTTP服务端是一个应用程序,通过接收客户端的请求并向客户端发送HTTP响应数据;
- HTTP使用统一资源标识符(URI)来传输数据和建立连接;
客户端请求消息:
- 客户端发送一个请求到服务器的请求消息包括:请求行(request line)、请求头部(header)、空行和请求数据(data)四个部分;
服务器响应消息:
- HTTP响应也有四个部分组成:状态行、消息报头、空行和响应正文;
HTTP请求方法:
HTTP的请求方法:
- HTTP/1.0定义了三种请求方法:GET、POST和HEAD方法;
- HTTP/1.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的响应头信息:
应答头 | 说明 |
---|---|
Allow | 服务器支持哪些方法(如GET、POST) |
Content-Encoding | 文档的编码方法;只有在解码之后才可以得到Content-Type头指定的内容类型;利用gzip压缩文档能够减少HTML文档的下载时间;Java的GZIPOutputStream可以很方便地进行gzip的压缩,但只有Unix上的Netscape和Windows上的IE4、IE5才支持它;因此,Server应该通过查看Accept-Encoding头检查浏览器是否支持gzip,为支持gzip浏览器返回经过gzip压缩的HTML页面,为其他浏览器返回普通页面; |
Content-Length | 表示内容的长度;只有当浏览器使用持久HTTP连接时才需要这个数据; |
Content-Type | 表示后面的文档属于什么MIME类型;Servlet默认为text/plain,但通常需要显示地指定为text/html; |
Date | 表示当前的GMT时间;可以利用setDateHeader来设置这个头以避免转换时间格式的麻烦; |
Expires | 表示应该在什么时候认为文档已经过期,从而不缓存它? |
Last-Modified | 文档的最后修改时间;客户可以通过if-modified-Since请求头提供一个日期,该请求被视为一个GET请求,只有改动时间迟于指定时间的文档才会返回,否则返回一个304(not modified)状态 |
Location | 表示用户去哪里提取文档;Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态码为302 |
Refresh | 表示浏览器应该在多少时间(秒)之后刷新文档,以秒计;注意Refresh的意义是“N秒之后刷新本页面或者访问指定页面”,而不是“每隔N秒刷新本页面或访问页面”;因此,连续刷新要求每次都发送一个Refresh头,而发送204状态代码可以阻止浏览器继续刷新;Refresh不属于HTTP/1.1正式规范里的,而是一个扩展,但Netscape和IE都支持它; |
Server | 服务器的名字;Servlet一般不设置这个值,而是由Web服务器自己设置 |
Set-Cookie | 设置和页面关联的Cookie;Servlet应使用addCookie方法() |
HTTP状态码:
常见的HTTP状态按码有:
- 200:请求成功
- 301:资源被永久转移到其他URL;
- 404:请求的资源不存在;
- 500:内部服务器异常;
HTTP状态码分类:
- HTTP状态由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用;HTTP状态码分为5种类型:
分类 | 分类描述 |
---|---|
1xx | 信息,服务器收到请求,需要请求者继续执行操作 |
2xx | 成功,操作被成功接收并处理 |
3xx | 重定向,需要进一步的操作以完成请求 |
4xx | 客户端错误,请求包含语法错误或无法完成请求 |
5xx | 服务器错误,服务器在处理请求的过程中发生错误 |
2. HTTP状态码列表:
状态码 | 状态码的英文名 | 中文描述 |
---|---|---|
100 | Continue | 继续,客户端需要继续其请求 |
101 | Switching Protocol | 切换协议;服务器根据客户端的请求切换协议;只能切换到更高级的协议,例如,切换到HTTP的新版本协议 |
200 | OK | 请求成功;一般用于GET与POST请求 |
201 | Created | 已创建;成功请求并创建新的资源 |
202 | Accepted | 已接受;已经接受请求,但未处理完成 |
203 | NonAuthoritative Information | 非授权信息;请求成功,但返回的meta信息不在原始的服务器,而是一个副本 |
204 | No Content | 无内容;服务器成功处理,但未返回内容;在未更新网页的情况下,可确保浏览器继续显示当前的文档 |
205 | Reset Content | 重置内容;服务器处理成功,用户端应重置文档视图;可通过此返回码清除浏览器的表单域 |
206 | Partial Content | 部分内容;服务器成功处理了部分GET请求 |
300 | Multiple Choice | 多种选择;请求的资源可包括多个位置,相应返回一个资源特征与地址的列表用于用户终端选择 |
301 | Moved Permanently | 永久转移;请求的资源已被永久的转移到新的URI,返回信息会包括新的URI,浏览器会自动定向到新URI,今后任何新的请求都应使用新的URI代替 |
302 | Found | 临时移动;与301类似;但资源只是临时被移动,客户端应继续使用原有的URI |
303 | See Other | 查看其它地址;与301类似,使用GET和POST请求查看 |
304 | Not Modified | 未修改;所谓请求的资源未修改,服务器返回这个状态码时,不会返回任何数据;客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源 |
305 | Use Proxy | 使用代理;所请求的资源必须通过代理访问 |
306 | Unused | 已经被废弃的HTTP状态码 |
307 | Temporary Redirect | 临时重定向,与302类似,使用GET请求重定向 |
400 | Bad Request | 客户端请求的语法错误,服务器无法理解 |
401 | Unauthorized | 请求要求用户的身份认证 |
402 | Payment Required | 保留,将来使用 |
403 | Forbidden | 服务器理解请求客户端的请求,但是拒绝执行此次请求 |
404 | Not Found | 服务器无法找到客户端的请求找到资源;通过代码,网站设计人员可设置“您所请求的资源无法找到”的个性页面 |
405 | Method Not Allowed | 客户端请求中的方法被禁止 |
406 | Not Acceptable | 服务器无法根据客户端的请求的内容特性完成请求 |
407 | Proxy Authentication Required | 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权 |
408 | Request Timeout | 服务器等待客户端发送的请求时间过长,超时 |
409 | Conflict | 服务器完成客户端的PUT请求时可能返回此代码,服务器处理请求时发生了冲突 |
410 | Gone | 客户端的请求的资源已经不存在,410不同于404,如果资源以前有现在被永久删除了可使用410代码 |
411 | Length Required | 服务器无法处理客户端发送的不带Content-Length的请求信息 |
412 | Precondition Failed | 客户端请求信息的先决条件错误 |
413 | Request Entity Too Large | 由于请求的实体过大,服务器无法处理,因此拒绝请求;为防止客户端的连续请求,服务器可能会关闭连接;如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息 |
414 | Request-URI Too Large | 请求的URI过长,服务器无法处理 |
415 | Unsupported Media Type | 服务器无法处理请求附带的媒体格式 |
416 | Requested range not satisfied | 客户端请求的范围无效 |
417 | Expectation Failed | 服务器无法满足Expect的请求头信息 |
500 | Internal Server Error | 服务器内部错误,无法完成请求 |
501 | Not Implemented | 服务器不支持请求的功能,无法完成请求 |
502 | Bad Gateway | 充当网关或代理的服务器,从远端服务器接收到一个无效的请求 |
503 | Service Unavailable | 由于超载或系统维护,服务器暂时的无法处理客户端的请求,延时的长度可包含在服务器的Retry-After头信息中 |
504 | Gateway Timeout | 充当网关或代理的服务器,未及时从远端服务器获取请求 |
505 | HTTP Version not supported | 服务器不支持请求的HTTP协议的版本,无法完成处理 |
HTTP content-type
Content—Type,内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码;
HTTP长连接:
在HTTP/1.0中,默认使用的是短连接;也就是说,浏览器与服务器没进行一次HTTP操作时,就建立一次连接,但任务结束就中断连接;
但从HTTP/1.1开始,默认使用长连接,用以保持连接特性;使用长连接的HTTP协议,会在响应头中加入Connection:keep-alive;在使用长连接的情况下,当一个网页打开完成后,客户端与服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页时,会继续使用这一条已经建立的连接;Keep-alive不会永久保持连接,有一个保持时间,可以在不同的服务器软件中设定这个时间;实现长连接要客户端与服务器都支持长连接;
HTTP协议的长连接与短连接,实质上是TCP协议的长连接与短连接;
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年03月27日 02时07分00秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
sctf_2019_easy_heap
2019-03-06
PyQt5之音乐播放器
2019-03-06
Redis进阶实践之十八 使用管道模式提高Redis查询的速度
2019-03-06
SQL注入
2019-03-06
#2036:改革春风吹满地
2019-03-06
MPI Maelstrom POJ - 1502 ⭐⭐ 【Dijkstra裸题】
2019-03-06
P1379 八数码难题 ( A* 算法 与 IDA_star 算法)
2019-03-06
算法学习笔记: 珂朵莉树
2019-03-06
Codeforces Round #664 题解(A ~ C)
2019-03-06
Problem A - Sequence with Digits (数学推导)
2019-03-06
Problem 330A - Cakeminator (思维)
2019-03-06
LeetCode75 颜色分类 (三路快排C++实现与应用)
2019-03-06
docker基础:容器生命周期管理命令
2019-03-06
C#开发BIMFACE系列35 服务端API之模型对比6:获取模型构建对比分类树
2019-03-06
C# 规范建议
2019-03-06
C语言+easyX图形库的推箱子实现
2019-03-06
反汇编-流程控制语句-2-循环控制语句分析
2019-03-06
调试vs2019代码的流程
2019-03-06
游戏外挂基础-概述
2019-03-06