เปิดใช้งาน IIS7 gzip


229

ฉันจะเปิดใช้งาน IIS7 เพื่อ gzip ไฟล์คงที่เช่น js และ css ได้อย่างไรและฉันจะทดสอบได้อย่างไรว่า IIS7 gziping จริง ๆ ก่อนส่งให้ลูกค้าหรือไม่

คำตอบ:


243

องค์ประกอบ

คุณสามารถเปิดใช้งานการบีบอัด GZIP ทั้งหมดในWeb.configไฟล์ของคุณ สิ่งนี้มีประโยชน์อย่างยิ่งหากคุณอยู่บนโฮสติ้งที่ใช้ร่วมกันและไม่สามารถกำหนดค่า IIS โดยตรงหรือคุณต้องการให้การตั้งค่าของคุณดำเนินการระหว่างสภาพแวดล้อมทั้งหมดที่คุณกำหนดเป้าหมาย

<system.webServer>
  <httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
    <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll"/>
    <dynamicTypes>
      <add mimeType="text/*" enabled="true"/>
      <add mimeType="message/*" enabled="true"/>
      <add mimeType="application/javascript" enabled="true"/>
      <add mimeType="*/*" enabled="false"/>
    </dynamicTypes>
    <staticTypes>
      <add mimeType="text/*" enabled="true"/>
      <add mimeType="message/*" enabled="true"/>
      <add mimeType="application/javascript" enabled="true"/>
      <add mimeType="*/*" enabled="false"/>
    </staticTypes>
  </httpCompression>
  <urlCompression doStaticCompression="true" doDynamicCompression="true"/>
</system.webServer>

การทดสอบ

หากต้องการทดสอบว่าการบีบอัดทำงานได้หรือไม่ให้ใช้เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ใน ChromeหรือFirebug สำหรับ Firefoxและตรวจสอบให้แน่ใจว่าได้ตั้งค่าส่วนหัวการตอบกลับ HTTP:

Content-Encoding: gzip

โปรดทราบว่าส่วนหัวนี้จะไม่ปรากฏหากรหัสการตอบสนองคือ 304 (ไม่ได้แก้ไข) หากเป็นกรณีนี้ให้ทำการรีเฟรชเต็มรูปแบบ (กด Shift หรือควบคุมค้างไว้ในขณะที่คุณกดปุ่มรีเฟรช) และตรวจสอบอีกครั้ง


@ DenNukem ขอโทษฉันไม่แน่ใจจริงๆ ฉันทดสอบสิ่งนี้กับ IIS7 เท่านั้น ใครสนใจที่จะแสดงความคิดเห็น?
Drew Noakes

21
ระวัง - มันจะทำงานเฉพาะเมื่อส่วน httpCompression ใน applicationhost.config ถูกปลดล็อค โดยค่าเริ่มต้นส่วนที่ถูกล็อคสำหรับการปรับเปลี่ยนดังนั้นการเอาชนะใน web.config ไม่ทำงาน เสียเวลาหลายชั่วโมงในเรื่องนี้ stackoverflow.com/a/2894695/245460ดูความคิดเห็นบทความร้อง
Karel Kral

ตรวจสอบให้แน่ใจว่าเป็นคุณลักษณะที่ติดตั้งของ Web Role และจาก MSDN: "คุณยังสามารถเพิ่มรายการไวด์การ์ดสำหรับประเภท MIME ได้อย่างไรก็ตามคุณสามารถตั้งค่าประเภท MIME สำหรับระดับเว็บเซิร์ฟเวอร์เท่านั้นตัวอย่างเช่นเพื่อเปิดใช้งานการบีบอัดแบบคงที่สำหรับ ประเภท MIME ทั้งหมดสำหรับเว็บไซต์เริ่มต้นเพิ่มรายการ wildcard สำหรับประเภท MIME สำหรับระดับเซิร์ฟเวอร์ก่อนจากนั้นเปิดใช้งานการบีบอัดแบบคงที่สำหรับเว็บไซต์เริ่มต้น "
ลุค Puplett

12
การบีบอัดแบบไดนามิกจะไม่ทำงานจนกว่าคุณจะติดตั้งโมดูลการบีบอัดเนื้อหาแบบไดนามิกบนเซิร์ฟเวอร์ (สามารถทำได้ผ่านโปรแกรมติดตั้งแพลตฟอร์มเว็บ) คุณจะต้องใช้สิ่งนี้หากคุณใช้ชุด Css / Js
ทำเครื่องหมาย

css เท่านั้นที่ถูกบีบอัด.jsไม่ใช่ ลองเพิ่มapplication/x-javascriptอีกครั้ง ใช้ร่วมกับโพงดังนั้นจึงลบdirectoryพารามิเตอร์
coding_idiot

58

คุณจะต้องเปิดใช้งานคุณสมบัติในแผงควบคุมคุณลักษณะ Windows:

ภาพหน้าจอคุณลักษณะ IIS


16
ใน Windows Server 2008 R2 จะอยู่ภายใต้ตัวจัดการเซิร์ฟเวอร์> บทบาท> เว็บเซิร์ฟเวอร์ (IIS) คลิก "เพิ่มบริการบทบาท" ในส่วน "บทบาท" "การบีบอัดเนื้อหาแบบไดนามิก" แสดงอยู่ในส่วนหัว "ประสิทธิภาพ"
Jonathan Little

37

Global Gzip ใน HttpModule

หากคุณไม่มีสิทธิ์เข้าถึงอินสแตนซ์ IIS สุดท้าย (โฮสติ้งที่ใช้ร่วมกัน ... ) คุณสามารถสร้าง HttpModule ที่เพิ่มรหัสนี้ในทุก ๆ เหตุการณ์ของ HttpApplication.Begin_Request:

HttpContext context = HttpContext.Current;
context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress);
HttpContext.Current.Response.AppendHeader("Content-encoding", "gzip");
HttpContext.Current.Response.Cache.VaryByHeaders["Accept-encoding"] = true;

การทดสอบ

รุ่งโรจน์ไม่มีวิธีแก้ปัญหาโดยไม่ต้องทดสอบ ฉันชอบใช้ปลั๊กอิน " Liveheaders " ของ Firefox ซึ่งจะแสดงข้อมูลทั้งหมดเกี่ยวกับข้อความ http ทั้งหมดระหว่างเบราว์เซอร์และเซิร์ฟเวอร์รวมถึงการบีบอัดขนาดไฟล์ (ซึ่งคุณสามารถเปรียบเทียบกับขนาดไฟล์บนเซิร์ฟเวอร์)


3
ฉันใช้โฮสติ้งที่ใช้ร่วมกันและไม่จำเป็นต้องเขียนโค้ดใด ๆ เพื่อเปิดใช้งานการบีบอัดเอาต์พุต GZIP มันเป็นไปได้ผ่าน Web.config เพียงอย่างเดียว ดูคำตอบของฉัน: stackoverflow.com/questions/702124/enable-iis7-gzip/ …
Drew Noakes

2
ฉันวางสามบรรทัดแรกที่จุดเริ่มต้นของหน้า aspx หนึ่งที่ฉันต้องการบีบอัดและทำงานได้! ขอบคุณ! นี่คือความยุ่งยากน้อยกว่าวิธีอื่น ๆ และทำงานบน IIS 6 สำหรับฉัน
DenNukem

1
นี่เป็นวิธีที่จะทำอย่างแน่นอน
Matthew James Davis


2

ฉันต้องการเพิ่มฟีเจอร์ในฟีเจอร์ windows ตามที่ Charlie กล่าวไว้เท่านั้นสำหรับผู้ที่ไม่สามารถค้นหาได้ในวินโดวส์ 10 หรือเซิร์ฟเวอร์ 2012+ ให้ค้นหาดังนี้ ฉันดิ้นรนเล็กน้อย

Windows 10

ป้อนคำอธิบายรูปภาพที่นี่

เซิร์ฟเวอร์ windows 2012 R2

ป้อนคำอธิบายรูปภาพที่นี่

หน้าต่างเซิร์ฟเวอร์ 2016

ป้อนคำอธิบายรูปภาพที่นี่


1

หากคุณใช้ YSlow กับ Firebug และวิเคราะห์ประสิทธิภาพของหน้าเว็บของคุณ YSlow จะบอกคุณได้อย่างชัดเจนว่าส่วนใดในหน้าเว็บของคุณที่ไม่ใช่ gzip'd!


1

หากคุณกำลังพยายามที่จะ gzip หน้าแบบไดนามิก (เช่น aspx) และมันไม่ทำงานอาจเป็นเพราะตัวเลือกไม่ได้เปิดใช้งาน (คุณต้องติดตั้งโมดูลการบีบอัดเนื้อหาแบบไดนามิกโดยใช้คุณสมบัติ Windows):

http://support.esri.com/en/knowledgebase/techarticles/detail/38616



0

ลอง Firefox พร้อมติดตั้ง addons Firebug ฉันใช้มัน เครื่องมือที่ยอดเยี่ยมสำหรับนักพัฒนาเว็บ

ฉันได้เปิดใช้งานการบีบอัด Gzip ด้วยเช่นกันใน IIS7 โดยใช้ web.config


Google ยังมีการทดสอบหน้าเว็บอีกด้วย: developers.google.com/speed/pagespeed/insights
Dr. Aaron Dishno

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.