HTTP 笔记

原创 乘风逐月 随笔 http 120阅读 2018-07-20 17:11:55 举报

一、http简介

http 协议是 Hyper Text Transfer Protocol(超文本传输协议)的缩写,用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议。

二、HTTP工作原理

HTTP 协议工作于客户端-服务端架构上。浏览器作为 HTTP 客户端通过 URL 向 HTTP 服务端即 Web 服务器发送所有请求,Web 服务器根据接受到的请求,向客户端发送响应信息。
Web服务器有: Apache 服务器,IIS 服务器等。
HTTP 默认端口号为 80,可以改为 8080 或者其他端口。
注意:
(1)HTTP 是无连接的: 无连接的含义是每次连接只处理一个请求,处理完客户端请求,并收到客户端应答后就断开连接,这样可以节省传输时间。
(2)HTTP 是媒体独立的: 这意味着,只要客户端和服务器知道要处理的数据内容,任何类型的数据都可以通过 HTTP 发送,客户端和服务器指定合适的 MIME-type 内容类型。
(3)HTTP 是无状态的: HTTP协议是无状态协议。无状态是指对于事物处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则必须重新传递,这样导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

三、HTTP 消息

1.HTTP消息结构

HTTP 消息是简单的格式化数据块。每个消息都由三部分组成:
a. 消息起始行,必需,消息基本描述信息,纯ASCII字符,每行以CRLF结束
b. 消息头部/报头,可能有0~n个,消息详细属性,纯ASCII字符,每行以CRLF结束
c. 消息主体,可选,包含数据的主体,数据可以为空,或者是字符数据(如html、css)、二进制数据(如图片、音视频)

2.客户端请求消息结构

格式如下:

(1)请求行: 请求方法 空格 请求URL 空格 协议版本 回车换行
(2)请求头部: 可能包含0~n个请求头(名/值对) 回车换行
请求头用于描述本身、客户端、请求主体的特征,可分为四种:
------a.通用头部: 在请求消息或响应消息中都可使用,如: Connection/Date/Cache-Control/Pragma
------b.请求专用头部: 只能出现在请求消息中,如: Host/Referer/User-Agent/Client-IP/Accept/If-Modified-Since/Cookie
------c.实体头部: 描述消息主体特征,如: Location/Content-Length/Expires/Last-Modified
------d.扩展头部: 自定义头部
(3)一个空白行 回车换行
(4)请求主体: 可选,提交给服务器的请求数据

3.响应消息结构

HTTP 响应消息也由四部分组成:状态行、消息报头、空行、响应正文。

(1)响应行: 协议版本 空格 状态码 空格 原因短语 回车
(2)响应头部: 可能包含0~n个响应头(名/值对) 回车
响应头用于描述响应本身、服务器、响应主体的特征,可分为四种:
------a.通用头部: 在请求消息或响应消息中都可使用,如: Connection/Date/Cache-Control/Pragma
------b.响应专用头部: 只能出现在响应消息中,如: Age/Server
------c.实体头部: 描述消息主体特征,如: Location/Content-Length/Expires/Last-Modified
------d.扩展头部: 自定义头部
(3)一个空白行 回车
(4)响应主体: 可选,返回给客户端的响应数据,可能是字符数据,也可能是字节数据

四、HTTP 请求方法

方法描述
GET用于请求访问已经被URL(统一资源标识符)识别的资源,可以通过URL传参给服务器
HEAD类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
POST向指定资源提交数据进行处理请求,数据包含在请求体中
PUT从客户端向服务器传送的数据取代指定的文档内容
DELETE请求服务器删除指定页面
CONNECTHTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
OPTIONS决定可以在服务器执行哪些方法
TRACE对可能经过代理服务器传送到服务器上的信息进行追踪

五、GET方法与POST方法的区别

1.注重点
get方式重点在从服务器上获取资源,post方式重点在向服务器发送数据
2.传输数据的方式
get方式传输数据是通过URL请求,以key=value的形式,置于URL后,并用 ‘?’ 连接,多个key=value以‘&’连接;
post方式传输数据通过http的post机制,将字段与对应值封存在请求实体中发送给服务器,这个过程对用户是不可见的。
3.传输数据的大小
get方式传输的数据量小,是因为受URL长度限制,但是效率高;post方式可以传输大量数据,上传文件时只能用post方式。
4.安全性
get方式是不安全的,因为URL是明文可见的,可能会泄露私密信息;post方式比get方式的安全性高,因为传输的数据不可见。
5.支持的字符
get方式只能支持 ASCII 字符,向服务器传输的中文字符可能会乱码;post方式支持标准字符集,可以正确传递中文字符。

六、常见状态码及原因

分类描述
1xx指示信息-表示请求已接收,继续处理
2xx成功-表示请求已被成功接收
3xx重定向-要完成任务必须进行更进一步的操作
4xx客户端错误-请求有语法错误或请求无法实现
5xx服务器端错误-服务器未能实现合法的请求
状态码状态码英文名称中文描述
100Continue继续,客户端继续请求
200OK请求成功,一般用于get或post请求
304Not Modified未修改,请求资源未修改,服务器端不会返回任何资源,客户端使用缓存资源
305Use Proxy使用代理,请求的资源必须通过代理访问
400Bad Request客户端请求的语法错误,服务器无法理解
403Forbidden服务器理解客户端请求,但拒接执行
404Not Found请求的资源不存在
405Method Not Allowed发起的请求中带有URL中不支持的方法
500Internal Server Error服务器内部错误,无法完成请求
505HTTP Version not supported服务器不支持请求的HTTP版本,无法完成处理

七、内容类型与常用内容类型

实体头部中的 Content-Type 头可用于指定消息主体中的数据内容类型(MIME类型)。
常见 MIME 类型:

扩展名MIME 类型
htmltext/html
jsapplication/javascript
csstext/css
txttext/plain
jsonapplication/json
xmlapplication/xml
docapplication/msword
jpegimage/jpeg
mp3audio/mpeg

八、缓存控制相关头部

1.缓存工作原理

客户端可以自动保存已经访问过的文档的副本,这些副本就成为“文档缓存”。当客户端再次发送针对同一个URL的请求时,如果本地有“已缓存的副本”,就可以直接从本地存储设备而不是远程服务器提取该文档了。

2.Cache-Control头

Cache-Control:max-age 头部表示从服务器将文档传来之时起,可以认为此文档处于新鲜状态的秒数,如: Cache-Control:max-age=3600。
服务器可以将请求客户端不要缓存文档,或者将最大使用期设置为0,从而在每次访问的时候都进行刷新,如:Cache-Control:max-age=0。
客户端在事先没有跟原始服务器进行再验证的情况下,不能提供对应数据的陈旧副本。但缓存仍然可以提供新鲜的副本,如:Cache-Control:must-revalidate。

3.Expires头

Expires头部指定缓存的过期确切时间。HTTP设计者认为,由于很多服务器的时钟都不同步,所有推荐最好使用剩余秒数来代替过期的绝对时间。
如果希望客户端不要缓存资源,可以将过去时间设置为一个过去的时间,如:Expires:Sat,01 Jun 1970, 08:00:00 GMT

4.控制HTTP头部的方法

(1)修改web服务器的配置文件,设置默认响应头部。
(2)设置每个HTML文件的HTTP-EQUIV标签控制缓存,如:

5.数据缓存的优点

a. 减少了冗余的数据传输,节省客户端流量费用
b. 缓解服务器带宽瓶颈问题,服务器可以节省出更多的带宽
c. 降低了对服务器的资源消耗和运行要求
d. 降低了由于远距离而造成的加载延时

九、HTTP链接性能优化

网站性能优化最主要的就是减少HTTP请求及每次响应中内容的长度。可以从连接过程中的下列方法中考虑:
(1)域名解析: 尽可能的减少域名解析次数--减少跨站外部资源的引用
(2)创建连接: 努力减少连接创建次数--使用Keep-Alive避免重复连接
(3)发送请求: 尽量减少请求次数--合理设置Expires时间、资源合并
(4)等待响应: 提高服务器端运行速度--提高数据运算及查询速度
(5)接受响应: 尽可能减小响应数据长度--启用压缩

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复