最近在图书馆写开题报告,写得死去活来的时候,看到角落里面有一本书《图解http》,以前看过影印的pdf的版本,看到纸质书的感觉比影印版好了n倍。于是,这几天叫又重新读了一次,感觉收获良多,写在这里,备忘。
- 一个get请求是什么样子的?
如果一个get请求是 localhost/index.html?id=3 ,对应的http请求是:
(注意每一行结束的标志是\r\n)
GET /index.html?id=3 http/1.1 \r\n
Connection:keep-alive \r\n
Host:localhost \r\n
User-Agent:xxxxxxx \r\n
- 一个post的请求localhost/index.html?id=3是什么样子的?
(注意1:post的请求和正文段的区别是两个\r\n\r\n)
(注意2:content-length:4指的是正文段的长度)
POST /index.html http/1.1 \r\n
Connection:keep-alive \r\n
Host:localhost \r\n
User-Agent:xxxxxxx \r\n
content-length:4 \r\n
\r\n\rn
id=3
如果是两个参数的时候,中间是一个&符号来连接。
image.png
- 一个响应是什么样子的?
http/1.1 200 ok
Connection:Keep-Alive
Content-Length:691
Content-Type:text/html;charset=UTF-8
Date:Fri, 24 Nov 2017 11:31:30 GMT
Keep-Alive:timeout=5, max=100
Server:Apache/2.2.21 (Win32) PHP/5.3.8
-
content-length指的是什么的长度?
content-length 指的是正文的长度,也就是这个指明了http的正文段在哪里结束。 -
服务器如何给浏览器设置cookie?
通过set-cookie字段来设置cookie
注意在设置cookie的指定name和value,还需要指定path,domain和expire(有效期)
cache-control:private
content-encoding:gzip
content-type:text/html; charset=utf-8
date:Fri, 24 Nov 2017 12:11:16 GMT
expires:Thu, 19 Nov 1981 08:52:00 GMT
pragma:no-cache
server:nginx
set-cookie:PHPSESSID=gd0p08pn2bbqu9jat2d9lk6bc7; path=/
set-cookie:ssid=gd0p08pn2bbqu9jat2d9lk6bc7; path=/; domain=julyedu.com
- 浏览器如何在发送请求的时候,带上自己的cookie?
accept-encoding:gzip, deflate, br
accept-language:zh-CN,zh;q=0.9
cookie:PHPSESSID=gd0p08pn2bbqu9jat2d9lk6bc7; UM_distinctid=15fedf0b80324c-0975573264d798-7b113d-100200-15fedf0b8043ba; ssid=gd0p08pn2bbqu9jat2d9lk6bc7; CNZZDATA1259748782=1283769823-1511524588-https%253A%252F%252Fwww.google.ca%252F%7C1511524588
7.cookie里面会有什么?
除了有name和value之外,比如ssid=1000,还有指定path,domain和expire(有效期)字段。
8.cache-control 是什么?
cache-control既可以在http请求里面的字段出现,也可以在http响应的字段出现。no-cache指令的目的是为了防止从缓存里面返回过期的资源。
cache-control请求字段里面的值,以及代表的含义:
cache-control: no-cache #强制向源服务器再次验证
cache-control相应字段里面的值,以及代表的含义:
cache-control: public #可以向任意方提供响应的缓存
cache-control:private #仅向特定的用户提供缓存
10.transfer-encoding 是什么?
Transfer-Encoding: chunked 之后,就代表这个报文采用了分块编码。这时,报文中的实体需要改为用一系列分块来传输。
- 如何利用http实现一个文件的分段下载?
range 字段,每次请求文件的一部分
12.host是什么?在已经指明主机ip的情况下面host字段是不是多余的?
一台主机(一个ip)上面可以配置多台虚拟主机,这样需要host字段来指明是哪一台虚拟主机。
13.状态码200,302,403,403,500分别代表什么含义?
200 : 请求成功
302 : 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
403 : 服务器理解请求客户端的请求,但是拒绝执行此请求
404 : 找不到
500 : 服务器内部错误,无法完成请求
-
if-match字段表示什么含义?
-
http有什么问题,为什么要用https?
1. 明文传输
2. 没有办法验证目的主机的合法性
比如最简单的把本地的dns文件改成 www.baidu.com -> 127.0.0.1
那么,当访问百度的时候,dns就会把ip解析成127.0.0.1改成了其他的地方
3. 内容可以被篡改,content-length只是指定了内容的长度,但是没有指明具体是什么,可以偷偷改http正文段的内容
https就是解决上述的问题
-
什么是ajax,为什么要用ajax?
在不刷新页面的情况下,发送http请求。 -
什么是webscoket,为什么要用websocket?
ajax只是不需要用户去自己发送HTTP请求了,消息的更新机制还是用户发送请求,服务器来响应。服务器始终没有能力去自己主动向浏览器推送消息。websocket就是来解决这个。 -
web攻击技术有哪些?
xss :http://cuiqingcai.com/3133.html
csrf :http://cuiqingcai.com/2076.html
sql注入
- 对于一个域名的请求,一般第一步不是发送http请求,而是先进行dns域名解析,dns解析的过程:
a.查询本地缓存
1.1 浏览器缓存
#查看chrome的缓存 ,是缓存就要有有效期,可以多看一眼缓存的有效期,大约是一分钟左右
chrome://net-internals/#dns
1.2 系统缓存
#查看window上dns缓存
#生存时间在3700秒,大约一个小时
ipconfig /displaydns
#ubuntu(nscd :name service cache daemon)
nscd -g
b.向dns服务器查询
- content-type的种类
text/html html 文件
text/plain 文本文件
application/pdf pdf文件
text/css css文件
application/x-png x-png文件
- https
关于https 我的理解是 https =http + ssl 。
HTTPs 采用混合的加密机制,使用公开密钥加密用于传输对称密钥,之后使用对称密钥加密进行通信。
主要过程如下图所示:
-
客户机先服务器发送https请求
-
服务端的配置
采用HTTPS协议的服务器必须要有一套数字证书,这套证书其实就是一对公钥和私钥。(如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西。) -
传送证书
-
客户机解析证书
向ca机构验证证书 -
传送加密信息
这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值。(而这个随机值就是以后服务器和客户机通信的对称密钥了) -
服务段解密信息
-
传输加密后的信息
-
客户端解密信息
网友评论