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首部内容。
- HTTP 基础
- Http 基础
- http基础
- http 基础
- HTTP基础
- http基础
- HTTP基础
- http基础
- HTTP基础
- Http基础
- HTTP基础
- HTTP基础
- HTTP基础
- http基础
- HTTP基础
- HTTP协议基础
- HTTP 协议基础
- HTTP协议基础
- MySQL主从复制配置
- [HDU 3944] DP?组合数 Lucas定理
- java中字符串的比较
- PAT-A 1006. Sign In and Sign Out (25)
- react-native ActivityIndicator 初始值为false再也无法显示
- HTTP基础
- Linux下用cmake编译大型C/C++项目
- 卡尔曼滤波_2(图解)
- codves m进制转十进制 1475
- Protobuf笔记以及Java Javascript使用实例
- mac80211解析一
- android studio配置
- POJ3669-Meteor Shower-BFS
- 58到家数据库30条军规解读