这是我参与8月更文挑战的第26天,活动详情查看:8月更文挑战
HTTP(全称:Hyper Text Transfer Protocol,即超文本传输协议 );是一个简单的请求-响应协议,通常运行在TCP协议上。它指定了客户端可能发送给服务端什么样的消息,以及得到什么样的响应。请求和响应消息的头是以ASCII
码形式给出的;而消息内容则是以类似MIME的格式给出的
在HTTP传输过程中,客户端总是通过建立一个连接与发送一个HTTP请求来发起一个事务。服务端不能主动与客户端联系,也不能给客户端发出一个回调连接。客户端与服务端都可以提前中断一个连接
HTTP的主要特点
- 简单快速:客户端向服务端发起请求服务时,只需要传送方法和路径即可。常用的请求方式有GET、
HEAD
和POST
。每种方法规定了客户端与服务端联系的类型 - 灵活:
HTTP
允许输入任意类型的数据对象。正在传输的类型有Content-Type
加以标记 - 无连接:无连接的含义是限制每次连接只处理一个请求;服务器在处理完客户端的请求并应答后就断开连接
- 无状态:
HTTP
是无状态协议。无状态协议是指协议对事务处理没有记忆能力
URI
HTTP使用统一资源标识符URI(即Uniform Resouerce Identifires)
来传输数据和建立连接
统一资源定位符URL(Uniform Resource Locator)
是一种特殊类型的URI
,它包含了用与查找某个资源的足够信息,在互联网上用来标识某一处的地址
就拿一个在GitHub上搜索资源的网络地址进行解析:
https://github.com/search?o=desc&q=go&s=stars&type=Repositories
一个完整的URL的组成包含以下几部分:
-
协议部分
上面示例中的协议就是
https
,表示该网页使用的协议是HTTPS
;在internet中可以使用多种协议,如:HTTP
、HTTPS
、FTP
、WS
等等 -
域名部分
该URL的域名就是
https://github.com
在URL中,也可以把IP地址作为域名使用 -
端口部分
跟在域名后面的便是端口,域名与端口之间使用英文的冒号
:
隔开。如果省略端口部分,则采用默认端口80,也可以自定义端口部分,比如:https://www.github.com:9090
-
参数部分
从
?
处开始到最后的都是参数,多个参数使用&
连接。上面网址示例中,参数就是o=desc&q=go&s=stars&type=Repositories
URL
URL(Uniform Resource Locator,统一资源定义符)
用于描述一个网络上的资源。URL是URI的一个子集,是URI概念的一种实现方式。通俗的说,URL是internet上描述信息资源的字符串,主要用在各种www客户端程序和服务器端程序中
URL用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等
URN
URN(Uniform Resource Name,统一资源名)
是带有名字的因特网资源。URN是URL的一种更新形式,URN不依赖位置,并且有可能减少失效链接的个数。但是其流行以待时日,因为它需要更精密软件的支持
URI与URL的区别
URI可用来唯一标识一个资源。Web上的所有可用资源,如HTLM、图像、视频、程序等,都是通过一个URI来定位的;
URI一般由三部分组成:
- 访问资源的命名机制
- 存放资源的主机名
- 资源自身的名称,由路径表示,着重抢到资源
URL是一种具体的URI,即URL不仅可以用来标识一个资源,而且还指明了如何定位这个资源。URL是互联网上用来描述信息资源的字符串,主要用在各种WWW客户端程序和服务器程序上。URL可以用一种统一格式来描述各种信息资源,包含文件、服务器的地址和目录等等
URL一般由三部分组成:
- 协议,又称服务方式
- 存有该资源的主IP地址,有时也包含端口号
- 主机资源的具体地址,如目录和文件名等
HTTP请求
客户端发送到服务器端的请求消息由请求行(Reques tLine)、请求头(Request Hander)、请求体(Request Body)组成
请求行
请求行由请求方法、URI
、HTTP
协议/协议版本这三部分组成
在日常网络请求中,最常用的请求方法有两种:GET
和POST
在浏览器中输入URL按enter
键后,便发起了一个GET
请求,请求的参数直接包含在URL
中;POST
请求大都在提交表单是发送
GET和POST的主要区别:
- GET请求中的参数包含在URL中,数据可以在URL中看到;而POST请求的URL不包含这些参数,参数都是包含在请求体中
- 一个GET请求提交的数据最多只有1024byte,而POST则没有限制
常用的请求方法:
请求方法 | 描述 |
---|---|
GET | 请求页面,并返回页面内容 |
POST | 向指定资源提交数据(表单或者文件上传) |
HEAD | 类似GET请求,只不过返回的响应体中没有具体的内容,用于获取报头 |
PUT | 从客户端型服务端传送的数据取代(覆盖)指定文档(资源)的内容 |
DELETE | 请求服务端删除置顶内容 |
OPTIONS | 允许客户端查看服务器的性能 |
CONNECT | 把服务器当作跳板,让服务器代替客户端访问网页 |
TRACE | 显示服务器收到的请求,主要用于测试或诊断 |
请求头
请求头包含服务器要使用的附加信息,比较重要的信息有Cookie
、Referer
、User-Agent
等。常用的HTTP请求头信息如下表:
请求头 | 示例 | 说明 |
---|---|---|
Accept | Accept:text/plain,text/html | 指定客户端能够接受的内容类型 |
Accept-Charset | Accept-Charset:iso-8859-5 | 浏览器可以接受的字符串编码集 |
Accept-Encoding | Accept-Encoding: gzip, deflate, br | 指定浏览器可以支持的Web服务器返回内容压缩编码类型 |
Accept-Language | Accept-Language: en-US,en;q=0.5 | 浏览器可接受的语言 |
Accept-Ranges | Accept-Ranges: bytes | 用于定义范围请求的单位 |
Authorization | Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l | 用于验证用户代理身份的凭证 |
Cache-Control | Cache-control: no-cache | 用于在http请求和响应中,通过指定指令来实现缓存机制 |
Connection | Connection: keep-alive | 决定当前的事务完成后,是否会关闭网络连接 |
Cookie | Cookie: name=value; name2=value2; | 在发送HTTP请求时,会把保存在该请求域名下的所有cookie值一起发送给Web服务器 |
Content-Length | Content-Length:512 | 用来指明发送给接收方的消息主体的大小,即用十进制数字表示的八位元组的数目。 |
请求体
请求体是指HTTP请求中传递数据的实体,常用于POST
、PUT
等请求体中