zl程序教程

您现在的位置是:首页 >  .Net

当前栏目

HTTP理解

2023-02-18 16:29:09 时间

HTTP

解析域名,获取IP,通过DNS
建立TCP连接
向服务器发送GET请求
返回内容
断开连接吗?

HTTP请求

Request line
GET /dir/1.html HTTP/1.1
请求方法 资源位置 协议版本

HTTP headers
通用 header 、请求 header、实体 header

Content
上传的文件 POST数据存放

GET
POST 返回201 create
HEAD 只会返回header 不会返回内容(检测web服务器是否正常返回)
PUT post请求相似 目的是向服务器发送保存
DELETE 删除服务器上资源
TRACE 诊断网络
OPTIONS
CONNECT

GET 和 POST 有啥不一样的?

a. 在客户端,GET方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放置在http 包体内提交。
b.GET方式提交的数据最多只能有2K,而POST则没有此限制???
c.安全性问题。正如在(1)中提到,使用 Get 的时候,参数会显示在地址栏上,而 Post 不会。(其实他们的安全性是一样的吗???)
d.GET 不改变资源的内容,POST一般会改变服务器端的资源内容???

Request Headers

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
(q代表优先级)
参数为 Content Type
q 指定优先级[0-1],0为不接受,默认为1
如果不指定 / ,则其他类型优先级为0

Accept-Charset: utf-8;q=0.66,*;q=0.6

Accept-Encoding: gzip,deflate,sdch

Accept-Language: zh-CN,zh;q=0.8,en;q=0.6

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

401 Unauthorized

Cookie:version=1; skin=new;

Cache-Control: public, max-age=864000
控制缓存策略

Expect:100-continue

From:genesis@sijiaomao.com

Host: www.sijiaomao.com:8080

If-Match:"aetaghash"

If-Modified-Since:Sun, 11 May 2014 05:39:55 GMT

...

HTTP Response

Status line
HTTP/1.1 200 OK
100-199:参考信息
200-299:成功
300-399:重定向
400-499:客户端错误
500-599:服务器错误

HTTP headers
通用 header、响应 header、实体 header

Content

...

HTTP安全

XSS - Cross site scripting
被攻击的网站注入可执行js 通过js盗用cookie 发送到第三方网站
CRSF - cross site request forgeries
在用户不知情的情况下 通过在第三方网站插入图片或者js提交POST请求的方式执行有害操作
Sniffer
各种监听假冒

PHP中实现HTTP协议的方法

HTTP性能优化

缓存
Cache-control、 If-Modified-Since、ETag

连接
Connection: keep-alive
Keep-Alive: 10

压缩
Accept-Encoding、Content-Encoding
ob_start("ob_gzhandler");

片段请求
Range: bytes=0-1023

分块传输
Transfer-Encoding: chunked

HTTP安全

HTTP原先建立在tcp协议上
HTTPS建立在ssl协议上 (ssl协议也是建立在tcp协议上)

SSL协议工作流程
1.客户端向服务器请求获取证书加公匙
2.客户端通过CA验证收到证书的合法性
3.客户端通过收到的公匙加密一个字符串 作为后续通信密匙 发送给服务器
4.服务器通过私匙解密 得到通信密匙
5.后续HTTP协议通过通信密钥加密进行

cookie session原理

1.cookie是用来跟踪用户会话的技术 cookie本身是一小段文本信息
它存在与http协议header头域里,通过http协议来传递
cookie 用来干什么?
http协议是一种无状态协议,客户端和服务端完成一次会话后,服务器端不知道下次连接到服务端的是不是同一个客户端,需要有个标识能告诉服务端,是哪个客户端连接上了服务端.例如登录用户,需要有个东西标识,那就在客户端保存一个cookie,下次访问的时候随http header一起发到服务端,服务端根据cookie的内容知道了这是某个用户的请求,服务端根据cookie取到该用户的信息,返回给客户端
以用户登录来举例

小明访问某一网站 aa.com的登录页面, 此时通过浏览器发了一个http request请求,此时http header头域的cookie值可以是空的
xx.com服务器收到这个请求,并接受了小明提交过来的登录数据,判断用户名和密码都正确,这个时候服务器会"种下一个cookie"--一般是将小明的用户名发给客户端,通常是"Cookie: usernick=xiaoming;"这个字符串通过http response返回给客户端(浏览器)
浏览器收到http response返回来的信息发现cookie了,然后将该信息写入到浏览器的某个存储文件中去
小明再访问xx.com的其他页面的时候,请求的http header中会带着这个cookie
服务器的程序会找cookie,并根据cookie的信息取出信息并返回给客户端

session是什么
Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。
session能干什么
cookie能做的他能做,cookie不能做的他也能做!
session是怎么工作的
用户请求login.php填写数据后提交
服务器收到提交的数据取得用户信息,将用户信息存入session,并将session_id通过cookie的形式发给客户端
客户端将session_id存入浏览器cookie文件
用户再次访问其他页面时,将有session_id的cookie通过header头发给服务端
服务端拿到session_id从session中取到用户信息并返回

session中怎么存储的
序列化serialize

问题1.session的有效期?
由php.ini中的session配置决定( session.cookie_lifetime = 0 session.gc_maxlifetime = 600 )
问题2.关闭客户端可以删除session或者使session失效吗?
不能删除session,但有可能使session失效 .使其失效的原因是如果配置的session有效期是cookie随着浏览器失效.
问题3.如果浏览器不支持cookie,session能正常使用吗?
可以,将session通过url传递
问题4.如果服务端有多台服务器,session如何共享?
nfs, 将多台服务器所在的session存储目录设置为mount挂载的目录
memcache,session.save_handler = memcache并设置路径session.save_path = "tcp://192.168.1.101:11211"
mysql,ession.save_handler = user,然后建立session表,建立php文件用于对数据库表操作session数据,最后用session的都引入上一步中的php文件