http学习笔记
HTTP
(Hyper Text Transfer Protocol)协议:超文本传输协议的缩写.
- 基于TCP/IP通信协议来传递数据.
- HTTP默认端口号为80,但是你也可以改为8080或者其他端口。
- HTTP协议工作于客户端/服务端(C/S)架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。
- HTTP是明文传输的,也就意味着,介于发送端、接收端中间的任意节点都可以知道你们传输的内容是什么。这些节点可能是路由器、代理等。
HTTPS
:(Hypertext Transfer Protocol Secure:超文本传输安全协议).
- HTTPS 默认工作在TCP协议443端口.
- HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。
http的三个特点:
无连接
:每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。媒体独立
:只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送.无状态
:无状态是指协议对于事务处理没有记忆能力。
HTTP1.0 定义了三种请求方法:
GET
:通常用于请求服务器发送某个资源.POST
:向服务器提交数据,比如完成表单数据的提交,将数据提交给服务器处理。HEAD
:与GET方法的行为很类似,但服务器在响应中只返回实体的主体部分。这就允许客户端在未获取实际资源的情况下,对资源的首部进行检查。
HTTP1.1 新增了六种请求方法:
OPTIONS
:用于获取当前URL所支持的方法。则它会在HTTP头中包含一个名为Allow
的头,值是所支持的方法,如GET, POST。PUT
:是让服务器用请求的主体部分来创建一个由所请求的URL命名的新文档;如果那个文档存在的话,就用这个主体来代替它。PATCH
:DELETE
:请求服务器删除指定URL所对应的资源。但是允许服务器在不通知客户端的情况下撤销请求。TRACE
:在目的服务器端发起一个“回环”诊断.CONNECT
:
GET和POST的区别
:
- GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以
?
分割URL和传输数据,参数之间以&
相连。如果包含中文或其他特殊字符,则把字符串用BASE64加密.得出如%E5%A5%BD
的字符串,其中%XX
中的XX为该符号以16进制表示的ASCII码值。 - POST把提交的数据放置在HTTP包的包体中.
http的报文请求与响应
请求报文的格式:
响应报文的格式:
下面是一个简单的请求报文与应答报文实例:
//客户端请求:
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/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain
HTTP状态码
:由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型
1**
:信息,服务器收到请求,需要请求者继续执行操作
2**
:成功,操作被成功接收并处理.
3**
:重定向,需要进一步的操作以完成请求
4**
:客户端错误,请求包含语法错误或无法完成请求
5**
:服务器错误,服务器在处理请求的过程中发生了错误
下面是常见的HTTP状态码:
200 - 请求成功
301 - 资源(网页等)被永久转移到其它URL
404 - 请求的资源(网页等)不存在
500 - 内部服务器错误
常见http请求头
:具体详见此链接
- User-Agent :告诉服务器,客户端使用的操作系统、浏览器版本和名称
- Host :指定要请求的资源所在的主机和端口
- Accpet :告诉服务端,客户端接收什么类型的响应.
- Accept-Language:浏览器当前设置的语言。
- Accept-Encoding:告诉服务器能接受什么编码格式,包括字符编码,压缩形式.
常见http响应头
:具体详见此链接
Transfer-Encoding
:表示实体传输给用户的编码形式。包括:chunked、compress、 deflate、gzip、identity。eg:transfer-encoding:chunked
Date
:此条消息被发送时的日期和时间.date:Fri, 20 Nov 2020 00:59:21 GMT
Connection
:针对该连接所预期的选项.eg:connection: close
Server
:服务器名称。eg:Server: Apache
Content-Type
:用于定义网络文件的类型和网页的编码.详细参见此链接- 格式如:
Content-Type: text/html; charset=utf-8
. - 常见的媒体格式类型如下:
- text/html :HTML格式
- text/plain:纯文本格式
- text/xml :XML格式
- image/gif :gif图片格式
- image/jpeg:jpg图片格式
- image/png : png图片格式
- image/gif :gif图片格式
- image/jpeg:jpg图片格式
- image/png : png图片格式
- 格式如: