http相关

请求报文和响应报文都是由以下4部分组成

1.请求行

2.请求头

3.空行

4.消息主体

 

请求行

格式为:

Method Request-URI HTTP-Version 结尾符

结尾符一般用\r\n

 

请求头

通用报头

既可以出现在请求报头,也可以出现在响应报头中

Date:表示消息产生的日期和时间

Connection:允许发送指定连接的选项,例如指定连接是连续的,或者指定“close”选项,通知服务器,在响应完成后,关闭连接

Cache-Control:用于指定缓存指令,缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现),且是独立的(一个消息的缓存指令不会影响另一个消息处理的缓存机制)

 

请求报头

请求报头通知服务器关于客户端求求的信息,典型的请求头有:

Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机

User-Agent:发送请求的浏览器类型、操作系统等信息

Accept:客户端可识别的内容类型列表,用于指定客户端接收那些类型的信息

Accept-Encoding:客户端可识别的数据编码

Accept-Language:表示浏览器所支持的语言类型

Connection:允许客户端和服务器指定与请求/响应连接有关的选项,例如这是为Keep-Alive则表示保持连接。

Transfer-Encoding:告知接收端为了保证报文的可靠传输,对报文采用了什么编码方式。

 

响应报头

用于服务器传递自身信息的响应,常见的响应报头:

Location:用于重定向接受者到一个新的位置,常用在更换域名的时候

Server:包含可服务器用来处理请求的系统信息,与User-Agent请求报头是相对应的

 

实体报头

实体报头用来定于被传送资源的信息,既可以用于请求也可用于响应。请求和响应消息都可以传送一个实体,常见的实体报头为:

Content-Type:发送给接收者的实体正文的媒体类型

Content-Lenght:实体正文的长度

Content-Language:描述资源所用的自然语言,没有设置则该选项则认为实体内容将提供给所有的语言阅读

Content-Encoding:实体报头被用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容的编码,因而要获得Content-Type报头域中所引用的媒体类型,必须采用相应的解码机制。

Last-Modified:实体报头用于指示资源的最后修改日期和时间

Expires:实体报头给出响应过期的日期和时间

 

空行

http协议规定的格式,一般采用\r\n

 

消息主体

一般用于http的post method。通过实体报头规定消息主体的格式内容、

例如 Content-Type=text/plain

该实体报头规定了消息主体的数据是纯文本格式

常见的还有

Content-Type=application/x-www-form-urlencoded,定义为Key=value格式

Content-Type=application/json,定义为序列化为的json字符串

Content-Type= multipart/form-data,定义为表单数据提交,该格式比较复杂,详细解释一下。

 

multipart/form-data

1. 该格式是post的常见提交方式,也就是说是由post方法来组合实现的

2. 使用该提交方法需要规定一个内容分割符用于分割请求体中的多个post的内容,如文件内容和文本内容自然需要分割开来,不然接收方就无法正常解析和还原这个文件了。具体的头信息如下:

Content-Type: multipart/form-data; boundary=${bound}  

其中${bound}是自定义的分隔符,一般情况用一长串不会和业务数据重复的字符串表示 ,例如9431149156168

3. 分割符前面需要加上--

4. 最后的分割符后面也需要加上—

5. 所有的数据请求头和数据之间都用\r\n\r\n分开,两个数据间用 --${bound}\r\n分开

 

实例

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

POST /bucketname HTTP/1.1

Host: Host Server

User-Agent: browser_data

Accept: file_types

Accept-Language: Regions

Accept-Encoding: encoding

Accept-Charset: character_set

Keep-Alive: 300

Connection: keep-alive

Content-Type: multipart/form-data; boundary=9431149156168

Content-Length: 123456

--9431149156168

Content-Disposition: form-data; name="key"<br>

acl

--9431149156168

Content-Disposition: form-data; name="success_action_redirect"<br>

success_redirect

--9431149156168

Content-Disposition: form-data; name="content-Type"<br>

text/plain

--9431149156168

Content-Disposition: form-data; name="x-amz-meta-uuid"<br>

uuid

--9431149156168

Content-Disposition: form-data; name="x-amz-meta-tag"<br>

metadata

--9431149156168--

  

get和post

  •  get参数是url拼接,post是在body中
  •  get最大提交数据限制1024字节,post无限制
  •  post安全,get容易出现乱码问题

 

组成  http://host [:port(端口可选)]  [uri(资源绝对路径)]

 

请求报头:

          host:例如:www.google.cn

          Accept:希望接受的数据类型 默认*

          Accept-Charset:接收字符编码

          Cookie:会话通行证,记录客户的信息(有效时间,访问次数等)

         Range:请求实体范围

       

 

POST提交数据时四种常见的数据格式

Content-type的类型
常见的媒体格式类型:

    text/html : HTML格式
    text/plain :纯文本格式      
    text/xml :  XML格式
    image/gif :gif图片格式    
    image/jpeg :jpg图片格式 
    image/png:png图片格式
以applicaton开头的没提类型:

application/json    : JSON数据格式
application/xhtml+xml :XHTML格式
application/xml     : XML数据格式
application/atom+xml  :Atom XML聚合格式    
application/pdf       :pdf格式  
application/javascript :js格式
application/msword  : Word文档格式
application/octet-stream : 二进制流数据(如常见的文件下载)
application/x-www-form-urlencoded :form表单默认的数据格式类型,form表单数据被编码为key/value格式发送到服务器。
 

 

 

Accept和Content-Type区别

1.Accept属于请求头, Content-Type属于实体头。 
Http报头分为通用报头,请求报头,响应报头和实体报头。 
请求方的http报头结构:通用报头|请求报头|实体报头 
响应方的http报头结构:通用报头|响应报头|实体报头

2.Accept代表发送端(客户端)希望接受的数据类型。 
比如:Accept:text/xml; 
代表客户端希望接受的数据类型是xml类型

Content-Type代表发送端(客户端|服务器)发送的实体数据的数据类型。 
比如:Content-Type:text/html; 
代表发送端发送的数据格式是html。

二者合起来, 
Accept:text/xml; 
Content-Type:text/html 
即代表希望接受的数据类型是xml格式,本次请求发送的数据的数据格式是html。
 

Header    解释    示例
Accept    指定客户端能够接收的内容类型    Accept: text/plain, text/html,*/*
Accept-Charset    浏览器可以接受的字符编码集。    Accept-Charset: iso-8859-5
Accept-Encoding    指定浏览器可以支持的web服务器返回内容压缩编码类型。    Accept-Encoding: compress, gzip
Accept-Language    浏览器可接受的语言    Accept-Language: en,zh
Accept-Ranges    可以请求网页实体的一个或者多个子范围字段    Accept-Ranges: bytes
Authorization    HTTP授权的授权证书    Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Cache-Control    指定请求和响应遵循的缓存机制    Cache-Control: no-cache
Connection    表示是否需要持久连接。(HTTP 1.1默认进行持久连接)    Connection: keep-alive
Cookie    HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。    Cookie: $Version=1; Skin=new;
Content-Length    请求的内容长度    Content-Length: 348
Content-Type    请求的与实体对应的MIME信息    Content-Type: application/x-www-form-urlencoded
Date    请求发送的日期和时间    Date: Tue, 15 Nov 2010 08:12:31 GMT
Expect    请求的特定的服务器行为    Expect: 100-continue
From    发出请求的用户的Email    From: user@email.com
Host    指定请求的服务器的域名和端口号    Host: www.zcmhi.com
If-Match    只有请求内容与实体相匹配才有效    If-Match: “737060cd8c284d8af7ad3082f209582d”
If-Modified-Since    如果请求的部分在指定时间之后被修改则请求成功,未被修改则返回304代码    If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT
If-None-Match    如果内容未改变返回304代码,参数为服务器先前发送的Etag,与服务器回应的Etag比较判断是否改变    If-None-Match: “737060cd8c284d8af7ad3082f209582d”
If-Range    如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体。参数也为Etag    If-Range: “737060cd8c284d8af7ad3082f209582d”
If-Unmodified-Since    只在实体在指定时间之后未被修改才请求成功    If-Unmodified-Since: Sat, 29 Oct 2010 19:43:31 GMT
Max-Forwards    限制信息通过代理和网关传送的时间    Max-Forwards: 10
Pragma    用来包含实现特定的指令    Pragma: no-cache
Proxy-Authorization    连接到代理的授权证书    Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Range    只请求实体的一部分,指定范围    Range: bytes=500-999
Referer    先前网页的地址,当前请求网页紧随其后,即来路    Referer: http://www.zcmhi.com/archives/71.html
TE    客户端愿意接受的传输编码,并通知服务器接受接受尾加头信息    TE: trailers,deflate;q=0.5
Upgrade    向服务器指定某种传输协议以便服务器进行转换(如果支持)    Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
User-Agent    User-Agent的内容包含发出请求的用户信息    User-Agent: Mozilla/5.0 (Linux; X11)
Via    通知中间网关或代理服务器地址,通信协议    Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
Warning    关于消息实体的警告信息    Warn: 199 Miscellaneous warning
 

 

cookie 和session 的区别:

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
   考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
   考虑到减轻服务器性能方面,应当使用COOKIE。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

5、所以个人建议:
   将登陆信息等重要信息存放为SESSION
   其他信息如果需要保留,可以放在COOKIE中

 

response和session 的区别:

response:

1、发送cookie--添加cookie对象:Cookie ck=new Cookie("key","value");addCookie(Cookie对象)

2、跳转页面--sendRedirect("跳转地址")--直接跳转。

3、setHeader("refresh","秒数;URL=跳转地址")--定时跳转页面。

4、setHeader("refresh","秒数")--定时刷新页面。

5、没有设置属性值的方法。没有setAttribute的方法。

6、setheader("cache-control","no-cache")--禁止浏览器缓存

session:

1、setAttribute("key",object)--设置属性值。getAttribute("key")--获取属性值--返回Object类型需要将获取到的值用toString()方法。

2、session.invalidate()--销毁session--一般退出登录时用。

3、setMaxInactiveInterval(秒数)--设置超时秒数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值