Http
This is my study note of Http.
HTTP/0.9
组成
- 只允许客服端发送Get请求
- 不支持请求头
- 由于没有请求头,因此只支持纯文本格式,无法插入图片
无状态性
- 每个事务独立进行处理,事务结束时就释放这个连接
1
由客服端发起一个请求,然后Web服务器响应这个请求返回页面内容,然后连接会关闭,如果请求的页面不存在,也不会返回任何错误码。
HTTP/1.0
相比与0.9增加特性
- 支持请求头和响应头
- Response响应以一个响应状态行开始
- 开始支持客户端通过POST方法向Web服务器提供数据
- 支持长连接Keepalive
- 缓存机制以及身份认证
关键优化
Persistent Connection
1
将TCP连接保持连接打开状态,以便未来的HTTP请求重用现在的连接,直到客服端或者服务端关闭。
Pipelining(请求流水线)
1
客户端可以发送多个请求而无需等待服务端响应,但是服务端必须按照顺序来发送响应。
chunked编码传输
1
该编码将实体分块传输并表明长度,直到长度为0块标识传输结束。使用持久连接时,服务器发送主体内容签需要计算出内容的大小,放在响应头里,但是可能在发送之前无法确定大小,就需要吧服务端把主体逐块发送,说明每一块的大小,再用大小为0的块做为结束块。
Request
URL
1
HTTP使用同一资源标记符来传输数据和建立连接。URL是一种特殊的URI,包含了查找某个资源的足够信息,在互联网上用来标识某一处资源的地址。
示例:URL:http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name。
协议部分: http://
1
该URL的协议部分为http:,后面对的"//"为分隔符,表明网页为http协议。
域名部分 www.aspxfans.com
1
一个URL中也可以使用IP地址做为域名使用。
端口部分:8080
1
跟在域名后面的是端口号,域名和端口号之间使用“:”作为分隔符。如果省略端口部分则默认为80。
虚拟目录部分:/news/
1
从域名后的第一个/到最后一个/为止,是虚拟目录部分
文件名部分:index.asp
1
最后一个/到?部分是文件名部分,如果没有?,则是从域名后的最后一个/到#部分是文件部分,如果没有?或者#,则到末尾都是文件名部分。
参数部分:boardID=5&ID=24618&page=1
1
从"?“开始到”#“为止之间的部分为参数部分,又被称为搜索部分、查询部分。参数部分可以允许有多个参数,参数和参数之间使用”&"作为分隔符。
锚部分:#name
1
从#开始到最后都是锚部分
Request请求的格式
客户端发送一个HTTP请求到服务器的请求消息格式为:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。
示例如下
1
2
3
4
5
6
7
8
9GET /linhaifeng/p/7278389.html HTTP/1.1
Host: www.cnblogs.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9请求行
1
2
3
4GET /linhaifeng/p/7278389.html HTTP/1.1
Get说明请求类型为GET
/linhaifeng/p/7278389.html为对应资源
HTTP/1.1为对应HTTP版本请求头部
1
2从第二行起为请求头部,HOST将指出请求的目的地
User-Agent,服务端和客户端脚本都能访问它,它是游览器类型和检测逻辑的重要基础,该信息由游览器来定义,并在每个请求中自动发送等。空行
1
即使请求数据为空也要有空行。
请求数据-主体
1
可以添加任意的其他数据。
请求方法
1 | GET,请求指定的网页信息,并返回实体主体。 |
响应Response
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
- 状态行
1
由HTTP协议版本号,状态码,状态消息三部分组成
- 消息报头
1
说明客户端要使用的一些附件信息
- 空行
- 响应报文
1
返回给客户端的信息
状态码
第一个数据代表类别,由三个数字组成,共分为5种类别:
- 1xx:指示信息,表示请求已接收,继续处理。
- 2xx:成功,表示请求已被成功接收、理解、接受。
- 3xx:重定向,要完成请求必须进行更进一步的操作。
- 4xx:客户端错误,请求有语法错误或请求无法实现。
- 5xx:服务端错误,服务器未能实现合法的请求。
常见状态码:
1 | 200 OK //客户端请求成功 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 风声向寂!
评论
ValineDisqus