HTTP基础

来源:互联网 发布:淘宝网抓绒女式外套 编辑:程序博客网 时间:2024/05/16 03:03

1.报文格式
(1)请求报文

<method> <request-URL> <version><headers><entity-body>

(2)响应报文

<version> <status> <reason-phrase><headers><entity-body>

2.HTTP协议get和post的区别
(1)get通常用于请求服务器发送某个资源,post通常用于向服务器输入数据,比如html表单中填好的数据发送给服务器。
(2)get查询字符串跟在url后面,post提交的数据在请求报文的entity-body里面,这样导致前者发送的数据可见,不安全。
(3)get查询字符串跟在url后面,url长度有限制(不是被http协议限制,而是被客户端和服务器端限制),,发送数据量有限。post数据在entity-body中,可发送量比get多,虽然entity-body发送量也是有限的。

3.常见状态码

100~199            信息提示200~299            成功300~399            重定向400~499            客户端错误500~599            服务器错误
200 OK                  成功304 NOT MODIFIED        资源在上次请求之后没有修改401 Unauthorized        需要输入用户名和密码403 FORBIDDEN           客户端未能获得授权404 Not Found           服务器找不到URL对应资源501 Not Implemented     服务器不支持客户端请求的方法503 Service Unavailable 服务器现在无法为请求提供服务

4.并行连接,持久连接,管道化连接。
并行连接:tcp连接一次发送一个http请求
持久连接:keep-alive,一次tcp连接,发送多个http请求,但是一个接一个发,收到第一个响应,发送第二个请求。
管道化连接:一次tcp连接多个http请求,连续发多个请求,等待响应。

注意,在持久连接中,如果想立即断开连接:
Connection:close
HTTP/1.0需要Connection:keep-alive
HTTP/1.1默认persistent

5.一次发送多个http报文涉及到如何判断报文结束:Content-Length。

6.http的缓存
(1)处理步骤:
接受
解析:提取出URL和各种首部。
查找:通过URL查找本地副本。本地副本缓存了响应头部和数据。
新鲜度检测:副本是否过期。如果过期就从服务器重新获取。更新响应头部和数据。
创建响应:对响应头部进行修改。
发送
日志
(2)如何判断过期
响应报文包括首部Cache-Control或Expire指出过期时间,缓存代理缓存过期时间。
(3)过期不一定从服务器重新获取,要看文档是否修改。如果没有修改,只需要获取新的首部。
(4)缓存代理询问服务器方法:
If-Modifed-Since:时间
If-None-Match:标签(版本)

7.https
https只是在http上加上了ssl,ssl加密http报文。
在发送加密http报文之前,客户端和服务器进行一次ssl握手,验证身份(证书),生成密匙等等。
(1)建立443端口tcp连接
(2)ssl握手
(3)对报文进行加密
(4)发送报文,对端对报文进行解密
(5)回送加密后响应报文。
OPENSSL:通用加密库。

8.传输编码和分块编码
首部:Transfer-Encoding:chunked
分块编码,不需要Content-Length,以为每块数据开始就是本块数据长度,然后最后一块数据长度是0,提示可以断开连接。步骤:
(1)发送http响应,首部包含Transfer-Encoding:chunked,但是不包含数据
(2)一块一块赤裸裸数据,没有http报文。数据格式长度+内容

18<CR><LF>data

(3)最后一块数据

0<CR><LF>

(4)拖挂:可选,可以继续发送http首部内容。

0 0
原创粉丝点击