PROX有什么办法指定编码么

新手入门、经验交流

Moderator: cre

Forum rules
  • 软件自带帮助是最好的入门教程,请仔细阅读;在您掌握最基本知识前,我们没法帮助您
  • 提问前请先查阅软件帮助文件和论坛相关讨论
  • 查阅软件帮助和论坛相关讨论即可解决的问题帖将直接删除,以免浪费他人时间
  • 请学会如何提问,尽量将问题描述清楚,不明确的提问将被直接删除
Post Reply
ddbb
Moderator
Posts: 425
Joined: Jan 07 2008, 13:30

PROX有什么办法指定编码么

Post by ddbb »

sina这个站太恶心.......某些网页是GBK的 某些又是UTF-8的......而浏览器只能针对domain来设置编码.....

HTML页面还好说 在上面有charset的设定....可是JS文件就不好搞了...

PROX有办法针对某一URL 指定编码么....比如访问某JS文件的时候 让这个JS文件告诉浏览器 他是GBK编码

P.S: 知道了一种方法 在调用的时候 可以指定 <script charset="gb2312" type="text/javascript" src="xxxx.js"></script>

这样一来 调用时不会乱码......不过直接打开这个JS文件看内容 还是乱码......有啥办法么
User avatar
phoenix
Site Admin
Posts: 526
Joined: Dec 29 2007, 16:27

Re: PROX有什么办法指定编码么

Post by phoenix »

ddbb wrote:PROX有办法针对某一URL 指定编码么
可以加 Content-Encoding 这个 header,是否管用就不知道了。
ddbb wrote:不过直接打开这个JS文件看内容 还是乱码
这个应该是你的编辑器的文件编码识别有问题吧?
ddbb
Moderator
Posts: 425
Joined: Jan 07 2008, 13:30

Re: PROX有什么办法指定编码么

Post by ddbb »

我所说的直接打开文件是指比如在opera里直接打JS的URL 或是用show xxx javascript

因为JS头上没有指定编码 所以就用了浏览器默认的或是指定的.....而sina有两种编码 根本没法指定......

P.S: Content-Encoding怎么加? 我查了sidki和default 还有help 没找到例子..... :oops:

找到了这一段.......
HTTP 1.1中有两个实体头(Entity-Header)直接与编码相关,分别为Content-Encoding和Transfer-Encoding.

先说Content-Encoding, 该头表示实体已经采用了的编码方式.Content-Encoding是请求URL对应实体(Entity)本身的一部分.比如请求URL为http://host/image.png.gz时,可能会得到的Content-Encoding为gzip.Content-Encoding的值是不区分大小写的,目前HTTP1.1标准中已包括的有gzip/compress/deflate/identity等.
与Content-Encoding头对应,HTTP请求中包含了一个Accept-Encoding头,该头用来说明用户代理(User-Agent,一般也就是浏览器)能接受哪些类型的编码. 如果HTTP请求中不存在该头,服务器可以认为用户代理能接受任何编码类型.

接下来重点描述Transfer-Encoding, 该头表示为了达到安全传输或者数据压缩等目的而对实体进行的编码. Transfer-Encoding与Content-Encoding的不同之处在于:
1, Transfer-Encoding只是在传输过程中才有的,并非请求URL对应实体的本身特性.
2, Transfer-Encoding是一个"跳到跳"头,而Content-Encoding是"端到端"头.
该头的用途举例如,请求URL为http://host/abc.txt,服务器发送数据时认为该文件可用gzip方式压缩以节省带宽,接收端看到Transfer-Encoding为gzip首先进行解码然后才能得到请求实体.
此外多个编码可能同时对同一实体使用,所以Transfer-Encoding头中编码顺序相当重要,它代表了解码的顺序过程.同样,Transfer-Encoding的值也是不区分大小写的,目前HTTP1.1标准中已包括的有gzip/compress/deflate/identity/chunked等.
Transfer-Encoding中有一类特定编码:chunked编码.该编码将实体分块传送并逐块标明长度,直到长度为0块表示传输结束, 这在实体长度未知时特别有用(比如由数据库动态产生的数据). HTTP1.1标准规定,只要使用了Transfer-Encoding的地方就必须使用chunked编码,并且chunked必须为最后一层编码.任何HTTP 1.1应用都必须能处理chunked编码.
与Transfer-Encoding对应的请求头为TE,它主要表示请求发起者愿意接收的Transfer-Encoding类型. 如果TE为空或者不存在,则表示唯一能接受的类型为chunked.
其他与Transfer-Encoding相关的头还包括Trailer,它与chunked编码相关,就不细述了.

顾名思义,Content-Length表示传输的实体长度,以字节为单位(在请求方法为HEAD时表示会要发送的长度,但并不实际发送.).Content-Length受Transfer-Encoding影响很大,只要Transfer-Encoding不为identity,则实际传输长度由编码中的chunked决定,Content-Length即使存在也被忽略.
这里所说的编码 好像和我所说的 编码 不是一回事.....

P.S2: 查了一下PROX的LOG 应该是和这两段有关
GET /iframe/87/20080708/content.js HTTP/1.0
User-Agent: Opera/9.80 (Windows NT 5.1; U; zh-cn) Presto/2.5.27 Version/10.60
Host: news.sina.com.cn
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: ja-JP,ja;q=0.9,en;q=0.8
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1

Accept-Encoding: gzip, deflate
在试着写Filter 看怎么能改掉

P.S3: :cry: 不对 错了.....这个是out ......不是这里..... 我找的应该是in

P.S4: 终于找到了 是 Content-Type: application/javascript
改成
Content-Type: application/javascript; charset="gb2312"
就行了.....
Post Reply